[seiscomp, scanloc] Install, add .gitignore

This commit is contained in:
2025-10-09 15:07:02 +02:00
commit 20f5301bb1
2848 changed files with 1315858 additions and 0 deletions

View File

@ -0,0 +1,960 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Configuration &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Magnitudes" href="magnitudes.html" />
<link rel="prev" title="Inventory" href="inventory.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="magnitudes.html" title="Magnitudes"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="inventory.html" title="Inventory"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="configuration">
<span id="concepts-configuration"></span><h1>Configuration<a class="headerlink" href="#configuration" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>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.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>The <cite>SeisComP</cite> framework defines a common schema to read configuration parameters.
This schema is used by all <a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">SeisComP modules</span></a> with names
starting with <strong>sc</strong>, e.g. <cite>scautopick</cite>. Other modules might be available
as well such as third party modules which use other naming conventions.</p>
<p>A way to discover a module that uses the <cite>SeisComP</cite> configuration schema
is to call it with <code class="docutils literal notranslate"><span class="pre">--help</span></code>. The first lines of a typical output look like
this:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>Generic:
<span class="w"> </span>-h<span class="w"> </span><span class="o">[</span><span class="w"> </span>--help<span class="w"> </span><span class="o">]</span><span class="w"> </span>Produce<span class="w"> </span><span class="nb">help</span><span class="w"> </span>message
<span class="w"> </span>-V<span class="w"> </span><span class="o">[</span><span class="w"> </span>--version<span class="w"> </span><span class="o">]</span><span class="w"> </span>Show<span class="w"> </span>version<span class="w"> </span>information
<span class="w"> </span>--config-file<span class="w"> </span>arg<span class="w"> </span>Use<span class="w"> </span>alternative<span class="w"> </span>configuration<span class="w"> </span>file
</pre></div>
</div>
<p>The reason for that is that there are also other modules which do not
use the <cite>SeisComP</cite> 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 (<code class="docutils literal notranslate"><span class="pre">seiscomp</span> <span class="pre">update-config</span></code>).</p>
<p>Again, the two indicators that a module uses the following configuration
schema are:</p>
<ul class="simple">
<li><p>The module name is prefixed with <strong>sc</strong>, e.g. <em>scautopick</em></p></li>
<li><p>The output of <code class="docutils literal notranslate"><span class="pre">--help</span></code> looks like the text fragment above</p></li>
</ul>
<p>A typical configuration requires the following steps:</p>
<ol class="arabic simple">
<li><p>Generation and import of an inventory (station meta data): Read the concept
section <a class="reference internal" href="inventory.html#concepts-inventory"><span class="std std-ref">Inventory</span></a>,</p></li>
<li><p><a class="reference internal" href="#global-modules-config"><span class="std std-ref">Configuration of modules</span></a>,</p></li>
<li><p><a class="reference internal" href="#global-bindings-config"><span class="std std-ref">Configuration of bindings</span></a>.</p></li>
</ol>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">Standalone modules</span></a> can also run without inventory.</p>
</div>
</section>
<section id="configuration-of-modules">
<span id="concepts-configuration-configs"></span><h2>Configuration of Modules<a class="headerlink" href="#configuration-of-modules" title="Permalink to this heading"></a></h2>
<p><cite>SeisComP</cite> modules provide 2 types of configurations:</p>
<ul>
<li><p><a class="reference internal" href="#global-modules-config"><span class="std std-ref">Module configurations</span></a> define module control
parameters which are equally applied to all operations on waveforms, event
parameters, graphical user interfaces, etc.</p>
<p><strong>All</strong> <a class="reference internal" href="modules.html#concepts-modules-daemon"><span class="std std-ref">daemon modules</span></a> and <strong>some</strong>
<a class="reference internal" href="modules.html#concepts-modules-commandline"><span class="std std-ref">command-line tools</span></a> provide module
configurations. <em>Module configurations are overridden by bindings
configurations.</em></p>
</li>
<li><p><a class="reference internal" href="#global-bindings-config"><span class="std std-ref">Binding configurations</span></a> 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 <a class="reference internal" href="../../apps/seedlink.html#seedlink"><span class="std std-ref">seedlink</span></a> or the phase detection by
<a class="reference internal" href="../../apps/scautopick.html#scautopick"><span class="std std-ref">scautopick</span></a>.</p>
<p>In contrast to module configuration, <strong>only some</strong>
<a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">daemon modules</span></a> and a very few
<a class="reference internal" href="../glossary.html#term-GUI"><span class="xref std std-term">GUI modules</span></a> provide bindings. <em>Binding configurations override
module configurations.</em></p>
</li>
</ul>
<p>Whether or not a module considers bindings configurations can be read in the
module configuration panel of <a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a>.</p>
<div class="two column layout"><figure class="align-default" id="id3">
<img alt="scconfig: no bindings configurations" src="../../_images/scconfig_no_bindings.png" />
<figcaption>
<p><span class="caption-text">scconfig modules panel indicating that no bindings can be configured.</span><a class="headerlink" href="#id3" title="Permalink to this image"></a></p>
</figcaption>
</figure>
<figure class="align-default" id="id4">
<img alt="scconfig: no bindings configurations" src="../../_images/scconfig_has_bindings.png" />
<figcaption>
<p><span class="caption-text">scconfig modules panel indicating that bindings can be configured.</span><a class="headerlink" href="#id4" title="Permalink to this image"></a></p>
</figcaption>
</figure>
</div><section id="module-configuration">
<span id="global-modules-config"></span><h3>Module configuration<a class="headerlink" href="#module-configuration" title="Permalink to this heading"></a></h3>
<p>Configurations for modules are saved as <code class="file docutils literal notranslate"><span class="pre">*.cfg</span></code> files. There are three
directories involved where configuration files can be stored:</p>
<ol class="arabic simple">
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/defaults/</span></code>: This directory ships with the distribution
of <cite>SeisComP</cite> and should never be touched. All contained files might be
overwritten with the next software update.</p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/</span></code>: 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.</p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$HOME/.seiscomp/</span></code>: This directory is in the users home directory and
it is meant to provide configurations which override default and system
configurations.
It is called the user configuration directory.</p></li>
</ol>
<p>Furthermore there are two file names involved in each directory:
<code class="file docutils literal notranslate"><span class="pre">global.cfg</span></code> and <code class="file docutils literal notranslate"><span class="pre">[module].cfg</span></code>. The file <code class="file docutils literal notranslate"><span class="pre">global.cfg</span></code>
will be loaded by all modules and it is a good place to store common
parameters such as messaging connections or logging configurations.</p>
<p>The three directories and two files result in 6 locations to read all of a
modules configuration parameters:</p>
<ol class="arabic simple">
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/defaults/global.cfg</span></code></p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/defaults/[module].cfg</span></code></p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/global.cfg</span></code></p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/[module].cfg</span></code></p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$HOME/.seiscomp/global.cfg</span></code></p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$HOME/.seiscomp/[module].cfg</span></code></p></li>
</ol>
<p>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 <code class="file docutils literal notranslate"><span class="pre">$HOME/.seiscomp/</span></code>.</p>
<section id="adjusting">
<h4>Adjusting<a class="headerlink" href="#adjusting" title="Permalink to this heading"></a></h4>
<p><a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a> provides a user-friendly graphical interface to adjust the
global and the module configuration parameters.</p>
<figure class="align-center" id="id5">
<a class="reference internal image-reference" href="../../_images/scconfig_config_modules.png"><img alt="scconfig: module configuration" src="../../_images/scconfig_config_modules.png" style="width: 18cm;" /></a>
<figcaption>
<p><span class="caption-text">scconfig modules module configuration panel.</span><a class="headerlink" href="#id5" title="Permalink to this image"></a></p>
</figcaption>
</figure>
<p>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 <code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/defaults/</span></code> to <code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/</span></code> and
adjust it there.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Do not adjust any parameter in the default configuration files located in
<code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/defaults/</span></code> as they will be overwritten by future
software updates.</p>
</div>
</section>
<section id="application">
<h4>Application<a class="headerlink" href="#application" title="Permalink to this heading"></a></h4>
<p>Module configurations are usually read when starting a module and cannot be
changed during runtime. For applying any change on module configuration</p>
<ol class="arabic simple">
<li><p>Save the configuration,</p></li>
<li><p>Restart or execute all affected modules.</p></li>
</ol>
<p>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
<a class="reference internal" href="../../apps/scrttv.html#scrttv"><span class="std std-ref">scrttv</span></a> in the streams section as <cite>codes.streams</cite>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>scrttv<span class="w"> </span>--streams.codes<span class="o">=</span><span class="s2">&quot;GR.*.*.HH?&quot;</span>
</pre></div>
</div>
</section>
</section>
<section id="bindings-configuration">
<span id="global-bindings-config"></span><h3>Bindings configuration<a class="headerlink" href="#bindings-configuration" title="Permalink to this heading"></a></h3>
<p>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. <cite>SeisComP</cite> 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.</p>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<p>Bindings can be conveniently configured in the Bindings panel of <a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a>.
Read the section <a class="reference internal" href="../../apps/scconfig.html#scconfig-bindings"><span class="std std-ref">Bindings panel</span></a> for instructions.</p>
</div>
<figure class="align-center" id="id6">
<span id="config-fig-binding"></span><img alt="../../_images/binding.png" src="../../_images/binding.png" />
<figcaption>
<p><span class="caption-text">Binding</span><a class="headerlink" href="#id6" title="Permalink to this image"></a></p>
<div class="legend">
<p>A binding holds the configuration how a station is used in a module.</p>
</div>
</figcaption>
</figure>
<p>Parameters defined in bindings override parameters in module configurations.
Bindings configurations are saved as stations bindings or as bindings profiles with
given names:</p>
<ol class="arabic simple">
<li><p><strong>Station binding parameters:</strong> <code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/key/[module]/station_NET_STA</span></code>
is used only be one station NET.STA.</p></li>
<li><p><strong>Binding profile parameters:</strong> <code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/key/[module]/profile_[name]</span></code>
can be used by many stations. Then any update of this file applies to all stations
bound to this profile.</p></li>
</ol>
<p>Like in this list, the actual binding parameters for each module are
expected in either <code class="file docutils literal notranslate"><span class="pre">etc/key/$MODULE/station_$NET_$STA</span></code> or
<code class="file docutils literal notranslate"><span class="pre">etc/key/$MODULE/profile_$PROFILE</span></code>. 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.</p>
<p>The bindings themselves are links from the module to the station. They are written
into key files, e.g.</p>
<ul class="simple">
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/key/station_NET_STA</span></code></p></li>
</ul>
<p>Example of bindings profiles:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="c1"># Binding references</span>
<span class="na">global</span><span class="o">:</span><span class="s">__HH</span>
<span class="na">scautopick</span><span class="o">:</span><span class="s">default</span>
<span class="na">seedlink</span><span class="o">:</span><span class="s">geofon</span>
</pre></div>
</div>
<p>Example of bindings profiles and a station binding for slarchive:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="c1"># Binding references</span>
<span class="na">global</span><span class="o">:</span><span class="s">__HH</span>
<span class="na">scautopick</span><span class="o">:</span><span class="s">default</span>
<span class="na">seedlink</span><span class="o">:</span><span class="s">geofon</span>
<span class="na">slarchive</span>
</pre></div>
</div>
<p>The key files are named like <code class="file docutils literal notranslate"><span class="pre">station_$NET_$STA</span></code>, e.g. <code class="file docutils literal notranslate"><span class="pre">station_GE_MORC</span></code>.
The names within the key files define for which modules the station registers. In the
above example it is the <strong>global</strong>, <strong>scautopick</strong>, <strong>seedlink</strong> and slarchive.</p>
<p>To list all modules a particular station is configured for is very simple by printing the content
of the station key file:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>cat<span class="w"> </span>etc/key/station_GE_MORC
seedlink:geofon
global:BH
scautopick
</pre></div>
</div>
<p>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:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="k">for</span><span class="w"> </span>i<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="sb">`</span>find<span class="w"> </span>etc/key<span class="w"> </span>-type<span class="w"> </span>f<span class="w"> </span>-maxdepth<span class="w"> </span><span class="m">1</span><span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;station_*_*&quot;</span><span class="sb">`</span><span class="p">;</span><span class="w"> </span><span class="k">do</span>
&gt;<span class="w"> </span>egrep<span class="w"> </span>-q<span class="w"> </span><span class="s1">&#39;^seedlink(:.*){0,1}$&#39;</span><span class="w"> </span><span class="nv">$i</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="nv">$i</span><span class="p">;</span>
&gt;<span class="w"> </span><span class="k">done</span>
etc/key/station_GE_MORC
etc/key/station_GE_UGM
</pre></div>
</div>
<p>Modules usually read the bindings configuration from the database but not from files.
Therefore, the bindings are stored in the database when executing</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>seiscomp<span class="w"> </span>update-config
</pre></div>
</div>
<p>The database tables involved are <code class="docutils literal notranslate"><span class="pre">ConfigModule</span></code>, <code class="docutils literal notranslate"><span class="pre">ConfigStation</span></code>, <code class="docutils literal notranslate"><span class="pre">Setup</span></code>,
<code class="docutils literal notranslate"><span class="pre">ParameterSet</span></code> and <code class="docutils literal notranslate"><span class="pre">Parameter</span></code>.</p>
<figure class="align-center" id="id7">
<span id="config-fig-configdb-schema"></span><img alt="../../_images/configdb-schema.png" src="../../_images/configdb-schema.png" />
<figcaption>
<p><span class="caption-text">Configuration database schema</span><a class="headerlink" href="#id7" title="Permalink to this image"></a></p>
</figcaption>
</figure>
<p>To illustrate the contents of the objects, the XML representation
is used below.</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Config&gt;</span>
<span class="w"> </span><span class="nt">&lt;module</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;Config/trunk&quot;</span><span class="w"> </span><span class="na">name=</span><span class="s">&quot;trunk&quot;</span><span class="w"> </span><span class="na">enabled=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span>...
<span class="w"> </span><span class="nt">&lt;/module&gt;</span>
<span class="nt">&lt;/Config&gt;</span>
</pre></div>
</div>
<p>A ConfigModule with publicID <em>Config/trunk</em> is created with name <em>trunk</em>. This
ConfigModule is managed by the global initialization script (<code class="file docutils literal notranslate"><span class="pre">etc/init/trunk.py</span></code>)
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:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>scapp<span class="w"> </span>--config-module<span class="w"> </span><span class="nb">test</span>
</pre></div>
</div>
<p>Here <strong class="program">scapp</strong> would read ConfigModule <em>test</em>. Because a ConfigModule <em>test</em>
is not managed by <strong class="program">seiscomp update-config</strong> it is up to the user to create
it.</p>
<p>For each station that has at least one binding, a ConfigStation object is
attached to the ConfigModule:</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Config&gt;</span>
<span class="w"> </span><span class="nt">&lt;module</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;Config/trunk&quot;</span><span class="w"> </span><span class="na">name=</span><span class="s">&quot;trunk&quot;</span><span class="w"> </span><span class="na">enabled=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;station</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;Config/trunk/GE/UGM&quot;</span>
<span class="w"> </span><span class="na">networkCode=</span><span class="s">&quot;GE&quot;</span><span class="w"> </span><span class="na">stationCode=</span><span class="s">&quot;UGM&quot;</span><span class="w"> </span><span class="na">enabled=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span>...
<span class="w"> </span><span class="nt">&lt;/station&gt;</span>
<span class="w"> </span><span class="nt">&lt;/module&gt;</span>
<span class="nt">&lt;/Config&gt;</span>
</pre></div>
</div>
<p>and finally one Setup per module:</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Config&gt;</span>
<span class="w"> </span><span class="nt">&lt;module</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;Config/trunk&quot;</span><span class="w"> </span><span class="na">name=</span><span class="s">&quot;trunk&quot;</span><span class="w"> </span><span class="na">enabled=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;station</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;Config/trunk/GE/UGM&quot;</span>
<span class="w"> </span><span class="na">networkCode=</span><span class="s">&quot;GE&quot;</span><span class="w"> </span><span class="na">stationCode=</span><span class="s">&quot;UGM&quot;</span><span class="w"> </span><span class="na">enabled=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;setup</span><span class="w"> </span><span class="na">name=</span><span class="s">&quot;default&quot;</span><span class="w"> </span><span class="na">enabled=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameterSetID&gt;</span>
<span class="w"> </span>ParameterSet/trunk/Station/GE/UGM/default
<span class="w"> </span><span class="nt">&lt;/parameterSetID&gt;</span>
<span class="w"> </span><span class="nt">&lt;/setup&gt;</span>
<span class="w"> </span><span class="nt">&lt;setup</span><span class="w"> </span><span class="na">name=</span><span class="s">&quot;scautopick&quot;</span><span class="w"> </span><span class="na">enabled=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameterSetID&gt;</span>
<span class="w"> </span>ParameterSet/trunk/Station/GE/UGM/scautopick
<span class="w"> </span><span class="nt">&lt;/parameterSetID&gt;</span>
<span class="w"> </span><span class="nt">&lt;/setup&gt;</span>
<span class="w"> </span><span class="nt">&lt;/station&gt;</span>
<span class="w"> </span><span class="nt">&lt;/module&gt;</span>
<span class="nt">&lt;/Config&gt;</span>
</pre></div>
</div>
<p>Here two setups have been created: <em>default</em> (which is a special case for
module <em>global</em> to be backwards compatible) and <em>scautopick</em> 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:</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Config&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameterSet</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;ParameterSet/trunk/Station/GE/UGM/scautopick&quot;</span>
<span class="w"> </span><span class="na">created=</span><span class="s">&quot;...&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;baseID&gt;</span>ParameterSet/trunk/Station/GE/UGM/default<span class="nt">&lt;/baseID&gt;</span>
<span class="w"> </span><span class="nt">&lt;moduleID&gt;</span>Config/trunk<span class="nt">&lt;/moduleID&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameter</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;...&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;name&gt;</span>timeCorr<span class="nt">&lt;/name&gt;</span>
<span class="w"> </span><span class="nt">&lt;value&gt;</span>-0.8<span class="nt">&lt;/value&gt;</span>
<span class="w"> </span><span class="nt">&lt;/parameter&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameter</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;...&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;name&gt;</span>detecFilter<span class="nt">&lt;/name&gt;</span>
<span class="w"> </span><span class="nt">&lt;value&gt;</span>
<span class="w"> </span>RMHP(10)<span class="ni">&amp;gt;&amp;gt;</span>ITAPER(30)<span class="ni">&amp;gt;&amp;gt;</span>BW(4,0.7,2)<span class="ni">&amp;gt;&amp;gt;</span>STALTA(2,80)
<span class="w"> </span><span class="nt">&lt;/value&gt;</span>
<span class="w"> </span><span class="nt">&lt;/parameter&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameter</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;...&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;name&gt;</span>trigOff<span class="nt">&lt;/name&gt;</span>
<span class="w"> </span><span class="nt">&lt;value&gt;</span>1.5<span class="nt">&lt;/value&gt;</span>
<span class="w"> </span><span class="nt">&lt;/parameter&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameter</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;...&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;name&gt;</span>trigOn<span class="nt">&lt;/name&gt;</span>
<span class="w"> </span><span class="nt">&lt;value&gt;</span>3<span class="nt">&lt;/value&gt;</span>
<span class="w"> </span><span class="nt">&lt;/parameter&gt;</span>
<span class="w"> </span><span class="nt">&lt;/parameterSet&gt;</span>
<span class="nt">&lt;/Config&gt;</span>
</pre></div>
</div>
<p>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.</p>
<p>The concept of global bindings which are specialized for each module is
reflected by the <em>baseID</em> of the ParameterSet which points to setup <em>default</em>
of station GE.UGM:</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt">&lt;Config&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameterSet</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;ParameterSet/trunk/Station/GE/UGM/default&quot;</span>
<span class="w"> </span><span class="na">created=</span><span class="s">&quot;...&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;moduleID&gt;</span>Config/trunk<span class="nt">&lt;/moduleID&gt;</span>
<span class="w"> </span><span class="nt">&lt;parameter</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;...&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;name&gt;</span>detecStream<span class="nt">&lt;/name&gt;</span>
<span class="w"> </span><span class="nt">&lt;value&gt;</span>BH<span class="nt">&lt;/value&gt;</span>
<span class="w"> </span><span class="nt">&lt;/parameter&gt;</span>
<span class="w"> </span><span class="nt">&lt;/parameterSet&gt;</span>
<span class="nt">&lt;/Config&gt;</span>
</pre></div>
</div>
<p>This ends up with a final configuration for scautopick and station GE.UGM:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Name</p></th>
<th class="head"><p>Value</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>detecStream</p></td>
<td><p>BH</p></td>
</tr>
<tr class="row-odd"><td><p>timeCorr</p></td>
<td><p>-0.8</p></td>
</tr>
<tr class="row-even"><td><p>detecFilter</p></td>
<td><p>RMHP(10)&gt;&gt;ITAPER(30)&gt;&gt;BW(4,0.7,2)&gt;&gt;STALTA(2,80)</p></td>
</tr>
<tr class="row-odd"><td><p>trigOff</p></td>
<td><p>1.5</p></td>
</tr>
<tr class="row-even"><td><p>trigOn</p></td>
<td><p>3</p></td>
</tr>
</tbody>
</table>
<p>which is the concatenation of the two files <code class="file docutils literal notranslate"><span class="pre">etc/key/global/station_GE_UGM</span></code>
and <code class="file docutils literal notranslate"><span class="pre">etc/key/scautopick/station_GE_UGM</span></code>. The filter grammar is explained in
<a class="reference internal" href="../filter-grammar.html#filter-grammar"><span class="std std-ref">filter grammar section</span></a>.</p>
<p>The <code class="file docutils literal notranslate"><span class="pre">etc/key</span></code> 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 <code class="file docutils literal notranslate"><span class="pre">etc/key</span></code> is meant
for backup and used for copying bindings from one computer to another.</p>
<section id="id1">
<h4>Adjusting<a class="headerlink" href="#id1" title="Permalink to this heading"></a></h4>
<p><a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a> provides a graphical interface to adjust the global and the module
bindings parameters and to create the bindings. It populates the <code class="file docutils literal notranslate"><span class="pre">etc/key</span></code>
directory and it takes care that they synchronize with the database when processing
<em>Update configuration</em> in the <em>System</em> panel.</p>
<figure class="align-center" id="id8">
<a class="reference internal image-reference" href="../../_images/scconfig_config_bindings.png"><img alt="scconfig: bindings configuration" src="../../_images/scconfig_config_bindings.png" style="width: 18cm;" /></a>
<figcaption>
<p><span class="caption-text">scconfig modules bindings configuration panel.</span><a class="headerlink" href="#id8" title="Permalink to this image"></a></p>
</figcaption>
</figure>
<p>Alternatively, you may manually generate the binding parameter file
<code class="file docutils literal notranslate"><span class="pre">etc/key/global/station_GE_UGM</span></code> and
<code class="file docutils literal notranslate"><span class="pre">etc/key/scautopick/station_GE_UGM</span></code> and add the binding to the key file
corresponding to the station, e.g.,
<code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/key/station_GE_UGM</span></code>.´</p>
</section>
<section id="seiscomp-shell">
<h4>SeisComP shell<a class="headerlink" href="#seiscomp-shell" title="Permalink to this heading"></a></h4>
<p>Instead of creating bindings in <a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a> or by adjusting key files
manually you may assign binding profiles to stations or networks or remove them
using the <cite>SeisComP</cite> shell which is a specific shell:</p>
<ol class="arabic">
<li><p>Start the <cite>SeisComP</cite> shell:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>seiscomp<span class="w"> </span>shell
</pre></div>
</div>
</li>
<li><p>Issue a shell command. Examples:</p>
<ul>
<li><p>Read the help of the new shell:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="o">================================================================================</span>
SeisComP<span class="w"> </span><span class="nv">shell</span>
<span class="o">================================================================================</span>
Welcome<span class="w"> </span>to<span class="w"> </span>the<span class="w"> </span>SeisComP<span class="w"> </span>interactive<span class="w"> </span>shell.<span class="w"> </span>You<span class="w"> </span>can<span class="w"> </span>get<span class="w"> </span><span class="nb">help</span><span class="w"> </span>about
available<span class="w"> </span>commands<span class="w"> </span>with<span class="w"> </span><span class="s1">&#39;help&#39;</span>.<span class="w"> </span><span class="s1">&#39;exit&#39;</span><span class="w"> </span>leaves<span class="w"> </span>the<span class="w"> </span>shell.
$<span class="w"> </span><span class="nb">help</span>
</pre></div>
</div>
</li>
<li><p>add the existing scautopick binding profile, <em>default</em>, to the station
<em>GE.UGM</em>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">set</span><span class="w"> </span>profile<span class="w"> </span>scautopick<span class="w"> </span>default<span class="w"> </span>GE.UGM
</pre></div>
</div>
<p>or to all stations of the network <em>GE</em>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">set</span><span class="w"> </span>profile<span class="w"> </span>scautopick<span class="w"> </span>default<span class="w"> </span>GE.UGM
</pre></div>
</div>
</li>
<li><p>remove the scautopick binding profile, <em>default</em>, from the station <em>GE.UGM</em>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>remove<span class="w"> </span>profile<span class="w"> </span>scautopick<span class="w"> </span>default<span class="w"> </span>GE.UGM
</pre></div>
</div>
</li>
<li><p>exit the shell and get back to the Linux shell:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">exit</span>
</pre></div>
</div>
</li>
</ul>
</li>
</ol>
</section>
<section id="example-global-bindings">
<h4>Example: global bindings<a class="headerlink" href="#example-global-bindings" title="Permalink to this heading"></a></h4>
<p>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:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">detecLocid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;&quot;</span>
<span class="na">detecStream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">HH</span>
</pre></div>
</div>
<p>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 <cite>detecLocid</cite>
and <cite>detecStream</cite>. The TraceView, <a class="reference internal" href="../../apps/scrttv.html#scrttv"><span class="std std-ref">scrttv</span></a> 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.</p>
<p>The meta data of a binding are:</p>
<ul class="simple">
<li><p>Network code,</p></li>
<li><p>Station code,</p></li>
<li><p>Module name.</p></li>
</ul>
<p>The actual binding data are the key value pairs.</p>
</section>
<section id="reading-bindings">
<h4>Reading bindings<a class="headerlink" href="#reading-bindings" title="Permalink to this heading"></a></h4>
<p>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:</p>
<ol class="arabic simple">
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/key/global/</span></code>: Global bindings configurations</p></li>
<li><p><code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/etc/key/[module]</span></code>: Bindings configurations for a particular module.</p></li>
</ol>
<p>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.</p>
<p>As with inventory information there might are cases when a module should
not connect to a database and work offline, in particular when <code class="docutils literal notranslate"><span class="pre">--ep</span></code> is being
used.</p>
<p>In order to
read the bindings configuration from XML files (again in SCML format),
use <a class="reference internal" href="../../apps/scxmldump.html#scxmldump"><span class="std std-ref">scxmldump</span></a> to dump the configuration XML file and let
the module use this XML file, <code class="docutils literal notranslate"><span class="pre">--config-db</span></code> must be used:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>myapp<span class="w"> </span>--config-db<span class="w"> </span>config.xml
</pre></div>
</div>
<p>That will completely bypass the database (even if used for event information or
inventory) for reading station bindings.</p>
<p>To extract a configuration XML file from the database, <a class="reference internal" href="../../apps/scxmldump.html#scxmldump"><span class="std std-ref">scxmldump</span></a> can be used:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>scxmldump<span class="w"> </span>-fC<span class="w"> </span>-d<span class="w"> </span>localhost<span class="w"> </span>-o<span class="w"> </span>config.xml
</pre></div>
</div>
<p>One can also create a config XML file straight from the <code class="docutils literal notranslate"><span class="pre">etc/key</span></code> directory
with <code class="docutils literal notranslate"><span class="pre">bindings2cfg</span></code>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>bindings2cfg<span class="w"> </span>-o<span class="w"> </span>config.xml
</pre></div>
</div>
<p>To create an XML file from a temporary key directory, an alternative directory
can be specified with <code class="docutils literal notranslate"><span class="pre">--key-dir</span></code>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>bindings2cfg<span class="w"> </span>--key-dir<span class="w"> </span>/tmp/key<span class="w"> </span>-o<span class="w"> </span>config.xml
</pre></div>
</div>
</section>
<section id="id2">
<h4>Application<a class="headerlink" href="#id2" title="Permalink to this heading"></a></h4>
<p>Binding configurations are read when starting a module and cannot be
changed during runtime. For applying any change on binding configurations</p>
<ol class="arabic">
<li><p>Save the configuration,</p></li>
<li><p>Update the configuration</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>seiscomp<span class="w"> </span>update-config
</pre></div>
</div>
</li>
<li><p>Restart or execute all affected modules.</p></li>
</ol>
</section>
<section id="summary">
<h4>Summary<a class="headerlink" href="#summary" title="Permalink to this heading"></a></h4>
<ul class="simple">
<li><p>Bindings are maintained as key files in <code class="file docutils literal notranslate"><span class="pre">etc/key</span></code>,</p></li>
<li><p>Key files are another human readable representation of bindings,</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">seiscomp</span> <span class="pre">update-config</span></code> or <code class="docutils literal notranslate"><span class="pre">seiscomp</span> <span class="pre">update-config</span> <span class="pre">trunk</span></code> writes the
information from <code class="file docutils literal notranslate"><span class="pre">etc/key</span></code> to the database,</p></li>
<li><p>A module never reads <code class="file docutils literal notranslate"><span class="pre">etc/key</span></code>,</p></li>
<li><p>Bindings are being read from the database or an XML file.</p></li>
</ul>
</section>
</section>
<section id="validation">
<h3>Validation<a class="headerlink" href="#validation" title="Permalink to this heading"></a></h3>
<p>After changing configuration the affected modules should be tested, e.g. by
running with informative debug logging output. You may use <a class="reference internal" href="../../apps/scdumpcfg.html#scdumpcfg"><span class="std std-ref">scdumpcfg</span></a> for
dumping the module an binding parameters into a summary file.</p>
</section>
</section>
<section id="format-of-parameters">
<span id="concepts-configuration-parameters"></span><h2>Format of Parameters<a class="headerlink" href="#format-of-parameters" title="Permalink to this heading"></a></h2>
<p>The <a class="reference internal" href="../glossary.html#term-trunk"><span class="xref std std-term">trunk</span></a> configuration files are simple text files where each line
is a name-value pair containing the parameter name and its value.</p>
<p>Parameter values can be provided as</p>
<ul class="simple">
<li><p>plain values or comma-separated lists on single or multiple lines
(read sections below) or as</p></li>
<li><p><a class="reference internal" href="#concepts-configuration-variables"><span class="std std-ref">variables</span></a>, allowing to refer to
previously defined parameters, e.g., in <code class="file docutils literal notranslate"><span class="pre">global.cfg</span></code> or to define relative
directories related to the <cite>SeisComP</cite> installation or the Linux system.</p></li>
</ul>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>In contrast to previous versions of <cite>SeisComP</cite> the parameter names are now
case-sensitive. Use :ref`scchkcfg` to check configurations from previous
versions regarding case-sensitivity.</p>
</div>
<section id="basic">
<h3>Basic<a class="headerlink" href="#basic" title="Permalink to this heading"></a></h3>
<p>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:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">agencyID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">gempa</span>
<span class="na">recordstream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">slink://localhost:18000</span>
</pre></div>
</div>
<p>Spaces in string parameters must be protected by quotes:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">eventlist.filter.types.blacklist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;not existing&quot;</span>
</pre></div>
</div>
<p>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.</p>
<p>Later assignments of parameters override previous ones so the order of lines in the
configuration file is important. The file is parsed top-down.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>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.</p>
</div>
</section>
<section id="comments">
<h3>Comments<a class="headerlink" href="#comments" title="Permalink to this heading"></a></h3>
<p>Everything following an unescaped <strong>#</strong> (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 (<strong>\\</strong>)
to the character that needs escaping. It backslash should be part of the
string, two backslashes should be used (<strong>\\\\</strong>).</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">agencyID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">gempa # This is a comment</span>
<span class="c1"># The preceding empty line is ignored. Now the value of skyColor is replaced</span>
<span class="c1"># with &#39;blue&#39;.</span>
<span class="c1"># The final value of a parameter is the result of the last assignment parsed</span>
<span class="c1"># from top to bottom.</span>
<span class="na">agencyID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">gempa</span>
</pre></div>
</div>
</section>
<section id="lists">
<h3>Lists<a class="headerlink" href="#lists" title="Permalink to this heading"></a></h3>
<p>Values can be either scalar values or lists. List items are separated by commas.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># This is a list definition</span>
<span class="n">rainbowColors</span> <span class="o">=</span> <span class="n">red</span><span class="p">,</span> <span class="n">orange</span><span class="p">,</span> <span class="n">yellow</span><span class="p">,</span> <span class="n">green</span><span class="p">,</span> <span class="n">blue</span><span class="p">,</span> <span class="n">indigo</span><span class="p">,</span> <span class="n">violet</span>
</pre></div>
</div>
<p>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.</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="c1"># This is a comment</span>
<span class="c1"># The following list definitions have 2 items: 1,2 and 3,4</span>
<span class="c1"># quoted values</span>
<span class="na">tuples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;1,2&quot;, &quot;3,4&quot;</span>
<span class="c1"># escaped values</span>
<span class="na">tuples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">1</span><span class="se">\,</span><span class="s">2, 3</span><span class="se">\,</span><span class="s">4</span>
</pre></div>
</div>
<p>The value of the parameter tuples is now <cite>[“1,2”, “3,4”]</cite>.</p>
</section>
<section id="multi-line">
<h3>Multi-line<a class="headerlink" href="#multi-line" title="Permalink to this heading"></a></h3>
<p>Values can extend over multiple lines if a backslash is appended to each line</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="c1"># Multi-line string</span>
<span class="na">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;Hello world. &quot;</span><span class="se">\</span>
<span class="w"> </span><span class="s">&quot;This text spawns 3 lines in the configuration file &quot;</span><span class="se">\</span>
<span class="w"> </span><span class="s">&quot;but only one line in the final value.&quot;</span>
<span class="c1"># Multiline list definition</span>
<span class="na">rainbowColors</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">red,</span><span class="se">\</span>
<span class="w"> </span><span class="s">orange,</span><span class="se">\</span>
<span class="w"> </span><span class="s">yellow,</span><span class="se">\</span>
<span class="w"> </span><span class="s">green, blue,</span><span class="se">\</span>
<span class="w"> </span><span class="s">indigo, violet</span>
</pre></div>
</div>
</section>
<section id="control-characters">
<h3>Control characters<a class="headerlink" href="#control-characters" title="Permalink to this heading"></a></h3>
<p>A limited set of control characters is allowed within strings.</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 10.0%" />
<col style="width: 90.0%" />
</colgroup>
<tbody>
<tr class="row-odd"><td><p>\n</p></td>
<td><p>new line</p></td>
</tr>
<tr class="row-even"><td><p>\t</p></td>
<td><p>tab</p></td>
</tr>
</tbody>
</table>
<p>Example of a string consisting of two lines:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;123 456&quot;</span><span class="se">\n</span><span class="s">&quot;This is a new line with text&quot;</span>
</pre></div>
</div>
<p>The control characters must be outside of double quotes. Everything <strong>within</strong>
double quotes will <strong>not</strong> be decoded. Hence, “n” will end up as the string
“n” and not a new line character.</p>
</section>
<section id="namespaces">
<h3>Namespaces<a class="headerlink" href="#namespaces" title="Permalink to this heading"></a></h3>
<p>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:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">colors.sky</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">blue</span>
<span class="na">colors.grass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">green</span>
</pre></div>
</div>
<p>Here a namespace called <code class="docutils literal notranslate"><span class="pre">colors</span></code> 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:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">colors</span><span class="w"> </span><span class="s">{</span>
<span class="w"> </span><span class="na">sky</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">blue</span>
<span class="w"> </span><span class="na">grass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">green</span>
<span class="na">}</span>
</pre></div>
</div>
<p>Application code will still access <code class="docutils literal notranslate"><span class="pre">colors.sky</span></code> and <code class="docutils literal notranslate"><span class="pre">colors.grass</span></code>.
Namespaces can be arbitrarily nested and even survive includes.</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">A</span><span class="w"> </span><span class="s">{</span>
<span class="w"> </span><span class="na">B1</span><span class="w"> </span><span class="s">{</span>
<span class="w"> </span><span class="na">var1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">123</span>
<span class="w"> </span><span class="na">}</span>
<span class="w"> </span><span class="na">B2</span><span class="w"> </span><span class="s">{</span>
<span class="w"> </span><span class="na">var1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">456</span>
<span class="w"> </span><span class="na">}</span>
<span class="na">}</span>
</pre></div>
</div>
<p>The final list of parameter names is:</p>
<ul class="simple">
<li><p>A.B1.var1</p></li>
<li><p>A.B2.var1</p></li>
</ul>
</section>
</section>
<section id="variables">
<span id="concepts-configuration-variables"></span><h2>Variables<a class="headerlink" href="#variables" title="Permalink to this heading"></a></h2>
<p>Environment or preceding configuration variables (configuration parameters) can
be used as values for <a class="reference internal" href="#concepts-configuration-parameters"><span class="std std-ref">parameters</span></a> in
the configuration of SeisComP modules with <cite>${var}</cite>, e.g.</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">plugins</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">${plugins}, hypo71</span>
<span class="na">homeDir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">${HOME}</span>
<span class="na">myPath</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">${homeDir}/test</span>
<span class="na">myseiscomp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">${SEISCOMP_ROOT}</span>
</pre></div>
</div>
<p><cite>SeisComP</cite> knows internal variables defining the it environment. The can be used
with <cite>&#64;var&#64;</cite>, e.g.</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">autoloc.stationConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">@DATAGDIR@/autoloc/station.conf</span>
</pre></div>
</div>
<p>Available internal <cite>SeisComP</cite> variables are:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Variable</p></th>
<th class="head"><p>Value</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>ROOTDIR</p></td>
<td><p>$SEISCOMP_ROOT</p></td>
</tr>
<tr class="row-odd"><td><p>DEFAUTLCONFIGDIR</p></td>
<td><p>$SEISCOMP_ROOT/etc/defaults</p></td>
</tr>
<tr class="row-even"><td><p>SYSTEMCONFIGDIR</p></td>
<td><p>$SEISCOMP_ROOT/etc</p></td>
</tr>
<tr class="row-odd"><td><p>DATADIR</p></td>
<td><p>$SEISCOMP_ROOT/share</p></td>
</tr>
<tr class="row-even"><td><p>CONFIGDIR</p></td>
<td><p>$HOME/.seiscomp</p></td>
</tr>
<tr class="row-odd"><td><p>LOGDIR</p></td>
<td><p>$HOME/.seiscomp/log</p></td>
</tr>
</tbody>
</table>
<p>The list of internal <cite>SeisComP</cite> variables can also be read in the information
panel of <a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a>.</p>
<figure class="align-center" id="id9">
<a class="reference internal image-reference" href="../../_images/scconfig_information.png"><img alt="scconfig: information panel" src="../../_images/scconfig_information.png" style="width: 18cm;" /></a>
<figcaption>
<p><span class="caption-text">scconfig information panel indicating the internal <cite>SeisComP</cite> variables.</span><a class="headerlink" href="#id9" title="Permalink to this image"></a></p>
</figcaption>
</figure>
<p>The internal <cite>SeisComP</cite> 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
<code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_LOCAL_CONFIG/log</span></code>.
Example:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">SEISCOMP_LOCAL_CONFIG</span><span class="o">=</span>/var/log/seiscomp
</pre></div>
</div>
</section>
<section id="related-tools">
<h2>Related Tools<a class="headerlink" href="#related-tools" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><a class="reference internal" href="../../apps/bindings2cfg.html#bindings2cfg"><span class="std std-ref">bindings2cfg</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scchkcfg.html#scchkcfg"><span class="std std-ref">scchkcfg</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scdumpcfg.html#scdumpcfg"><span class="std std-ref">scdumpcfg</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scxmldump.html#scxmldump"><span class="std std-ref">scxmldump</span></a></p></li>
</ul>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Configuration</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a></li>
<li><a class="reference internal" href="#configuration-of-modules">Configuration of Modules</a><ul>
<li><a class="reference internal" href="#module-configuration">Module configuration</a><ul>
<li><a class="reference internal" href="#adjusting">Adjusting</a></li>
<li><a class="reference internal" href="#application">Application</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bindings-configuration">Bindings configuration</a><ul>
<li><a class="reference internal" href="#id1">Adjusting</a></li>
<li><a class="reference internal" href="#seiscomp-shell">SeisComP shell</a></li>
<li><a class="reference internal" href="#example-global-bindings">Example: global bindings</a></li>
<li><a class="reference internal" href="#reading-bindings">Reading bindings</a></li>
<li><a class="reference internal" href="#id2">Application</a></li>
<li><a class="reference internal" href="#summary">Summary</a></li>
</ul>
</li>
<li><a class="reference internal" href="#validation">Validation</a></li>
</ul>
</li>
<li><a class="reference internal" href="#format-of-parameters">Format of Parameters</a><ul>
<li><a class="reference internal" href="#basic">Basic</a></li>
<li><a class="reference internal" href="#comments">Comments</a></li>
<li><a class="reference internal" href="#lists">Lists</a></li>
<li><a class="reference internal" href="#multi-line">Multi-line</a></li>
<li><a class="reference internal" href="#control-characters">Control characters</a></li>
<li><a class="reference internal" href="#namespaces">Namespaces</a></li>
</ul>
</li>
<li><a class="reference internal" href="#variables">Variables</a></li>
<li><a class="reference internal" href="#related-tools">Related Tools</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="inventory.html"
title="previous chapter">Inventory</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="magnitudes.html"
title="next chapter">Magnitudes</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/configuration.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,280 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Database &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Waveform archives" href="waveformarchives.html" />
<link rel="prev" title="SeisComP plugins" href="plugins.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="waveformarchives.html" title="Waveform archives"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="plugins.html" title="SeisComP plugins"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="database">
<span id="concepts-database"></span><h1>Database<a class="headerlink" href="#database" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>This chapter provides an overview over databases supported by <cite>SeisComP</cite>.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p><cite>SeisComP</cite> 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, <a class="reference internal" href="plugins.html#concepts-plugins"><span class="std std-ref">database plugins</span></a> are
provided for</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50.0%" />
<col style="width: 50.0%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Database</p></th>
<th class="head"><p>Plugin Name</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>MySQL / MariaDB</p></td>
<td><p><em>dbmysql</em></p></td>
</tr>
<tr class="row-odd"><td><p>PostgreSQL</p></td>
<td><p><em>dbpostgresql</em></p></td>
</tr>
<tr class="row-even"><td><p>SQLite3</p></td>
<td><p><em>dbsqlite3</em></p></td>
</tr>
</tbody>
</table>
<section id="database-access">
<h3>Database access<a class="headerlink" href="#database-access" title="Permalink to this heading"></a></h3>
<p>Typically, the database is accessed by the messaging (<a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a>) 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
<a class="reference internal" href="../../apps/scdb.html#scdb"><span class="std std-ref">scdb</span></a> and <a class="reference internal" href="../../apps/scardac.html#scardac"><span class="std std-ref">scardac</span></a>.</p>
<p>The database connection provided by the messaging is configured by the
<a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster module configuration</span></a>. <a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">Modules</span></a>
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 <a class="reference internal" href="../../apps/global.html#confval-database"><code class="xref std std-confval docutils literal notranslate"><span class="pre">database</span></code></a> in
<a class="reference internal" href="../../apps/global.html#global-configuration"><span class="std std-ref">global configuration</span></a> or set on the command line
using <code class="xref std std-option docutils literal notranslate"><span class="pre">--database</span></code> or simply <code class="xref std std-option docutils literal notranslate"><span class="pre">-d</span></code>.
Read the sections <a class="reference internal" href="../installation.html#installation"><span class="std std-ref">SeisComP Installation</span></a> and <a class="reference internal" href="../getting-started.html#getting-started"><span class="std std-ref">Getting Started with SeisComP</span></a> on the
installation and the configuration of the database backend and the initial setup
of the database itself, respectively.</p>
<p>The database connection may be used together with the <em>debug</em> option to print
the database commands along with debug log output. Example for using
<a class="reference internal" href="../../apps/scolv.html#scolv"><span class="std std-ref">scolv</span></a> in offline mode with database debug output:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>scolv<span class="w"> </span>-d<span class="w"> </span>localhost?debug<span class="w"> </span>--offline<span class="w"> </span>--debug
</pre></div>
</div>
</section>
<section id="database-schema">
<h3>Database schema<a class="headerlink" href="#database-schema" title="Permalink to this heading"></a></h3>
<p>The used database schema is well defined and respected by all modules which
access the database. It is similar to the SeisComML schema (<a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a>,
a version of XML) and the C++ / Python class hierarchy of the datamodel
namespace / package.</p>
<p>Information of the following objects can be stored in the database as set out in
the <a class="reference internal" href="../api-python.html#api-datamodel-python"><span class="std std-ref">documentation of the data model</span></a>.</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 25.0%" />
<col style="width: 75.0%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Object</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><a class="reference internal" href="configuration.html#concepts-configuration"><span class="std std-ref">Config</span></a></p></td>
<td><p>station bindings</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../api-python.html#api-datamodel-python"><span class="std std-ref">DataAvailability</span></a></p></td>
<td><p>information on continuous data records</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../api-python.html#api-datamodel-python"><span class="std std-ref">EventParameters</span></a></p></td>
<td><p>derived objects like picks, amplitudes, magnitudes origins, events, etc.</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="inventory.html#concepts-inventory"><span class="std std-ref">Inventory</span></a></p></td>
<td><p>station meta data</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../api-python.html#api-datamodel-python"><span class="std std-ref">Journaling</span></a></p></td>
<td><p>information on commands and actions, e.g., by <a class="reference internal" href="../../apps/scevent.html#scevent-journals"><span class="std std-ref">scevent</span></a></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../api-python.html#api-datamodel-python"><span class="std std-ref">QualityControl</span></a></p></td>
<td><p>waveform quality control parameters</p></td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>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.</p>
</div>
<p>The currently supported version of the database schema can be queried by any
module connecting to the data base using the option <code class="xref std std-option docutils literal notranslate"><span class="pre">-V</span></code>. Example:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>scm<span class="w"> </span>-V
<span class="w"> </span>scm
<span class="w"> </span>Framework:<span class="w"> </span><span class="m">6</span>.0.0<span class="w"> </span>Development
<span class="w"> </span>API<span class="w"> </span>version:<span class="w"> </span><span class="m">16</span>.0.0
<span class="w"> </span>Data<span class="w"> </span>schema<span class="w"> </span>version:<span class="w"> </span><span class="m">0</span>.12
<span class="w"> </span>GIT<span class="w"> </span>HEAD:<span class="w"> </span>5e16580cc
<span class="w"> </span>Compiler:<span class="w"> </span>c++<span class="w"> </span><span class="o">(</span>Ubuntu<span class="w"> </span><span class="m">11</span>.4.0-1ubuntu1~22.04<span class="o">)</span><span class="w"> </span><span class="m">11</span>.4.0
<span class="w"> </span>Build<span class="w"> </span>system:<span class="w"> </span>Linux<span class="w"> </span><span class="m">6</span>.2.0-26-generic
<span class="w"> </span>OS:<span class="w"> </span>Ubuntu<span class="w"> </span><span class="m">22</span>.04.3<span class="w"> </span>LTS<span class="w"> </span>/<span class="w"> </span>Linux
</pre></div>
</div>
</section>
</section>
<section id="related-modules">
<h2>Related Modules<a class="headerlink" href="#related-modules" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><a class="reference internal" href="../../apps/scardac.html#scardac"><span class="std std-ref">scardac</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scdb.html#scdb"><span class="std std-ref">scdb</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scdbstrip.html#scdbstrip"><span class="std std-ref">scdbstrip</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scdispatch.html#scdispatch"><span class="std std-ref">scdispatch</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scquery.html#scquery"><span class="std std-ref">scquery</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scqueryqc.html#scqueryqc"><span class="std std-ref">scqueryqc</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scxmldump.html#scxmldump"><span class="std std-ref">scxmldump</span></a></p></li>
</ul>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Database</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a><ul>
<li><a class="reference internal" href="#database-access">Database access</a></li>
<li><a class="reference internal" href="#database-schema">Database schema</a></li>
</ul>
</li>
<li><a class="reference internal" href="#related-modules">Related Modules</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="plugins.html"
title="previous chapter">SeisComP plugins</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="waveformarchives.html"
title="next chapter">Waveform archives</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/database.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,359 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Inventory &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Configuration" href="configuration.html" />
<link rel="prev" title="RecordStream" href="recordstream.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="configuration.html" title="Configuration"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="recordstream.html" title="RecordStream"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="inventory">
<span id="concepts-inventory"></span><h1>Inventory<a class="headerlink" href="#inventory" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>This chapter describes the concept of inventories.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>In <cite>SeisComP</cite> the term <a class="reference internal" href="../glossary.html#term-inventory"><span class="xref std std-term">inventory</span></a> refers to the meta data of data recording
stations.
Many <cite>SeisComP</cite> <a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">modules</span></a> require inventory information to
operate correctly and a correct inventory is therefore fundamental to <cite>SeisComP</cite>.</p>
<p>The inventory will be read from the <a class="reference internal" href="database.html#concepts-database"><span class="std std-ref">database</span></a>
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.</p>
<p>The format used for inventory is known as <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a>. Correct inventory in
<a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> format can be generated by <span id="id1"><em>SMP</em> [<a class="reference internal" href="../references.html#id268" title="SMP. Station Management Portal by gempa GmbH. URL: https://smp.gempa.de/.">22</a>]</span>. Some modules for
<strong>converting from other formats</strong> are listed in section
<a class="reference internal" href="#concepts-inventory-format"><span class="std std-ref">Inventory Format</span></a>. Tools for <strong>processing inventory</strong> are
listed in section <a class="reference internal" href="#concepts-inventory-tools"><span class="std std-ref">Related Tools</span></a>.</p>
<p>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 <a class="reference internal" href="recordstream.html#concepts-recordstream"><span class="std std-ref">RecordStream</span></a>. 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.</p>
<p>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 <cite>SeisComP</cite>
only handles station meta-data in its own XML format called <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a>.
The task of supporting old key files, dataless SEED and other formats has been
out-sourced to external applications. The inventory synchronization is a
<a class="reference internal" href="#config-fig-inventory-sync"><span class="std std-ref">two-stage process</span></a>:</p>
<ol class="arabic simple">
<li><p>Convert <a class="reference internal" href="#concepts-inventory-format"><span class="std std-ref">external formats</span></a> into <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a></p></li>
<li><p>Synchronize inventory pool with the database: merged all inventory files and
synchronize with the database using <strong class="program">scinv snyc</strong>.</p></li>
</ol>
<figure class="align-center" id="id5">
<span id="config-fig-inventory-sync"></span><a class="reference internal image-reference" href="../../_images/inventory-sync.png"><img alt="../../_images/inventory-sync.png" src="../../_images/inventory-sync.png" style="width: 12cm;" /></a>
<figcaption>
<p><span class="caption-text">Inventory synchronization as a two-stage process</span><a class="headerlink" href="#id5" title="Permalink to this image"></a></p>
</figcaption>
</figure>
<p>All station meta-data are stored in <code class="file docutils literal notranslate"><span class="pre">etc/inventory</span></code>
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</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>scinv<span class="w"> </span>sync
</pre></div>
</div>
<p>loads the existing inventory from the database and merges each file in <code class="file docutils literal notranslate"><span class="pre">etc/inventory</span></code>.
Finally it removes all unreferenced objects and sends all updates to the database.</p>
<p>The <cite>SeisComP</cite> <a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">configuration</span></a> 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. <span id="id2"><em>SMP</em> [<a class="reference internal" href="../references.html#id268" title="SMP. Station Management Portal by gempa GmbH. URL: https://smp.gempa.de/.">22</a>]</span>.</p>
<p>The <cite>SeisComP</cite> documentation describes the
<a class="reference internal" href="../api-python.html#api-datamodel-python"><span class="std std-ref">data model including the inventory</span></a>.</p>
</section>
<section id="inventory-format">
<span id="concepts-inventory-format"></span><h2>Inventory Format<a class="headerlink" href="#inventory-format" title="Permalink to this heading"></a></h2>
<p>A typical inventory file in <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> looks like this:</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="nt">&lt;seiscomp</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://geofon.gfz-potsdam.de/ns/seiscomp-schema/0.11&quot;</span><span class="w"> </span><span class="na">version=</span><span class="s">&quot;0.11&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;Inventory&gt;</span>
<span class="w"> </span><span class="nt">&lt;sensor&gt;</span>...
<span class="w"> </span><span class="nt">&lt;datalogger&gt;</span>...
<span class="w"> </span><span class="nt">&lt;network&gt;</span>...
<span class="w"> </span><span class="nt">&lt;/Inventory&gt;</span>
<span class="nt">&lt;/seiscomp&gt;</span>
</pre></div>
</div>
<p>The version attribute of the <code class="docutils literal notranslate"><span class="pre">seiscomp</span></code> tag represents the schema version of
the <cite>SeisComP</cite> data model which is consistent with the database schema version
and the version of all other representations.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>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.</p>
</div>
<p>Inventories must be provided to <cite>SeisComP</cite> in XML files in <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> format. A
convenient way to generate clean and correct inventory files in <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a>
format is <span id="id3"><em>SMP</em> [<a class="reference internal" href="../references.html#id268" title="SMP. Station Management Portal by gempa GmbH. URL: https://smp.gempa.de/.">22</a>]</span>. Tools are provided to convert between other formats:</p>
<table class="docutils align-left">
<colgroup>
<col style="width: 50.0%" />
<col style="width: 50.0%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Module namespace</p></th>
<th class="head"><p>Conversion</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>arclink2inv</p></td>
<td><p>Arclink XML to SeisComPML</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../../apps/dlsv2inv.html#dlsv2inv"><span class="std std-ref">dlsv2inv</span></a></p></td>
<td><p>dataless SEED to SeisComPML</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="../../apps/inv2dlsv.html#inv2dlsv"><span class="std std-ref">inv2dlsv</span></a></p></td>
<td><p>SeisComPML to dataless SEED</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="../../apps/fdsnxml2inv.html#fdsnxml2inv"><span class="std std-ref">fdsnxml2inv</span></a></p></td>
<td><p>FDSN StationXML to SeisComPML and back</p></td>
</tr>
</tbody>
</table>
</section>
<section id="adding-updating-inventory">
<h2>Adding / Updating Inventory<a class="headerlink" href="#adding-updating-inventory" title="Permalink to this heading"></a></h2>
<p>To add inventory information to the <cite>SeisComP</cite> database one either has to write directly
to the database with custom script (not recommended) or place <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> files
in <code class="file docutils literal notranslate"><span class="pre">&#64;SYSTEMCONFIGDIR&#64;/inventory</span></code>. The service to import all data in that
directory can be called with</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>seiscomp<span class="w"> </span>update-config<span class="w"> </span>inventory
</pre></div>
</div>
<p>This command runs <a class="reference internal" href="../../apps/scinv.html#scinv"><span class="std std-ref">scinv</span></a> finally. <a class="reference internal" href="../../apps/scinv.html#scinv"><span class="std std-ref">scinv</span></a> 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 <a class="reference internal" href="../../apps/scinv.html#scinv"><span class="std std-ref">scinv</span></a>. The bottom line is that inventory data is created
from <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> files.</p>
<p>Because nobody will ever create such XML files by hand, tools are necessary.
A quite popular tools is the online station management portal (SMP)
<span id="id4">[<a class="reference internal" href="../references.html#id268" title="SMP. Station Management Portal by gempa GmbH. URL: https://smp.gempa.de/.">22</a>]</span>. SMP will output XML in version of <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> directly.</p>
<p>Another source is the FDSN station webservice (FDSNWS). If the <cite>SeisComP</cite>
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 <a class="reference internal" href="../../apps/fdsnxml2inv.html#fdsnxml2inv"><span class="std std-ref">fdsnxml2inv</span></a> or
<a class="reference internal" href="../../apps/import_inv.html#import-inv"><span class="std std-ref">import_inv</span></a>. The latter is a more versatile application that also supports
several import formats.</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>import_inv<span class="w"> </span>fdsnxml<span class="w"> </span>download-1234.xml
</pre></div>
</div>
<p>This will automatically place the output XML file in
<code class="file docutils literal notranslate"><span class="pre">&#64;SYSTEMCONFIGDIR&#64;/inventory</span></code>. Afterwards call</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>seiscomp<span class="w"> </span>update-config<span class="w"> </span>inventory
</pre></div>
</div>
<p>to synchronize the changes with the database. If <strong class="program">scconfig</strong> is used,
then either the <code class="docutils literal notranslate"><span class="pre">Sync</span></code> button of the <cite>Inventory</cite> panel or the
<code class="docutils literal notranslate"><span class="pre">Update</span> <span class="pre">configuration</span></code> button of the <code class="docutils literal notranslate"><span class="pre">System</span></code> panel must pressed.</p>
<p><strong>Summary</strong></p>
<p>In order to populate the database with inventory information, the following
steps have to be performed:</p>
<ol class="arabic">
<li><p>Convert existing station meta data formats to <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a></p></li>
<li><p>Place all <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> files at <code class="file docutils literal notranslate"><span class="pre">&#64;SYSTEMCONFIGDIR&#64;/inventory</span></code></p></li>
<li><p>Synchronize the inventory files and write the meta data to the database. Run</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>scinv<span class="w"> </span>sync
</pre></div>
</div>
<p>or</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>seiscomp<span class="w"> </span>update-config<span class="w"> </span>inventory
</pre></div>
</div>
</li>
</ol>
</section>
<section id="reading-inventory">
<h2>Reading Inventory<a class="headerlink" href="#reading-inventory" title="Permalink to this heading"></a></h2>
<p>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.</p>
<p>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.</p>
<p>If the messaging is not involved, the database can be specified by the
command-line option <code class="docutils literal notranslate"><span class="pre">-d</span></code>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>myapp<span class="w"> </span>-d<span class="w"> </span><span class="o">[</span>type<span class="o">]</span>://<span class="o">[</span>user<span class="o">]</span>:<span class="o">[</span>password<span class="o">]</span>@<span class="o">[</span>host<span class="o">]</span>:<span class="o">[</span>port<span class="o">]</span>
</pre></div>
</div>
<p>There are cases when an application should be run without a database connection
but requires inventory information, particularly in combination with the
<code class="docutils literal notranslate"><span class="pre">--ep</span></code> command line argument. To direct an application to an inventory XML file
(again in <a class="reference internal" href="../glossary.html#term-SCML"><span class="xref std std-term">SCML</span></a> format), <code class="docutils literal notranslate"><span class="pre">--inventory-db</span></code> must be used:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>myapp<span class="w"> </span>--inventory-db<span class="w"> </span>inventory.xml
</pre></div>
</div>
<p>The option <code class="docutils literal notranslate"><span class="pre">--inventory-db</span></code> will cause the module to completely bypass
the database for reading inventory information even if used for event
information. The file <code class="file docutils literal notranslate"><span class="pre">inventory.xml</span></code> can be created from the database
using <a class="reference internal" href="../../apps/scxmldump.html#scxmldump"><span class="std std-ref">scxmldump</span></a>.</p>
</section>
<section id="related-tools">
<span id="concepts-inventory-tools"></span><h2>Related Tools<a class="headerlink" href="#related-tools" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>arclink2inv</p></li>
<li><p><a class="reference internal" href="../../apps/dlsv2inv.html#dlsv2inv"><span class="std std-ref">dlsv2inv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/fdsnxml2inv.html#fdsnxml2inv"><span class="std std-ref">fdsnxml2inv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/import_inv.html#import-inv"><span class="std std-ref">import_inv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/invextr.html#invextr"><span class="std std-ref">invextr</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/inv2dlsv.html#inv2dlsv"><span class="std std-ref">inv2dlsv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/sccnv.html#sccnv"><span class="std std-ref">sccnv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scinv.html#scinv"><span class="std std-ref">scinv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scxmldump.html#scxmldump"><span class="std std-ref">scxmldump</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/tab2inv.html#tab2inv"><span class="std std-ref">tab2inv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/tabinvmodifier.html#tabinvmodifier"><span class="std std-ref">tabinvmodifier</span></a></p></li>
</ul>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Inventory</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a></li>
<li><a class="reference internal" href="#inventory-format">Inventory Format</a></li>
<li><a class="reference internal" href="#adding-updating-inventory">Adding / Updating Inventory</a></li>
<li><a class="reference internal" href="#reading-inventory">Reading Inventory</a></li>
<li><a class="reference internal" href="#related-tools">Related Tools</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="recordstream.html"
title="previous chapter">RecordStream</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="configuration.html"
title="next chapter">Configuration</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/inventory.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,478 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Locators &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Glossary" href="../glossary.html" />
<link rel="prev" title="Magnitudes" href="magnitudes.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="../glossary.html" title="Glossary"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="magnitudes.html" title="Magnitudes"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="locators">
<span id="concepts-locators"></span><h1>Locators<a class="headerlink" href="#locators" title="Permalink to this heading"></a></h1>
<p>Locators receive <a class="reference internal" href="../glossary.html#term-pick"><span class="xref std std-term">phase picks</span></a> from modules such as <a class="reference internal" href="../../apps/scautoloc.html#scautoloc"><span class="std std-ref">scautoloc</span></a>,
<a class="reference internal" href="../../apps/screloc.html#screloc"><span class="std std-ref">screloc</span></a> or <a class="reference internal" href="../../apps/scolv.html#scolv"><span class="std std-ref">scolv</span></a> 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 <a class="reference internal" href="../glossary.html#term-origin"><span class="xref std std-term">origins</span></a> which can be treated
further.</p>
<p><cite>SeisComP</cite> ships with built-in locators:</p>
<ul class="simple">
<li><p><a class="reference internal" href="../../apps/global_fixedhypocenter.html#global-fixedhypocenter"><span class="std std-ref">FixedHypocenter</span></a> (FH)</p></li>
<li><p><a class="reference internal" href="../../apps/global_hypo71.html#global-hypo71"><span class="std std-ref">Hypo71</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/global_iloc.html#global-iloc"><span class="std std-ref">iLoc</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/global_locsat.html#global-locsat"><span class="std std-ref">LOCSAT</span></a>, the default locator in <a class="reference internal" href="../../apps/scautoloc.html#scautoloc"><span class="std std-ref">scautoloc</span></a> and <a class="reference internal" href="../../apps/scolv.html#scolv"><span class="std std-ref">scolv</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/global_nonlinloc.html#global-nonlinloc"><span class="std std-ref">NonLinLoc</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/global_stdloc.html#global-stdloc"><span class="std std-ref">StdLoc</span></a></p></li>
</ul>
<p>and a none built-in locator:</p>
<ul class="simple">
<li><p><a class="reference internal" href="../../apps/global_locext.html#global-locext"><span class="std std-ref">LocExt</span></a>.</p></li>
</ul>
<p>While the built-in locators are well defined and documented, any other external
locator routine can be added to <cite>SeisComP</cite> by configuration of the locator
<a class="reference internal" href="../../apps/global_locext.html#global-locext"><span class="std std-ref">LocExt</span></a> and custom scripts.
LOCSAT and FixedHypocenter are native to <cite>SeisComP</cite>. All other locators are
implemented as <a class="reference internal" href="../glossary.html#term-plugin"><span class="xref std std-term">plugins</span></a>. A <a class="reference internal" href="../glossary.html#term-plugin"><span class="xref std std-term">plugin</span></a>
needs to be added to the list of loaded plugins by configuration of the global
parameter <a class="reference internal" href="../../apps/global.html#confval-plugins"><code class="xref std std-confval docutils literal notranslate"><span class="pre">plugins</span></code></a> for making the corresponding locator available to
<cite>SeisComP</cite> applications.</p>
<p>A comparison of the locators is given in the table below.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>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.</p>
</div>
<table class="docutils align-center">
<colgroup>
<col style="width: 30.0%" />
<col style="width: 10.0%" />
<col style="width: 10.0%" />
<col style="width: 10.0%" />
<col style="width: 10.0%" />
<col style="width: 10.0%" />
<col style="width: 10.0%" />
<col style="width: 10.0%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"></th>
<th class="head"><p>FH</p></th>
<th class="head"><p>Hypo71</p></th>
<th class="head"><p>iLoc</p></th>
<th class="head"><p>LocExt</p></th>
<th class="head"><p>LOCSAT</p></th>
<th class="head"><p>NonLinLoc</p></th>
<th class="head"><p>StdLoc</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><strong>Applications</strong></p></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>phases considered by default</p></td>
<td><p>seismic / infrasound</p></td>
<td><p>seismic</p></td>
<td><p>seismic / infrasound / hydroacoustic</p></td>
<td><p>[3]</p></td>
<td><p>seismic / infrasound</p></td>
<td><p>seismic</p></td>
<td><p>seismic</p></td>
</tr>
<tr class="row-even"><td><p>distance ranges of application</p></td>
<td><p>local / regional / teleseismic</p></td>
<td><p>local / regional</p></td>
<td><p>local / regional / teleseismic</p></td>
<td><p>[3]</p></td>
<td><p>local / regional / teleseismic</p></td>
<td><p>local / regional / teleseismic</p></td>
<td><p>local / regional [4]</p></td>
</tr>
<tr class="row-odd"><td><p>application with default configuration</p></td>
<td><p>regional / teleseismic</p></td>
<td><p></p></td>
<td><p>regional / global</p></td>
<td><p>[3]</p></td>
<td><p>regional / teleseismic</p></td>
<td><p></p></td>
<td><p>local / regional [1]</p></td>
</tr>
<tr class="row-even"><td><p><strong>Algorithm</strong></p></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>inversion algorithm</p></td>
<td><p>linear</p></td>
<td><p>iterative</p></td>
<td><p>configurable</p></td>
<td><p>[3]</p></td>
<td><p>grid search</p></td>
<td><p>probabilistic</p></td>
<td><p>configurable</p></td>
</tr>
<tr class="row-even"><td><p>automatic phase renaming</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p>considers network code</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p>✅ [1]</p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p>positive station elevation</p></td>
<td><p>✅ [2/4]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p>✅ [2]</p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p>negative station elevation</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p>considers pick time</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p>considers pick slowness</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p>considers pick backazimuth</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p>speed</p></td>
<td><p>fast</p></td>
<td><p>fast</p></td>
<td><p>fast - intermediate</p></td>
<td><p>[3]</p></td>
<td><p>fast</p></td>
<td><p>intermediate</p></td>
<td><p>fast - intermediate</p></td>
</tr>
<tr class="row-even"><td><p><strong>Velocity model</strong></p></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>velocity model</p></td>
<td><p>1D [4]</p></td>
<td><p>1D</p></td>
<td><p>1D</p></td>
<td><p>[3]</p></td>
<td><p>1D</p></td>
<td><p>1D / 3D</p></td>
<td><p>1D / 3D [4]</p></td>
</tr>
<tr class="row-even"><td><p>independent Vp and Vs</p></td>
<td><p>✅ [4]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>✅ [4]</p></td>
</tr>
<tr class="row-odd"><td><p>default velocity model</p></td>
<td><p>iasp91 / tab</p></td>
<td><p></p></td>
<td><p>iasp91 / ak135</p></td>
<td><p>[3]</p></td>
<td><p>iasp91 / tab</p></td>
<td><p></p></td>
<td><p>iasp91 / tab [1]</p></td>
</tr>
<tr class="row-even"><td><p>applies RSTT</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p><strong>Hypocenter solution</strong></p></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="row-even"><td><p>inverts for hypocenter location</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p>inverts for hypocenter time</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p>supports negative source depth</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p>[3]</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p><strong>Configuration</strong></p></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="row-even"><td><p>native or plugin to load</p></td>
<td><p></p></td>
<td><p><em>hypo71</em></p></td>
<td><p><em>lociloc</em></p></td>
<td><p><em>locext</em></p></td>
<td><p></p></td>
<td><p><em>locnll</em></p></td>
<td><p><em>stdloc</em></p></td>
</tr>
<tr class="row-odd"><td><p><cite>SeisComP</cite> provides locator</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p>operates without external files</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-odd"><td><p>operates without custom scripts</p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
<td><p></p></td>
</tr>
<tr class="row-even"><td><p><strong>Others</strong></p></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>remarks</p></td>
<td><p>intended for ground-truth tests / single-station location / any travel-time interface</p></td>
<td></td>
<td><p>operational at EMSC and ISC (earlier version)</p></td>
<td><p>any external locator can be called by a custom script</p></td>
<td><p>currently the fastest locator in <cite>SeisComP</cite> and the only one available to <a class="reference internal" href="../../apps/scautoloc.html#scautoloc"><span class="std std-ref">scautoloc</span></a></p></td>
<td><p>considers model uncertainties</p></td>
<td><p>uses travel-times from any travel-time interface</p></td>
</tr>
<tr class="row-even"><td><p>point of contact</p></td>
<td><p><span id="id1"><em>SeisComP forum</em> [<a class="reference internal" href="../references.html#id256" title="SeisComP forum. GFZ. URL: https://forum.seiscomp.de/.">24</a>]</span></p></td>
<td><p><span id="id2"><em>SeisComP forum</em> [<a class="reference internal" href="../references.html#id256" title="SeisComP forum. GFZ. URL: https://forum.seiscomp.de/.">24</a>]</span></p></td>
<td><p><a class="reference external" href="mailto:ibondar2014&#37;&#52;&#48;gmail&#46;com">ibondar2014 <span>&#64;</span>gmail<span>&#46;</span>com</a></p></td>
<td><p><span id="id3"><em>SeisComP forum</em> [<a class="reference internal" href="../references.html#id256" title="SeisComP forum. GFZ. URL: https://forum.seiscomp.de/.">24</a>]</span></p></td>
<td><p><span id="id4"><em>SeisComP forum</em> [<a class="reference internal" href="../references.html#id256" title="SeisComP forum. GFZ. URL: https://forum.seiscomp.de/.">24</a>]</span></p></td>
<td><p><span id="id5"><em>SeisComP forum</em> [<a class="reference internal" href="../references.html#id256" title="SeisComP forum. GFZ. URL: https://forum.seiscomp.de/.">24</a>]</span></p></td>
<td><p><span id="id6"><em>SeisComP forum</em> [<a class="reference internal" href="../references.html#id256" title="SeisComP forum. GFZ. URL: https://forum.seiscomp.de/.">24</a>]</span></p></td>
</tr>
</tbody>
</table>
<ul class="simple">
<li><p>[1]: requires initial or specific configuration</p></li>
<li><p>[2]: requires correction file</p></li>
<li><p>[3]: depends on selected locator</p></li>
<li><p>[4]: depends on selected travel-time interface</p></li>
</ul>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="magnitudes.html"
title="previous chapter">Magnitudes</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="../glossary.html"
title="next chapter">Glossary</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/locators.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,299 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Magnitudes &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Locators" href="locators.html" />
<link rel="prev" title="Configuration" href="configuration.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="locators.html" title="Locators"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="configuration.html" title="Configuration"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="magnitudes">
<span id="concepts-magnitudes"></span><h1>Magnitudes<a class="headerlink" href="#magnitudes" title="Permalink to this heading"></a></h1>
<p>Magnitudes are computed based on amplitudes measured from waveforms. Different
types of amplitudes and magnitudes are available which are listed in
<a class="reference internal" href="../../apps/scamp.html#scamp"><span class="std std-ref">scamp</span></a> and <a class="reference internal" href="../../apps/scmag.html#scmag"><span class="std std-ref">scmag</span></a>.</p>
<section id="amplitudes">
<h2>Amplitudes<a class="headerlink" href="#amplitudes" title="Permalink to this heading"></a></h2>
<p>Amplitudes can be measured automatically from waveforms</p>
<ul class="simple">
<li><p>During phase picking by <a class="reference internal" href="../../apps/scautopick.html#scautopick"><span class="std std-ref">scautopick</span></a> with generally fixed time windows
due to the absence of knowledge about source parameters or by,</p></li>
<li><p><a class="reference internal" href="../../apps/scamp.html#scamp"><span class="std std-ref">scamp</span></a> as soon as <a class="reference internal" href="../glossary.html#term-origin"><span class="xref std std-term">origins</span></a> are available. Depending
on the magnitude type, fixed or distance-dependent time windows apply.</p></li>
</ul>
<p>and interactively using <a class="reference internal" href="../../apps/scolv.html#scolv"><span class="std std-ref">scolv</span></a>.</p>
<section id="instrument-simulation">
<h3>Instrument simulation<a class="headerlink" href="#instrument-simulation" title="Permalink to this heading"></a></h3>
<p>Amplitude measurements for some magnitude types require or allow the simulation
of instruments such as <a class="reference internal" href="../filter-grammar.html#WA" title="WA"><code class="xref py py-func docutils literal notranslate"><span class="pre">Wood-Anderson</span> <span class="pre">torsion</span> <span class="pre">seismometers</span></code></a>
(<span id="id1">Richter [<a class="reference internal" href="../references.html#id62" title="C.F. Richter. An instrumental earthquake magnitude scale. Bull. Seismol. Soc. Am., 1:1 - 32, 1935. URL: https://resolver.caltech.edu/CaltechAUTHORS:20140804-143558638, doi:10.1785/BSSA0250010001.">57</a>], Uhrhammer and Collins [<a class="reference internal" href="../references.html#id81" title="R.A. Uhrhammer and E.R. Collins. Synthesis of Wood-Anderson seismograms from broadband digital records. Bull. Seismol. Soc. Am., 80(3):702716, 1990. doi:10.1785/BSSA0800030702.">64</a>]</span>), <a class="reference internal" href="../filter-grammar.html#WWSSN_SP" title="WWSSN_SP"><code class="xref py py-func docutils literal notranslate"><span class="pre">WWSSN_SP()</span></code></a> or <a class="reference internal" href="../filter-grammar.html#WWSSN_LP" title="WWSSN_LP"><code class="xref py py-func docutils literal notranslate"><span class="pre">WWSSN_LP()</span></code></a>.
The calibration parameters describing the Wood-Anderson seismometer are
configurable in global bindings or global module configuration:
<a class="reference internal" href="../../apps/global.html#confval-2"><code class="xref std std-confval docutils literal notranslate"><span class="pre">amplitudes.WoodAnderson.gain</span></code></a>, <a class="reference internal" href="../../apps/global.html#confval-3"><code class="xref std std-confval docutils literal notranslate"><span class="pre">amplitudes.WoodAnderson.T0</span></code></a>,
<a class="reference internal" href="../../apps/global.html#confval-4"><code class="xref std std-confval docutils literal notranslate"><span class="pre">amplitudes.WoodAnderson.h</span></code></a>. Specifically, the difference in magnitude
due to configuration using original values listed in
<span id="id2">Richter [<a class="reference internal" href="../references.html#id62" title="C.F. Richter. An instrumental earthquake magnitude scale. Bull. Seismol. Soc. Am., 1:1 - 32, 1935. URL: https://resolver.caltech.edu/CaltechAUTHORS:20140804-143558638, doi:10.1785/BSSA0250010001.">57</a>]</span> and updated ones given in <span id="id3">Uhrhammer and Collins [<a class="reference internal" href="../references.html#id81" title="R.A. Uhrhammer and E.R. Collins. Synthesis of Wood-Anderson seismograms from broadband digital records. Bull. Seismol. Soc. Am., 80(3):702716, 1990. doi:10.1785/BSSA0800030702.">64</a>]</span>
result in a constant offset of 0.13 in those magnitudes which apply
Wood-Anderson simulation, e.g. <a class="reference internal" href="../glossary.html#term-magnitude-local-ML"><span class="xref std std-term">ML</span></a>,
<a class="reference internal" href="../glossary.html#term-magnitude-local-vertical-MLv"><span class="xref std std-term">MLv</span></a>, <a class="reference internal" href="../glossary.html#term-magnitude-local-custom-MLc"><span class="xref std std-term">MLc</span></a>.</p>
</section>
</section>
<section id="station-magnitudes">
<h2>Station Magnitudes<a class="headerlink" href="#station-magnitudes" title="Permalink to this heading"></a></h2>
<p>Station magnitudes are computed automatically by <a class="reference internal" href="../../apps/scmag.html#scmag"><span class="std std-ref">scmag</span></a> or interactively
by <a class="reference internal" href="../../apps/scolv.html#scolv"><span class="std std-ref">scolv</span></a> from measured amplitudes based on distance-dependent
calibration curves which depend on magnitude type. When computing a set of
magnitudes in <a class="reference internal" href="../../apps/scolv.html#scolv"><span class="std std-ref">scolv</span></a> which is different from the set configured in
<a class="reference internal" href="../../apps/scmag.html#scmag"><span class="std std-ref">scmag</span></a>, 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.</p>
<section id="station-corrections">
<span id="concepts-magnitudes-correction"></span><h3>Station corrections<a class="headerlink" href="#station-corrections" title="Permalink to this heading"></a></h3>
<p>Linear station corrections applied to station magnitudes can be configured by
global <a class="reference internal" href="configuration.html#global-bindings-config"><span class="std std-ref">binding parameters</span></a>:</p>
<ol class="arabic simple">
<li><p>Add a magnitude type profile where the name of the profile is the name of the
magnitude itself,</p></li>
<li><p>Configure the correction parameters.</p></li>
</ol>
<p>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.</p>
<p>Therefore, you may add lines to the global module configuration in
<code class="file docutils literal notranslate"><span class="pre">global.cfg</span></code> 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
<em>module.trunk</em>”. Example for an offset correction of
<a class="reference internal" href="../glossary.html#term-magnitude-local-vertical-MLv"><span class="xref std std-term">MLv</span></a> measured station GE.UGM:</p>
<div class="highlight-properties notranslate"><div class="highlight"><pre><span></span><span class="na">module.trunk.GE.UGM.magnitudes.MLv.offset</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">0.1</span>
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The configuration of parameters starting with <em>module.trunk.</em> is not
supported by <a class="reference internal" href="../../apps/scconfig.html#scconfig"><span class="std std-ref">scconfig</span></a>. All corresponding configurations must be done
by direclty editing the configuration file, e.g.,
<code class="file docutils literal notranslate"><span class="pre">seiscomp/etc/global.cfg</span></code>.</p>
</div>
</section>
</section>
<section id="network-magnitudes">
<h2>Network Magnitudes<a class="headerlink" href="#network-magnitudes" title="Permalink to this heading"></a></h2>
<p>Network magnitudes are computed automatically by <a class="reference internal" href="../../apps/scmag.html#scmag"><span class="std std-ref">scmag</span></a> or interactively
by <a class="reference internal" href="../../apps/scolv.html#scolv"><span class="std std-ref">scolv</span></a> from station magnitudes based on averaging station magnitudes.
The averaging methods applied by <a class="reference internal" href="../../apps/scmag.html#scmag"><span class="std std-ref">scmag</span></a> are configurable by
<a class="reference internal" href="../../apps/scmag.html#confval-magnitudes.average"><code class="xref std std-confval docutils literal notranslate"><span class="pre">magnitudes.average</span></code></a>. Available are (<span id="id4">Rosenberger and Gasko [<a class="reference internal" href="../references.html#id70" title="J.L. Rosenberger and M. Gasko. Comparing location estimators: trimmed means, medians, and trimean. In D.C. Hoaglin, F. Mosteller, and J.W. Tukey, editors, Understanding Robust and Exploratory Data Analysis, pages 297-336. Wiley, New York, NY, 1983.">59</a>]</span>):</p>
<ul class="simple">
<li><p><em>mean</em>: the mean value from all station magnitudes.</p></li>
<li><p><em>median</em>: the mean value from all station magnitudes.</p></li>
<li><p><em>trimmedMean(X)</em>: gnores outlier station magnitudes by first removing the
largest and the smallest <em>X</em> % of the observed values (percentiles). The mean is
formed from the remaining station magnitudes.</p></li>
<li><p><em>trimmedMedian(X)</em>: forms the median from all station magnitudes but returns
the uncertainty by ignoring the largest and the smallest <em>X</em> % station
magnitudes.</p></li>
<li><p><em>medianTrimmedMean(X)</em>: returns the mean magnitude from all station magnitudes
differing less than <em>X</em> magnitudes from the median.</p></li>
</ul>
</section>
<section id="aliases">
<h2>Aliases<a class="headerlink" href="#aliases" title="Permalink to this heading"></a></h2>
<p>New magnitude types (aliases) can be created based on existing magnitude and
amplitude types but configured specifically.
The setup procedure is outlined in the
<a class="reference internal" href="../tutorials/magnitude-regionalization.html#tutorials-magnitude-aliases"><span class="std std-ref">tutorial on magnitude aliases</span></a>.</p>
</section>
<section id="regionalization">
<span id="concepts-magnitudes-regionalization"></span><h2>Regionalization<a class="headerlink" href="#regionalization" title="Permalink to this heading"></a></h2>
<p>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.</p>
<p>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
<a class="reference internal" href="#concepts-magnitudes-correction"><span class="std std-ref">station corrections</span></a> is outlined in the
<a class="reference internal" href="../tutorials/magnitude-regionalization.html#tutorials-magnitude-region-aliases"><span class="std std-ref">tutorial on regionalization</span></a>.</p>
</section>
<section id="moment-magnitudes">
<h2>Moment Magnitudes<a class="headerlink" href="#moment-magnitudes" title="Permalink to this heading"></a></h2>
<p>Moment magnitudes can be derived from all other network magnitudes by mapping of
the original network magnitude, e.g., <em>Mx</em>, to a new moment magnitude <em>Mw(Mx)</em>.</p>
<p>The mapping function can be configured for all original magnitude types except
<a class="reference internal" href="../glossary.html#term-magnitude-derived-mB-Mw-mB"><span class="xref std std-term">mB</span></a> and
<a class="reference internal" href="../glossary.html#term-magnitude-derived-Mwp-Mw-Mwp"><span class="xref std std-term">Mwp</span></a> where the mapping is hardcoded.
Read the <a class="reference internal" href="../tutorials/magnitude-regionalization.html#tutorials-mags-moment"><span class="std std-ref">tutorial on moment magnitudes</span></a> for the
configuration.</p>
</section>
<section id="summary-magnitude">
<span id="concepts-magnitudes-summary"></span><h2>Summary Magnitude<a class="headerlink" href="#summary-magnitude" title="Permalink to this heading"></a></h2>
<p>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 <a class="reference internal" href="../../apps/scmag.html#scmag"><span class="std std-ref">scmag</span></a>. The summary magnitude is
usually referred to as <em>M</em>. The name is configurable.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Station, network and summary magnitudes are contained uniquely in one
<a class="reference internal" href="../glossary.html#term-origin"><span class="xref std std-term">origin</span></a>.</p>
</div>
</section>
<section id="preferred-magnitude">
<h2>Preferred Magnitude<a class="headerlink" href="#preferred-magnitude" title="Permalink to this heading"></a></h2>
<p>From the list of computed network magnitudes and the summary magnitude,
<a class="reference internal" href="../../apps/scevent.html#scevent"><span class="std std-ref">scevent</span></a> can automatically determine the preferred magnitude of the
<a class="reference internal" href="../glossary.html#term-event"><span class="xref std std-term">event</span></a>. This may also be done interactively by operators in the
<a class="reference internal" href="../../apps/scolv.html#scolv-sec-event-tab"><span class="std std-ref">Event tab of scolv</span></a> or by
<a class="reference internal" href="../../apps/scolv.html#sec-scolv-custom-commit"><span class="std std-ref">custom commit buttons in scolv</span></a>.</p>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Magnitudes</a><ul>
<li><a class="reference internal" href="#amplitudes">Amplitudes</a><ul>
<li><a class="reference internal" href="#instrument-simulation">Instrument simulation</a></li>
</ul>
</li>
<li><a class="reference internal" href="#station-magnitudes">Station Magnitudes</a><ul>
<li><a class="reference internal" href="#station-corrections">Station corrections</a></li>
</ul>
</li>
<li><a class="reference internal" href="#network-magnitudes">Network Magnitudes</a></li>
<li><a class="reference internal" href="#aliases">Aliases</a></li>
<li><a class="reference internal" href="#regionalization">Regionalization</a></li>
<li><a class="reference internal" href="#moment-magnitudes">Moment Magnitudes</a></li>
<li><a class="reference internal" href="#summary-magnitude">Summary Magnitude</a></li>
<li><a class="reference internal" href="#preferred-magnitude">Preferred Magnitude</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="configuration.html"
title="previous chapter">Configuration</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="locators.html"
title="next chapter">Locators</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/magnitudes.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,344 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Messaging system &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="SeisComP modules" href="modules.html" />
<link rel="prev" title="Concepts" href="../concepts.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="modules.html" title="SeisComP modules"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="../concepts.html" title="Concepts"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="messaging-system">
<span id="concepts-messaging"></span><h1>Messaging system<a class="headerlink" href="#messaging-system" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>This chapter describes the messaging system used for exchanging parameter messages between
different <a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">SeisComP modules</span></a> during runtime.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>A typical real-time <cite>SeisComP</cite> 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 <span id="id1">[<a class="reference internal" href="../references.html#id186" title="Publishsubscribe pattern. Wikipedia. URL: https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern.">21</a>]</span>. It is provided by the <cite>SeisComP</cite>
module <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a>.</p>
<p>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. Thats it. That is a very generic approach which requires clients
to understand the message content of each other.</p>
<p>In <cite>SeisComP</cite> this common messaging language consists of well defined message
types and contents. The vast majority of messages sent around are so called
<strong>notifiers</strong>.</p>
<p>Notifiers inform about changes on the data model. They carry just three
attributes:</p>
<ul class="simple">
<li><p>The unique identifier of the parent object</p></li>
<li><p>The operation to apply (add, update or remove)</p></li>
<li><p>The subject</p></li>
</ul>
<p>Speaking XML, a notifier looks like this:</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="nt">&lt;seiscomp</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://geofon.gfz-potsdam.de/ns/seiscomp-schema/0.11&quot;</span><span class="w"> </span><span class="na">version=</span><span class="s">&quot;0.11&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;Notifier</span><span class="w"> </span><span class="na">parentID=</span><span class="s">&quot;EventParameters&quot;</span><span class="w"> </span><span class="na">operation=</span><span class="s">&quot;add&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;Pick</span><span class="w"> </span><span class="na">publicID=</span><span class="s">&quot;Pick/....&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="cm">&lt;!-- All pick attributes will be placed here --&gt;</span>
<span class="w"> </span><span class="nt">&lt;/Pick&gt;</span>
<span class="w"> </span><span class="nt">&lt;/Notifier&gt;</span>
<span class="nt">&lt;/seiscomp&gt;</span>
</pre></div>
</div>
<p>Each client that receives such a notifier will take further actions if the
information meets its interest. A simple example is <a class="reference internal" href="../../apps/scautoloc.html#scautoloc"><span class="std std-ref">scautoloc</span></a>. 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).</p>
<figure class="align-center" id="id2">
<img alt="sketch of a distributed system" src="../../_images/system.png" />
<figcaption>
<p><span class="caption-text">Schematic view on a distributed SeisComP system.</span><a class="headerlink" href="#id2" title="Permalink to this image"></a></p>
</figcaption>
</figure>
</section>
<section id="queues">
<span id="messaging-queue"></span><h2>Queues<a class="headerlink" href="#queues" title="Permalink to this heading"></a></h2>
<p>The messaging server (<a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a>) manages a set of queues. Each queue is
independent and clients can only connect to <em>one</em> 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.</p>
<p>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).</p>
<p>One could configure scmaster with two queues, one for production which
populates a database and one for playbacks which does not populate a database.</p>
<p>A client can be directed to either the one or the other queue:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>connection.server<span class="w"> </span><span class="o">=</span><span class="w"> </span>localhost/production
</pre></div>
</div>
<p>or</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>scautopick<span class="w"> </span>-H<span class="w"> </span>localhost/production
</pre></div>
</div>
</section>
<section id="groups">
<span id="messaging-groups"></span><h2>Groups<a class="headerlink" href="#groups" title="Permalink to this heading"></a></h2>
<p>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.</p>
<p>For example <a class="reference internal" href="../../apps/scautopick.html#scautopick"><span class="std std-ref">scautopick</span></a> 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.</p>
<p>A consumer of the PICK group messages is <a class="reference internal" href="../../apps/scautoloc.html#scautoloc"><span class="std std-ref">scautoloc</span></a>. 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.</p>
</section>
<section id="scheme">
<span id="messaging-scheme"></span><h2>Scheme<a class="headerlink" href="#scheme" title="Permalink to this heading"></a></h2>
<p>The messaging allows unencrypted or encrypted connections which are specified by
the scheme parameter of the connection:</p>
<ul class="simple">
<li><p><cite>scmp</cite> (default): unencrypted,</p></li>
<li><p><cite>scmps</cite>: encrypted.</p></li>
</ul>
<p>Scheme, host, port and <a class="reference internal" href="#messaging-scheme"><span class="std std-ref">queue</span></a> together form the
connection URL of the messaging system which is configurable in
<a class="reference internal" href="../../apps/global.html#confval-connection.server"><code class="xref std std-confval docutils literal notranslate"><span class="pre">connection.server</span></code></a> or set by the command-line option <code class="docutils literal notranslate"><span class="pre">-H</span></code>.</p>
<p>Examples:</p>
<ul>
<li><p>Connect to the production queue of the messaging on localhost with default port.
Not using encryption <cite>scmp</cite> can be assumed implicitly in global configuration</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">connection</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">localhost</span><span class="o">/</span><span class="n">production</span>
</pre></div>
</div>
<p>On the command line use, e.g.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ scolv -H localhost
</pre></div>
</div>
</li>
<li><p>Connect to the production queue of the messaging on localhost with default port.
Using non-default secure encryption and port the scheme and the port must be
provided explicitly in global configuration</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">connection</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">scmps</span><span class="p">:</span><span class="o">//</span><span class="n">localhost18181</span><span class="o">/</span><span class="n">production</span>
</pre></div>
</div>
<p>On the command line use, e.g.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ scolv -H scmps://localhost:18181/production
</pre></div>
</div>
</li>
</ul>
</section>
<section id="database">
<span id="messaging-db"></span><h2>Database<a class="headerlink" href="#database" title="Permalink to this heading"></a></h2>
<p>The <a class="reference internal" href="database.html#concepts-database"><span class="std std-ref">database</span></a> is populated by <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a> 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 <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a> and that they will never attempt to write
into the database. In a fully-fledged <cite>SeisComP</cite> system the only instance that is
allowed to populate the database is the dbstore plugin of <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a>.</p>
<p>When connecting from a client to the messaging, the database connection parameters
are reported by <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a>. They can be overridden by the global configuration
or command-line option <code class="docutils literal notranslate"><span class="pre">-d</span></code>.</p>
<p>Example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">scolv</span> <span class="o">-</span><span class="n">H</span> <span class="n">localhost</span> <span class="o">-</span><span class="n">d</span> <span class="n">mysql</span><span class="p">:</span><span class="o">//</span><span class="n">sysop</span><span class="p">:</span><span class="n">sysop</span><span class="nd">@localhost</span><span class="o">/</span><span class="n">seiscomp</span><span class="o">-</span><span class="n">test</span>
</pre></div>
</div>
</section>
<section id="module-distribution">
<span id="messaging-distribution"></span><h2>Module distribution<a class="headerlink" href="#module-distribution" title="Permalink to this heading"></a></h2>
<p>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 <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a> 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.</p>
<p>The correct approach is to run <strong>one</strong> scmaster on computer A which populates
database X. Modules running on computer A, use</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>connection.server<span class="w"> </span><span class="o">=</span><span class="w"> </span>localhost/production
</pre></div>
</div>
<p>while modules running on computer B use</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>connection.server<span class="w"> </span><span class="o">=</span><span class="w"> </span>computerA/production
</pre></div>
</div>
<p>The database connection which is used by <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a> will be reported to the
clients when they connect so no explicit database configuration is necessary.</p>
<p>The messaging connection can be explicitly provided on the command line using
the option <code class="docutils literal notranslate"><span class="pre">-H</span></code> considering the comments on the
<a class="reference internal" href="#messaging-scheme"><span class="std std-ref">scheme</span></a> and <a class="reference internal" href="#messaging-queue"><span class="std std-ref">queue</span></a>, e.g.</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>scolv<span class="w"> </span>-H<span class="w"> </span>computerA/production
</pre></div>
</div>
</section>
<section id="web-frontend">
<h2>Web Frontend<a class="headerlink" href="#web-frontend" title="Permalink to this heading"></a></h2>
<p>When running <a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a> a web frontend is available which can be adjusted to
provide system information. The default port to access the web frontend is 18180:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>firefox<span class="w"> </span>localhost:18180
</pre></div>
</div>
<figure class="align-center" id="id3">
<a class="reference internal image-reference" href="../../_images/scmaster_web.png"><img alt="scmaster: web frontend" src="../../_images/scmaster_web.png" style="width: 10cm;" /></a>
<figcaption>
<p><span class="caption-text">scmaster: Web frontend</span><a class="headerlink" href="#id3" title="Permalink to this image"></a></p>
</figcaption>
</figure>
</section>
<section id="related-modules">
<h2>Related Modules<a class="headerlink" href="#related-modules" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><a class="reference internal" href="../../apps/scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scm.html#scm"><span class="std std-ref">scm</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scmm.html#scmm"><span class="std std-ref">scmm</span></a></p></li>
</ul>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Messaging system</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a></li>
<li><a class="reference internal" href="#queues">Queues</a></li>
<li><a class="reference internal" href="#groups">Groups</a></li>
<li><a class="reference internal" href="#scheme">Scheme</a></li>
<li><a class="reference internal" href="#database">Database</a></li>
<li><a class="reference internal" href="#module-distribution">Module distribution</a></li>
<li><a class="reference internal" href="#web-frontend">Web Frontend</a></li>
<li><a class="reference internal" href="#related-modules">Related Modules</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="../concepts.html"
title="previous chapter">Concepts</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="modules.html"
title="next chapter">SeisComP modules</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/messaging.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,317 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>SeisComP modules &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="SeisComP plugins" href="plugins.html" />
<link rel="prev" title="Messaging system" href="messaging.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="plugins.html" title="SeisComP plugins"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="messaging.html" title="Messaging system"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="seiscomp-modules">
<span id="concepts-modules"></span><h1>SeisComP modules<a class="headerlink" href="#seiscomp-modules" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>This document describes the difference between command-line and daemon modules.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>SeisComP is not a single executable but it provides a set of <a class="reference internal" href="../glossary.html#term-trunk"><span class="xref std std-term">trunk</span></a> and
<a class="reference internal" href="../glossary.html#term-standalone-module"><span class="xref std std-term">standalone</span></a> <a class="reference internal" href="../glossary.html#term-module"><span class="xref std std-term">modules</span></a>. Trunk modules
can be</p>
<ul class="simple">
<li><p><a class="reference internal" href="#concepts-modules-commandline"><span class="std std-ref">Command-line modules</span></a>,</p></li>
<li><p><a class="reference internal" href="#concepts-modules-daemon"><span class="std std-ref">Daemon modules</span></a>.</p></li>
</ul>
<p>Modules are <a class="reference internal" href="#concepts-modules-config"><span class="std std-ref">configured by configuration files</span></a>
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 <a class="reference internal" href="../glossary.html#term-standalone-module"><span class="xref std std-term">standalone modules</span></a>.
All other modules are called <a class="reference internal" href="../glossary.html#term-trunk"><span class="xref std std-term">trunk</span></a> modules.</p>
<p>Examples for standalone modules are <a class="reference internal" href="../../apps/seedlink.html#seedlink"><span class="std std-ref">seedlink</span></a>, <a class="reference internal" href="../../apps/slarchive.html#slarchive"><span class="std std-ref">slarchive</span></a> and <a class="reference internal" href="../../apps/slmon.html#slmon"><span class="std std-ref">slmon</span></a>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>In order to start or execute modules without <strong class="command">seiscomp exec</strong>
(see below), the <cite>SeisComP</cite> SHELL environment variables must be known to the
system. The variables and their values can be printed giving the full path to
the <a class="reference internal" href="../../apps/seiscomp.html#seiscomp"><span class="std std-ref">seiscomp</span></a> tool. Example:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>/home/sysop/seiscomp/bin/seiscomp<span class="w"> </span>print<span class="w"> </span>env
</pre></div>
</div>
</div>
</section>
<section id="daemon-tools">
<span id="concepts-modules-daemon"></span><h2>Daemon Tools<a class="headerlink" href="#daemon-tools" title="Permalink to this heading"></a></h2>
<p>Daemon tools are <cite>SeisComP</cite> 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
<a class="reference internal" href="../../apps/seiscomp.html#seiscomp"><span class="std std-ref">seiscomp</span></a> tool with <strong class="command">list modules</strong>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>seiscomp<span class="w"> </span>list<span class="w"> </span>modules
</pre></div>
</div>
<p>Daemon modules can be started to run in the background:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>seiscomp<span class="w"> </span>start<span class="w"> </span>scautopick
</pre></div>
</div>
<p>When starting a daemon module, all verbosity output is logged to
<a class="reference internal" href="#concepts-modules-logging"><span class="std std-ref">log files</span></a>. Daemon modules can also be executed
as <a class="reference internal" href="#concepts-modules-commandline"><span class="std std-ref">command-line tools</span></a>.</p>
</section>
<section id="command-line-tools">
<span id="concepts-modules-commandline"></span><h2>Command-Line Tools<a class="headerlink" href="#command-line-tools" title="Permalink to this heading"></a></h2>
<p>All non-daemon modules are command-line modules. These command-line modules
and most <a class="reference internal" href="#concepts-modules-daemon"><span class="std std-ref">daemon modules</span></a> can be executed on
demand from the SHELL command-line. These modules can also be
utilities or <a class="reference internal" href="../glossary.html#term-GUI"><span class="xref std std-term">graphical user interfaces (GUIs)</span></a>.
For executing use the full path to the <a class="reference internal" href="../../apps/seiscomp.html#seiscomp"><span class="std std-ref">seiscomp</span></a> tool or, when the
<cite>SeisComP</cite> environment is known, just call the module name along with command-line
options, e.g.</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>seiscomp<span class="w"> </span><span class="nb">exec</span><span class="w"> </span>scolv<span class="w"> </span><span class="o">[</span>options<span class="o">]</span>
scolv<span class="w"> </span><span class="o">[</span>options<span class="o">]</span>
</pre></div>
</div>
<p>Command-line modules are found in <code class="file docutils literal notranslate"><span class="pre">&#64;ROOTDIR&#64;/bin/</span></code> but they are <strong>NOT</strong>
listed when executing</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>seiscomp<span class="w"> </span>list<span class="w"> </span>modules
</pre></div>
</div>
<p>Using options like <code class="xref std std-option docutils literal notranslate"><span class="pre">-h</span></code> the list of available command-line options can
be learned.</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>scbulletin<span class="w"> </span>-h
</pre></div>
</div>
<p>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:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>scolv<span class="w"> </span>--picker.loadAllPicks<span class="o">=</span><span class="nb">true</span>
</pre></div>
</div>
<p>When executing a module, all verbosity output is logged to
<a class="reference internal" href="#concepts-modules-logging"><span class="std std-ref">log files</span></a>. The logging level can be controlled
by configuration or by the command-line option <code class="xref std std-option docutils literal notranslate"><span class="pre">-v</span></code>.</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>scbulletin<span class="w"> </span>-vvvv
</pre></div>
</div>
<p>Detailed debugging information can also be printed on the command line during
runtime using the <code class="xref std std-option docutils literal notranslate"><span class="pre">--debug</span></code> option:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>scbulletin<span class="w"> </span>--debug
</pre></div>
</div>
<p>When starting a daemon module all verbosity output is stored in <code class="file docutils literal notranslate"><span class="pre">&#64;LOGDIR&#64;</span></code>
or <code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/var/log</span></code>. Daemon modules can also be executed as
<a class="reference internal" href="#concepts-modules-commandline"><span class="std std-ref">command-line tools</span></a>.</p>
</section>
<section id="configuration">
<span id="concepts-modules-config"></span><h2>Configuration<a class="headerlink" href="#configuration" title="Permalink to this heading"></a></h2>
<p>Each <a class="reference internal" href="../glossary.html#term-standalone-module"><span class="xref std std-term">standalone module</span></a> tries to read from three module configuration
files whereas <a class="reference internal" href="../glossary.html#term-trunk"><span class="xref std std-term">trunk</span></a> modules try to read the six files. Note that
configuration parameters defined earlier are overwritten if defined in files
read in later:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>File</p></th>
<th class="head"><p>Standalone</p></th>
<th class="head"><p>Trunk</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>$SEISCOMP_ROOT/etc/defaults/global.cfg</p></td>
<td></td>
<td><p>X</p></td>
</tr>
<tr class="row-odd"><td><p>$SEISCOMP_ROOT/etc/defaults/module.cfg</p></td>
<td><p>X</p></td>
<td><p>X</p></td>
</tr>
<tr class="row-even"><td><p>$SEISCOMP_ROOT/etc/global.cfg</p></td>
<td></td>
<td><p>X</p></td>
</tr>
<tr class="row-odd"><td><p>$SEISCOMP_ROOT/etc/module.cfg</p></td>
<td><p>X</p></td>
<td><p>X</p></td>
</tr>
<tr class="row-even"><td><p>~/.seiscomp/global.cfg</p></td>
<td></td>
<td><p>X</p></td>
</tr>
<tr class="row-odd"><td><p>~/.seiscomp/module.cfg</p></td>
<td><p>X</p></td>
<td><p>X</p></td>
</tr>
</tbody>
</table>
<p>In addition to the module configuration files some modules such as
<a class="reference internal" href="../../apps/seedlink.html#seedlink"><span class="std std-ref">seedlink</span></a> or <a class="reference internal" href="../../apps/scautopick.html#scautopick"><span class="std std-ref">scautopick</span></a> consider <a class="reference internal" href="../glossary.html#term-binding"><span class="xref std std-term">bindings</span></a>.
Bindings provide parameters specific to stations. They are configured as
per-station bindings or profiles used for multiple stations.</p>
<p>The <a class="reference internal" href="../../apps/global.html#global-configuration"><span class="std std-ref">global configuration section</span></a> 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.</p>
<p>The concept section <a class="reference internal" href="configuration.html#concepts-configuration"><span class="std std-ref">Configuration</span></a> provides more
details about configurations.</p>
</section>
<section id="logging">
<span id="concepts-modules-logging"></span><h2>Logging<a class="headerlink" href="#logging" title="Permalink to this heading"></a></h2>
<p>Whenever operated, modules report the state of operation to log files. Trunk
modules report the module and the start up log to <code class="file docutils literal notranslate"><span class="pre">&#64;LOGDIR&#64;/[module].log</span></code> and
<code class="file docutils literal notranslate"><span class="pre">&#64;ROOTDIR&#64;/var/log/[module].log</span></code>, respectively. Standalone modules log to
<code class="file docutils literal notranslate"><span class="pre">&#64;ROOTDIR&#64;/var/log/[module].log</span></code> only. The log files are rotated and the
level of detail can be configured by <a class="reference internal" href="../../apps/global.html#confval-logging.level"><code class="xref std std-confval docutils literal notranslate"><span class="pre">logging.level</span></code></a>. More parameters
in <code class="xref std std-confval docutils literal notranslate"><span class="pre">logging.*</span></code> provide more control over logging, e.g., the log file
rotation.</p>
</section>
<section id="alias-modules">
<span id="concepts-modules-aliaes"></span><h2>Alias Modules<a class="headerlink" href="#alias-modules" title="Permalink to this heading"></a></h2>
<p>Many <a class="reference internal" href="../glossary.html#term-trunk"><span class="xref std std-term">trunk</span></a> and <a class="reference internal" href="../glossary.html#term-standalone-module"><span class="xref std std-term">standalone modules</span></a> allow
generating aliases as symbolic links to another module.
These aliases are useful for running multiple instances of the same module with
different configuration.</p>
<p>Alias modules can be created or removed using the <a class="reference internal" href="../../apps/seiscomp.html#seiscomp"><span class="std std-ref">seiscomp</span></a> tool by
providing the commands <strong class="command">alias create</strong> or <strong class="command">alias remove</strong>,
respectively. Read the documentation of <a class="reference internal" href="../../apps/seiscomp.html#sec-seiscomp-aliases"><span class="std std-ref">seiscomp</span></a>
for the details.</p>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">SeisComP modules</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a></li>
<li><a class="reference internal" href="#daemon-tools">Daemon Tools</a></li>
<li><a class="reference internal" href="#command-line-tools">Command-Line Tools</a></li>
<li><a class="reference internal" href="#configuration">Configuration</a></li>
<li><a class="reference internal" href="#logging">Logging</a></li>
<li><a class="reference internal" href="#alias-modules">Alias Modules</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="messaging.html"
title="previous chapter">Messaging system</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="plugins.html"
title="next chapter">SeisComP plugins</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/modules.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,219 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>SeisComP plugins &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Database" href="database.html" />
<link rel="prev" title="SeisComP modules" href="modules.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="database.html" title="Database"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="modules.html" title="SeisComP modules"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="seiscomp-plugins">
<span id="concepts-plugins"></span><h1>SeisComP plugins<a class="headerlink" href="#seiscomp-plugins" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>This chapter describes the general use of plugins in SeisComP.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>Plugins expand the functionality of <a class="reference internal" href="modules.html#concepts-modules"><span class="std std-ref">applications</span></a>.
They are C++ shared object libraries which are dynamically loaded at runtime
into an application.</p>
<p>Typical plugins provide access to:</p>
<ul class="simple">
<li><p><a class="reference internal" href="database.html#concepts-database"><span class="std std-ref">Databases</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/global_recordstream.html#global-recordstream"><span class="std std-ref">Recordstream implementations</span></a></p></li>
<li><p><a class="reference internal" href="../../index.html#sec-index-extensions"><span class="std std-ref">Locator routines</span></a></p></li>
<li><p><a class="reference internal" href="../../index.html#sec-index-extensions"><span class="std std-ref">Amplitude and magnitude types</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scqc.html#scqc"><span class="std std-ref">Waveform quality</span></a>.</p></li>
</ul>
<p>The plugin files themselves are located in <code class="file docutils literal notranslate"><span class="pre">share/plugins</span></code>.</p>
<p>By just loading a plugin an application does not change
its 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 <code class="docutils literal notranslate"><span class="pre">DatabaseInterface</span></code>. Technically it
creates a new object implementing a certain interface by calling the C++
method:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nv">db</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>DatabaseInterface::Create<span class="o">(</span><span class="s2">&quot;mysql&quot;</span><span class="o">)</span><span class="p">;</span>
</pre></div>
</div>
<p>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.</p>
<p>Once the plugin <code class="docutils literal notranslate"><span class="pre">dbmysql</span></code> 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.</p>
<p>That means, if an application loads two plugins, e.g. <code class="docutils literal notranslate"><span class="pre">dbmysql</span></code> and
<code class="docutils literal notranslate"><span class="pre">dbpostgresql</span></code> 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.</p>
<p>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:</p>
<ul class="simple">
<li><p><a class="reference internal" href="messaging.html#concepts-messaging"><span class="std std-ref">Messaging</span></a></p></li>
<li><p><a class="reference internal" href="database.html#concepts-database"><span class="std std-ref">Database</span></a></p></li>
<li><p><a class="reference internal" href="recordstream.html#concepts-recordstream"><span class="std std-ref">RecordStream</span></a></p></li>
<li><p>Record formats</p></li>
<li><p>Map projections</p></li>
<li><p><a class="reference internal" href="../filter-grammar.html#filter-grammar"><span class="std std-ref">Time domain filters</span></a></p></li>
<li><p>Importer</p></li>
<li><p>Exporter</p></li>
<li><p><strong>Amplitude processors</strong></p></li>
<li><p><strong>Magnitude processors</strong></p></li>
</ul>
<p>This is just a subset of available extensible interface factories. The
emphasized entries refer to the factories which are most commonly extended.</p>
</section>
<section id="location-and-configuration">
<h2>Location and Configuration<a class="headerlink" href="#location-and-configuration" title="Permalink to this heading"></a></h2>
<p>Plugins are located in <code class="file docutils literal notranslate"><span class="pre">$SEISCOMP_ROOT/share/pugins</span></code>. In order to make a
plugins available for a module it must be added to the configuration of
<a class="reference internal" href="../../apps/global.html#confval-plugins"><code class="xref std std-confval docutils literal notranslate"><span class="pre">plugins</span></code></a> of the global parameters of a module or in
<a class="reference internal" href="../../apps/global.html#id1"><span class="std std-ref">Module Configuration</span></a>.</p>
<p>Configuring <a class="reference internal" href="../../apps/global.html#confval-plugins"><code class="xref std std-confval docutils literal notranslate"><span class="pre">plugins</span></code></a> with the name of a plugin will let the exclusively
use this plugin and no other ones, e.g. default plugins. Example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">plugins</span> <span class="o">=</span> <span class="n">evrc</span>
</pre></div>
</div>
<p>In order to add a plugin to the default plugins or plugins loaded by before, e.g.
by the global configuration, load these</p>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">SeisComP plugins</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a></li>
<li><a class="reference internal" href="#location-and-configuration">Location and Configuration</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="modules.html"
title="previous chapter">SeisComP modules</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="database.html"
title="next chapter">Database</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/plugins.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,200 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>RecordStream &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Inventory" href="inventory.html" />
<link rel="prev" title="Waveform archives" href="waveformarchives.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="inventory.html" title="Inventory"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="waveformarchives.html" title="Waveform archives"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="recordstream">
<span id="concepts-recordstream"></span><h1>RecordStream<a class="headerlink" href="#recordstream" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>This document describes the RecordStream interface for accessing waveform data.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>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
<a class="reference internal" href="../../apps/global_recordstream.html#global-recordstream"><span class="std std-ref">technical documentation</span></a>.</p>
<p>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.</p>
<p>What do they do actually?</p>
<p>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.</p>
<p>The application uses RecordStreams like that:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># The RecordStream URL passed is slink://localhost:18000</span>
<span class="n">scheme</span> <span class="o">=</span> <span class="n">URL</span><span class="o">.</span><span class="n">scheme</span><span class="p">()</span> <span class="c1"># scheme = &#39;slink&#39;</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">URL</span><span class="o">.</span><span class="n">location</span><span class="p">()</span> <span class="c1"># location = &#39;localhost:18000&#39;</span>
<span class="n">rs</span> <span class="o">=</span> <span class="n">RecordStream</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span><span class="n">scheme</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">rs</span><span class="p">:</span>
<span class="n">throw</span> <span class="n">Error</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">rs</span><span class="o">.</span><span class="n">setSource</span><span class="p">(</span><span class="n">location</span><span class="p">):</span>
<span class="n">throw</span> <span class="n">Error</span><span class="p">()</span>
<span class="n">rs</span><span class="o">.</span><span class="n">setStartTime</span><span class="p">(</span><span class="n">Time</span><span class="p">(</span><span class="mi">2019</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
<span class="n">rs</span><span class="o">.</span><span class="n">addStream</span><span class="p">(</span><span class="s1">&#39;GE&#39;</span><span class="p">,</span> <span class="s1">&#39;UGM&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;BH?&#39;</span><span class="p">)</span>
<span class="n">rs</span><span class="o">.</span><span class="n">addStream</span><span class="p">(</span><span class="s1">&#39;GE&#39;</span><span class="p">,</span> <span class="s1">&#39;MORC&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;BH?&#39;</span><span class="p">)</span>
<span class="k">while</span> <span class="p">(</span> <span class="n">rec</span> <span class="o">=</span> <span class="n">rs</span><span class="o">.</span><span class="n">next</span><span class="p">()</span> <span class="p">)</span>
<span class="n">do_something_with</span><span class="p">(</span><span class="n">rec</span><span class="p">)</span>
</pre></div>
</div>
<p>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.</p>
<p>Although <cite>SeisComP</cite> 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 <cite>SeisComP</cite>
sources.</p>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">RecordStream</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="waveformarchives.html"
title="previous chapter">Waveform archives</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="inventory.html"
title="next chapter">Inventory</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/recordstream.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,204 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Waveform archives &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=72bcf2f2" />
<link rel="stylesheet" type="text/css" href="../../_static/seiscomp.css?v=c6da7ce6" />
<link rel="stylesheet" type="text/css" href="../../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=823bb831"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="RecordStream" href="recordstream.html" />
<link rel="prev" title="Database" href="database.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">6.9.0</span>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="recordstream.html" title="RecordStream"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="database.html" title="Database"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../concepts.html" accesskey="U">Concepts</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="waveform-archives">
<span id="concepts-waveformarchives"></span><h1>Waveform archives<a class="headerlink" href="#waveform-archives" title="Permalink to this heading"></a></h1>
<section id="scope">
<h2>Scope<a class="headerlink" href="#scope" title="Permalink to this heading"></a></h2>
<p>This chapter describes waveform archives for long-term storage of miniSEED data.</p>
</section>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>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 <a class="reference internal" href="recordstream.html#concepts-recordstream"><span class="std std-ref">RecordStream interface</span></a> allows a combined access
to real-time data and data in <a class="reference internal" href="#concepts-sds"><span class="std std-ref">SDS</span></a> or other archives.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>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 <a class="reference internal" href="inventory.html#concepts-inventory"><span class="std std-ref">inventory</span></a>
referring to input data given in counts.</p>
</div>
</section>
<section id="sds-archives">
<span id="concepts-sds"></span><h2>SDS archives<a class="headerlink" href="#sds-archives" title="Permalink to this heading"></a></h2>
<p>SeisComP uses the SeisComP Data Structure (SDS) for archiving miniSEED waveform data.
It has the structure:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>archive
<span class="w"> </span>+<span class="w"> </span>year
<span class="w"> </span>+<span class="w"> </span>network<span class="w"> </span>code
<span class="w"> </span>+<span class="w"> </span>station<span class="w"> </span>code
<span class="w"> </span>+<span class="w"> </span>channel<span class="w"> </span>code
<span class="w"> </span>+<span class="w"> </span>one<span class="w"> </span>file<span class="w"> </span>per<span class="w"> </span>day<span class="w"> </span>and<span class="w"> </span>location,<span class="w"> </span>e.g.<span class="w"> </span>NET.STA.LOC.CHAN.D.YEAR.DOY
</pre></div>
</div>
<p>SeisComP ships with <a class="reference internal" href="../../apps/slarchive.html#slarchive"><span class="std std-ref">slarchive</span></a> to create SDS archives from a miniSEED waveform
buffer by <a class="reference internal" href="../../apps/seedlink.html#seedlink"><span class="std std-ref">seedlink</span></a> in real time and with <a class="reference internal" href="../../apps/scart.html#scart"><span class="std std-ref">scart</span></a> to intergrate miniSEED
records from files into an SDS archive. <a class="reference internal" href="../../apps/scart.html#scart"><span class="std std-ref">scart</span></a> can also be used to retrieve
miniSEED records from an SDS archive.</p>
</section>
<section id="access-to-waveform-archives">
<h2>Access to waveform archives<a class="headerlink" href="#access-to-waveform-archives" title="Permalink to this heading"></a></h2>
<p>Access from SeisComP processing and GUI modules to waveform archives is realized by
<a class="reference internal" href="recordstream.html#concepts-recordstream"><span class="std std-ref">RecordStream implementations</span></a>.
The continuity of SDS archives can be monitored by <a class="reference internal" href="../../apps/scardac.html#scardac"><span class="std std-ref">scardac</span></a> and exposed by
the <a class="reference internal" href="../../apps/fdsnws.html#fdsnws"><span class="std std-ref">fdsnws availability feature</span></a>.
miniSEED waveforms in SDS archives, can interactively retrieved using <a class="reference internal" href="../../apps/scart.html#scart"><span class="std std-ref">scart</span></a>.
Waveforms stored in SDS archives can be served to clients, e.g. using <a class="reference internal" href="../../apps/fdsnws.html#fdsnws"><span class="std std-ref">fdsnws</span></a>.</p>
</section>
<section id="related-modules">
<h2>Related modules<a class="headerlink" href="#related-modules" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><span class="xref std std-ref">caps_plugin</span></p></li>
<li><p><a class="reference internal" href="../../apps/fdsnws.html#fdsnws"><span class="std std-ref">fdsnws</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scardac.html#scardac"><span class="std std-ref">scardac</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/scart.html#scart"><span class="std std-ref">scart</span></a></p></li>
<li><p><a class="reference internal" href="../../apps/slarchive.html#slarchive"><span class="std std-ref">slarchive</span></a></p></li>
</ul>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Waveform archives</a><ul>
<li><a class="reference internal" href="#scope">Scope</a></li>
<li><a class="reference internal" href="#overview">Overview</a></li>
<li><a class="reference internal" href="#sds-archives">SDS archives</a></li>
<li><a class="reference internal" href="#access-to-waveform-archives">Access to waveform archives</a></li>
<li><a class="reference internal" href="#related-modules">Related modules</a></li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="database.html"
title="previous chapter">Database</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="recordstream.html"
title="next chapter">RecordStream</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/base/concepts/waveformarchives.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>6.9.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>