# Change Log

All notable changes to scanloc and add-ons will be documented in this file.

## 2025.280

## Added

-   When processing origins the origin time is earlier than pick times of
    associated picks. Therefore picks associated to origins must be made
    available before the origins. Creation time and actual times of picks must
    be smaller than the corresponding times of origins. However,
    in real-time playbacks with timing by object time origins are handled
    before picks due to their earlier object times and the picks are not yet
    available when processing origins. In this case, scanloc tries to load the
    picks from object buffer allowing the comparison with new picks in order for
    their association to the origins.
-   Before association of picks to origins, stream codes of picks are now
    always checked and compared with picks already associated avoiding multiple
    picks with the same stream ID to be associated. This may be in particular
    relevant when origins with S picks are provided by gempa modules such as
    ccloc or autothor but additional P and S picks from modules like scautopick
    shall be associated as well.
-   Add playbacks of origins to documentation.

## 2025.272

### Fixed

-   Do not limit the number of arrivals per origin. This fixes a regression
    previously introduced.

## 2025.267

### Added

-   playback_picks:
    -   Print parameters with `--print` and `--list` even when objects do not
        contain author or creationInfo.

### Changed

-   Optimize `association.arrivalCountMinRes` for higher speed when removing
    arrivals in a bulk.
-   In SeisComP version >= 7.0.0 we use the equatorial radius of the earth
    constant from SeisComP. For all previous releases we changed the radius from
    6378 km to 6378.137 km to be consistent with the SeisComP 7.0.0 value.

## 2025.258

### Added

-   New configuration parameter `streamCheckLevel` which replaces parameter
    `clustersearch.streamCheckLevel` allowing the specification of the level of
    the stream ID [NET.STA.LOC.CHA] used for comparing picks in the association
    and cluster search process. The default is *loc* for checking stream IDs of PICKS
    on sensor location level (LOC).
-   dump_picks:
    -   Support `--region` without limits in latitude and longitude which are
        converted to match the globe.

## 2025.232

### Important

-   The plugin ossum for scoring origins in scanloc and scevent has been renamed
    to `scoresum`. The change allows us to consistently develop and provide
    alternative plugins in the future. If the global module configuration
    parameter `plugin` has been configured with `ossum`, it must be renamed

    ```
    ossum -> scoresum
    ```

    If the module configuration parameters of the ossum plugin have been set
    explicitely, they must be renamed as:

    ```
    ossum.p -> score.sum.weight.p
    ossum.s -> score.sum.weight.s
    ossum.p0 -> score.sumweight.p0
    ossum.s0 -> score.sum.weight.s0
    ossum.residual -> score.sum.weight.residual
    ossum.depth -> score.sum.weight.depth
    ossum.increaseManual -> score.sum.weight.increaseManual
    ossum.normalizationDepth -> score.sum.normalizationDepth
    ossum.normalizationRMS -> score.sum.normalizationRMS
    score.weight.p -> score.sum.p
    score.weight.s -> score.sum.s
    score.weight.p0 -> score.sum.p0
    score.weight.s0 -> score.sum.s0
    score.weight.residual -> score.sum.residual
    score.weight.depth -> score.sum.depth
    score.weight.increaseManual -> score.sum.increaseManual
    ```

    The changes of the parameters apply equally to scanloc and scevent.

    Note in case the plugin `ossum` was not configured before:

    -   The configuration parameters `ignoreDepth` and `maxResidual` are not
        used anymore for computing the score. The corresponding parameters
        to be considered additionally are:

        ```
        score.sum.normalizationDepth
        score.sum.normalizationRMS
        ```

    -   The score processing now requires a plugin. `scoresum` is added to the
        default configuration by the parameter `plugins`. If `plugins` is not
        configured to extend the parameter itself in global module
        configuration, the plugin is unknown to scanloc and scanloc will stop.
        In this case, `plugins` must be corrected and ${plugins} must be
        prepended in global module configuration to

        ```
        plugins = ${plugins}, ...
        ```

        Alternatively, you may configure scanloc specifically with the plugin
        alone:

        ```
        plugins = scoresum
        ```

## 2025.226

### Fixed

-   Tracking of already sent origins.

## 2025.204

### Added

-   playback_picks:

    -   Added option `-o`/`--object`.
    -   Support joint application of `--list` and `--print`.

-   With the configuration parameter `association.arrivalCountMinRes` the
    arrival residual check optimized for speed if origins have at least the
    configured number of arrivals. The feature supports monitoring with large-N
    networks but if may reduce the number of associated phases.
-   Support for scevent score processor plugins for evaluating
    origins. This feature allows customers to implement their own
    score algorithms if the standard algorithm does not meet their
    requirements. A good introduction how to develop a custom score
    plugin can be found here:
    "https://github.com/gempa/seiscomp-programming-templates"
    By default scanloc uses the `ossum` plugin to compute origin scores
    which implements the so far used score algorithm so that the
    default behavior does not change. The plugin can also be used by scevent.
-   Add available travel-time interfaces and locators to parameter description
    allowing them to be selected by drop-down menu in scconfig. This works as of
    SeisComP in version >= 7.0.0.

The following items have become obsolete and are extended by introducing the
plugin scoresum replacing ossum, see above.

-   With the support for the score processor, the score configuration parameters
    had to be renamed starting with the name of the plugin. If unsupported score
    parameters are used, scanloc will stop operating and the relevant parameter
    is printed to the error log. For restoring the default behaviour rename the
    parameters:

    ```
    score.weight.p -> ossum.p
    score.weight.s -> ossum.s
    score.weight.p0 -> ossum.p0
    score.weight.s0 -> ossum.s0
    score.weight.residual -> ossum.residual
    score.weight.depth -> ossum.depth
    score.weight.increaseManual -> ossum.increaseManual
    ```

    In addition, the configuration parameters `ignoreDepth` and `maxResidual`
    are not used anymore for computing the score. The corresponding parameters
    to be considered additionally are:

    ```
    ossum.normalizationDepth
    ossum.normalizationRMS
    ```

    The score processing now requires a plugin. `ossum` is added to the default
    configuration by the parameter `plugins`. If `plugins` is not configured to
    extend the parameter itself in global module configuration, the plugin is
    unknown to scanloc and scanloc will stop. In this case, `plugins` must be
    corrected and ${plugins} must be prepended in global module configuration to

    ```
    plugins = ${plugins}, ...
    ```

    Alternatively, you may configure scanloc specifically with the plugin alone:

    ```
    plugins = ossum
    ```

## 2025.183

### Fixed

-   dump_picks: Correctly apply `--formatted`.

## 2025.182

### Added

-   dump_picks has received the option `--minutes`. The value is added to
    `--hours` if set.

## 2025.177

### Added

-   dump_picks has received options for formatting the output:

    -   `--formatted` for printing formatted XML. Otherwise XML is unformatted
        saving disk space.
    -   `--type` for printing output in other than XML format. The other
        formats can be used for printing time windows and streams corresponding
        to picks in order to fetch waveforms from SDS archive, CAPS or FDSN
        servers.
    -   `--margin` for adding a custom margin to time windows along with
        `--type`.
    -   Applications and examples have been added to the documentation.

## 2025.078

### Added

-   `--authors` for playback_picks allows filtering objects by author name
    before playing back.

### Changed

-   Use 0.0 for `defaultDepth` in scanloc instead of 5.0. The change preserves
    the previous behavior while avoiding inconsistencies when setting origin
    depth of origins with initial depth = 0.0 to `defaultDepth` without
    relocating.

## 2025.063

### Added

-   Add note on publicIDs of Pick objects to documentation.

## 2025.049

### Fixed

-   Don't crash in case of no cluster reference time can be set.

## 2025.043

### Added

-   The configuration parameter `buffer.authorWhiteList` applies to picks
    and origins replacing `buffer.originAuthorWhiteList` which is hereby
    deprecated. `buffer.originAuthorWhiteList` will be removed in 2025.
-   The command-line option `--author-whitelist` applies to picks and origins
    replacing `--filter-pick-author` which is removed.

## 2025.042

### Added

-   Origin and pick time buffer check. If the object time is after the creation
    or current time, the object is ignored. The allowed time can be increased
    with the command-line option `--future-time-delta` or the configuration
    parameter `buffer.futureTimeDelta`. By default the value is 0 seconds
    ignoring all object with times in the future.

## 2025.024

### Changed

-   Update description of command-line option `--timing` for non-real-time
    playbacks with `--ep`.

## 2025.021

### Added

-   Link LOCSAT travel-time tables for Lg, LQ, LR, Rg from SeisComP to
    iasp91_scanloc supporting these phases without the need to add them manually.

## 2024.339

### Fixed

-   Convert sensor location elevation to km for computing hypocentral distances
    if `use3D` is configured and true.

## 2024.319

### Changed

-   Output unformatted XML in playbacks with `--ep` in order to reduce file size.
-   Add command-line option `--formatted` in order to output formatted XML which
    may be better readable for humans.

## 2024.269

### Changed

-   Setting cluster time to earliest arrival instead of average.
-   For preliminary origins set the epicenter to the sensor location of the
    earliest arrival but the depth to what is configured in `defaultDepth`.

### Added

-   Add pick delay as the difference of pick creation time and actual pick time
    to listed picks when using playback_picks with `--list`.

## 2024.268

### Added

-   The new command-line option `--list` in the auxiliary script playback_picks
    prints details of all picks contained in the processed XML file.

### Changed

-   Print all output from `--print` to stdout instead of stderr.

## 2024.262

### Added

-   New configuration parameter `streamCheckLevel` allowing the specification
    of the level of the stream ID [NET.STA.LOC.CHA] used for comparing picks.
    The default is *loc* for checking stream IDs of PICKS on the level of sensor
    location (LOC).

## 2024.218

### Added

-   Allow computing distances by considering 3D coordinates of sensor
    locations including elevation and/origin depths. Otherwise, only latitudes
    and longitudes are considered. The 3D distance computation applies to
    clustering, phase association and event association. The feature is
    activated by configuring `use3D = true`.

## 2024.184

### Changed

-   Origin creation information are now set whenever an origin is created by
    the cluster search or after associating phases. In previous versions, these
    information were not updated in rare situations resulting in empty values or
    values inherited from external origins. As a results, the creation time
    is now exact and may be slightly earlier as compared to previous versions.

## 2024.143

### Added

-   Add default weights to scoring allowing to run scanloc without explicit
    configuration of `score.weights.p` and `score.weights.s` when using
    the option `--config-file`.
-   Provide documentation of the score contribution by RMS and depth as well as
    picks with slowness and back azimuth.

## 2024.120

### Added

-   If picks which do not only have a time value but also a masurment of slowness
    and/or a back azimuth and if those measurements are used by the locator,
    the arrivals referencing these picks will make a  great impact on the origin.
    Therefore, the score contribution from these picks can be increased by the
    score parameters `score.weights.p` and `score.weights.s` where triplets
    assign separate weights to pick time, slowness and back azimuth. The usage of
    slowness and back azimuth depends on locator.

## 2024.110

### Changed

-   Update documentation and command-line help of the parameters controlling
    the publication of origins.

## 2024.106

### Added

-   New configuration parameter `clusterSearch.maxSize` controlling the maximum
    number of picks in a cluster after selecting core points and before adding
    more picks. Since core points are first collected, clusters may have a
    higher number of picks. The goal of this option is to speed up scanloc. The
    option may help to increase the performance of scanloc in case of dense
    large-N networks where very many cluster can be formed due to the proximity
    of stations or generous configuration.
-   New configuration parameter `association.arrivalCountMinRes` controlling the
    association of picks to origins. For origins with a larger number of
    arrivals than configured, the association of P and S picks is controlled by
    the minimum of (`association.maxPResidual`, `association.maxResidual`) and
    (`association.maxSResidual`, `association.maxResidual`), respectively.
    The goal of this option is to speed up scanloc by only associating picks
    to already stable origins defined by many arrivals where new picks later on
    are unlikely to be removed again from origins by residual checks. The
    option may help to increase the performance of scanloc in case of dense
    large-N networks where very stations provide phase picks.

## 2024.092

### Added

-   playback_picks can be used for playbacks of origins in addition to picks
    and amplitudes.

## 2024.073

### Fixed

-   Remove 'Is'-type picks from buffer when `buffer.pickKeep` is exceeded.
-   Report in configuration summary of debug output whether cluster search is
    performed.

## 2024.047

### Added

-   playback_picks with `--print` prints a NSLC list, author and stream
    information of picks and amplitudes. The information can be used for
    filtering waveforms (scart) or inventory (invextr), for creating global
    bindings or for applying author filtering, e.g., in dump_picks.

## 2024.044

### Changed

-   Update documentation and command-line help of the auxiliary scripts
    dump_picks and playback_picks.

## 2024.040

### Added

-   The configuration parameter `locator.forceFixDepth` enforces to fix the
    depth of the origin to what is configured by `defaultDepth`, no free-depth
    solutions are made. Enable `locator.forceFixDepth` in case of knowledge of
    ground-truth depth or in case of sparse networks. Support for fixing depth
    by the locator is required.

## 2024.038

### Important

-   The scanloc configuration parameters `clusterSearch.ignorePicks` and
    `clusterSearch.ignorePickTimeDifference` have been deprecated and must be
    renamed to `buffer.ignorePickTimeDifference` since the parameter is actually
    applied to the buffering of picks and not only to the cluster search
    algorithm.

### Changed

-   In addition to P-type picks `buffer.ignorePickTimeDifference` is also
    applied to infrasound Is-type picks.

## 2024.036

### Changed

-   playback_picks continues to print statistics with --print even when picks
    have no creationInfo().creationTime().

## 2024.025

### Added

-   playback_picks with the new option --print allows printing some statistics
    of the read XML file instead of sending picks and amplitudes.

## 2024.024

### Fixed

-   High memory usage.

## 2023.325

### Changed

-   Remove support for SeisComP3 C++ API since no packages will be provided
    for SeisComP3 anymore.

## 2023.317

### Changed

-   Remove support for SeisComP3 Python API since no packages will be provided
    for SeisComP3 anymore.

## 2023.305

### Changed

-   Update documentation of internal events.

## 2023.300

### Fixed

-   Consider configuration parameter `eventAssociation.maxTimeSpan` with double
    precision.
-   Report more configuration parameters in summary debug output.

## 2023.218

### Added

-   The command-line option `--drop-reference-check` and the configuration
    parameter `association.dropReferenceCheck` allow to associate S-type picks
    which do not have a reference pick. Reference picks are typically added to S
    picks by scautopick but picks from other modules may not have this feature.

## 2023.214

### Changed

-   Update documentation of phase association.

## 2023.139

### Added

-   In dump_picks the new option `--maximum-delay` allows to only dump picks
    and amplitdues which were created with delays no longer than the given
    value. Apply to ignore objects from non-real-time playbacks.

## 2023.116

### Changed

-   Extend travel-time tables `iasp91_scanloc.*` to 120 deg distance.
-   Add travel-time tables for SKKP, SKS, SS, ScS phases.

## 2023.115

### Added

-   dump_picks has received the new command-line option `--end` to be
    consistent with other modules.

## 2023.087

### Changed

-   Add `association.maxPResidual` and `association.maxSResidual` to maximum
    time window for associating picks at maximum distance defined by
    `association.maxDist`. This may increase the amount of picks available for
    association.
-   Add more information to debug output especially during phase association.

## 2023.011

### Added

-   Provide more precise estimate of `clusterSearch.maxPickDelay` for tuning
    when using `--cluster-search-log-file`.
-   Add new configuration parameter `buffer.ignorePickByStream` and command-
    line option `--ignore-picks-stream` for ignoring picks by stream ID.

### Changed

-   Equally apply pick filtering to processing in real time and in XML playbacks.
-   Rename the configuration parameter `clusterSearch.ignorePicks` to
    `clusterSearch.ignoreTimeDifference`. `clusterSearch.ignorePicks` is
    deprecated.
-   Apply `clusterSearch.ignoreTimeDifference` also to picks with phase type
    'Is'.
-   Update cluster reference time based on configuration of
    `clusterSearch.minSize` and `association.minPhase` if
    `clusterSearch.referenceTimeMode` = 'MaxPickDelay'. Before, only
    `clusterSearch.minSize` was considered.

## 2023.004

### Added

-   Allow configuring the type of phase picks considered for clustering by new
    configuration parameter `clusterSearch.phaseType`.

## 2022-08-23

### Added

-   The new configuration parameter `buffer.originStatusIgnore` allows ignoring
    external origins based on origin evaluation status.

### Changed

-   Increase fallback slowness for P and S waves to 25 and 40 s/deg, respectively,
    defining time windows for searching for picks to be associated. The values
    only apply when the travel-time interface does not provide travel times at
    the maximum epicentral distance configured by `association.maxDist` seen
    from latitude=longitude=depth = 0.

## 2022-07-22

### Important

-   The configuration parameter `ignoreOrigins` has been renamed to
    `buffer.ignoreOrigins` for better consistency with other buffer parameters.
    `ignoreOrigins` is still considered but a warning is issued when found.
    `buffer.ignoreOrigins` overrides `ignoreOrigins`.

### Added

-   The new configuration parameter `buffer.originAuthorWhiteList` allows
    filtering of external origins by a list of author names. When set, other
    origins are ignored. The parameter simplifies configuring systems with other
    locator module like screloc in the loop. It allows to exclude origins from
    these modules to be treated by scanloc. In a redundant system, processing of
    origins received from a secondary system can be avoided.
-   More examples in documentation with more explanations of the timing
    in playbacks.

## 2022-05-31

### Changed

-   Use station elevation for travel time computation. If the station elevation
    is not available, a value of zero is assumed. Note, neither LOCSAT nor
    libtau currently consider station elevations for providing travel times via
    the travel-time interface.

## 2022-03-29

### Added

-   Do not accept picks when inventory misses sensorLocation coordinates.
-   Apply rigorous RMS checks.

## 2022-03-18

### Changed

-   Update documentation of S-phase picker and debugger.

## 2022-03-14

### Changed

-   Optimize cluster search.

## 2022-03-11

### Changed

-   Update documentation.
-   Update command-line help (`-h`).
-   Minor optimizations.

## 2022-03-09

### Fixed

-   Process picks and origins without evaluation mode like automatic ones and
    do not shut down.

## 2022-02-14

### Changed

-   Improve origin relocation.
-   Improve origins quality checks.
-   Update documentation.
-   Update auxiliary scripts: playback_picks, dump_picks.

## 2022-01-02

### Fixed

-   Correct typos in documentation.
-   Initialize variables in dump_picks script.

## 2021-12-15

### Added

-   dump_picks:

    -   The new command-line option `--net-sta` allows filtering by
        network or by network and station code
    -   The command-line option `--author` is also applied to filter amplitudes.

## 2021-11-23

### Added

-   playback_picks: The new command-line option `--mode` allows adding a constant
    number of seconds to pick, creation and amplitude reference times when sending
    to the messaging for mimicking real-time playbacks at current time.

## 2021-11-10

### Added

-   The command-line option `--filter-pick-author` provides filtering of picks by
    author. Then only picks created by the given author are considered. The
    options allows specific tuning of scanloc based on picks from different
    picker modules where only picks from one picker should be used e.g. in a
    pipeline.

### Changed

-   New layout for documentation

## 2021-10-27

### Added

-   Picks with evaluation status 'rejected' are ignored. For considering
    rejected picks use the command-line option `--allow-rejected-picks`.

## 2021-10-25

### Changed

-   Clean up source code.

## 2021-09-22

### Added

-   Log pick author name in pick processing in debug output.

## 2021-09-17

### Fixed

-   With the configuration parameter `locator.fixDepth` the depth is only fixed
    to `defaultDepth` if previous attempts to locate fail. The depth is not fixed
    in general.
-   Improved debug logging of locator actions.

## 2021-09-14

### Fixed

-   Origin relocation after arrival removal due to max residual check
-   The dump_picks script writes picks to XML file with option `-o`.

## 2021-09-06

### Added

-   Before associating a new manual S-pick to an origin, an S pick with the same
    station-location is removed from the origin avoiding multiple S picks from the
    same station-location.

## 2021-09-03

### Changed

-   Update the documentation of cluster reference time.
-   Arrange configuration parameters in scconfig in more logical order.

## 2021-09-01

### Added

-   The timing section of the documentation now explains the cluster reference time
-   The new configuration parameter `clusterSearch.reference` allows to delay
    updating the cluster reference time until sufficiently new picks are available
    for forming new cluster. The option is relevant if only very few stations with
    significantly different data delay provide the picks.
-   The command-line help provides the synopsis and examples.

## 2021-08-21

### Added

-   Send a journal entry if the origin status is set to track the history.

## 2021-08-21

### Added

-   Add option `buffer.ignoreManualOrigins` to ignore manual origins in real time
    and XML playbacks.
    Default: true, manual origins will be ignored.
    The option prevents scanloc from relocating origins with mode manual, typically
    by generated by an operator with scolv.
-   Consider option `ignoreOrigins` also in XML playbacks.
-   Describe the status of origins in documentation.

## 2021-06-28

### Changed

-   Add compatibility of script `playback_picks` for Python3.
-   Adjust debug output of origin residual check.

## 2021-06-23

### Added

-   New command line option `--timing`. The option sets the timing
    reference in offline processing mode. Available options are:
    pickTime or creationTime. Default is pickTime. The following example
    sets the reference time to creationTime.

    ```bash
    --timing creationTime
    ```

## 2021-06-16

### Added

-   New command line option `--final-only` which can be used in offline
    processing mode to limit the result set to final origins only.

## 2021-04-22

### Fixed

-   Ignore picks without phase hint, do not crash.

## 2021-01-22

### Added

-   In ep playbacks the list of origins in command line output also shows
    corresponding event index.
-   A warning is issued if the number of buffered origins reaches the configured
    maximum

### Changed

-   Update documentation.

## 2020-09-16

### Added

-   In ep playbacks the list of origins in command line output also shows the RMS
    of the origin.

## 2020-09-14

### Added

-   When creating and relocating a new origin the depth type is written to the
    origin. While normally relocated origins receive the depth type
    "from location", origins with fixed depth receive "operator assigned".
-   Fix Python3 compatibility of dump_picks and playback_picks. On SeisComP3
    systems with release jakarta-2018.327.p23 and older generate a link to the
    Python interpreter must be created. The exact version depends on your
    SeisComP3 installation. Example:

    ```bash
    cd $SEISCOMP_ROOT/bin/
    version=`ldd $SEISCOMP_ROOT/lib/python/seiscomp3/_Core.so |\
             sgrep libpython | cut -c 11`
    ln -s /usr/bin/python$version seiscomp-python
    ```

## 2020-09-11

### Added

-   scanloc provides the densely sampled travel-time tables `iasp91_scanloc.*`
    based on the iasp91 model. The considered velocity model has been added in
    `iasp91_scanloc.tvel`.

## 2020-08-14

### Added

-   The dump_picks script only dumped picks for which the corresponding stream was
    found in the inventory. The restriction has been removed and all picks are dumped.
    Use the new option --check-inventory to get the old behaviour.
-   The new options `--hours` and `--start` in dump_picks set the start time to
    search for picks in alternative ways overriding `--time-window`:
    -   `--hours`: search the given hours back in time from now.
    -   `--start`: search with an explicit start time.

## 2020-05-18

### Fixed

-   Make sure that the preferred origin has been sent before the origin
    will be removed from cache.

## Changed

-   Make parameter `publication.wakeUpInterval` configurable in scconfig
-   Set the default back value `publication.intervalTimeSlope` = 0.5 as the
    missing of last origins has been resolved. Compare with changes on 2020-03-26.

## 2020-05-08

### Changed

-   Make code compatible with Ubuntu 20.04.

## 2020-05-05

### Fixed

-   Fixes a problem that was introduced with the last release. If the parameter
    `score.weights.increaseManual` is enabled and the pick evaluation mode is not
    set scanloc crashes.

## 2020-03-27

### Added

-   Add configuration parameter `score.weights.increaseManual` to increase the
    score weight of manual picks by a factor of 1.0001. This gives higher priority
    to manual picks than to automatic ones. In case manual and automatic picks
    co-exist for the same event and could be associated manual ones may be
    preferred if the solution score is otherwise the same.

## 2020-03-26

### Added

-   Show the associator and locator configuration in debug output.

### Changed

-   Set the default value `publication.intervalTimeSlope = 0` in order not to miss
    any origin.

## 2020-03-06

### Changed

-   Provide Python3 support for dump_picks and playback_picks.

## 2020-02-26

### Changed

-   Improved documentation.

## 2020-02-03

### Fixed

-   scanloc stops processing after an exception of type `TimeSpan::operator=(): double
    doesn't fit into int`. The exception occurred when a travel time table was not
    available for a specific phase type.

## 2019-12-02

### Changed

-   Adjusted the documentation of the the S-phase picker.

## 2019-11-26

### Changed

-   Improved association of P phases.

## 2019-10-17

### Fixed

-   Corrected control of S-phase association by association.maxSResidual. The
    parameter was not completely considered before.

## 2019-09-16

### Fixed

-   Corrected phase association of P phases which was unreliable and mostly
    supported by clustering requiring larger values for `maxPickDelay` and
    `maxSearchDist`. Both parameters can now be better optimized resulting in
    significant speed up of the clustering.
-   Optimized check of `minScore` before publishing origins. Now, more origins
    are kept in the internal buffer for associating. As are result more previously
    unassociated phases are now associated.

### Changed

-   Replaced the parameter `association.minScore` by `association.minPhase`. Now,
    the number of phases is used instead of the score to trigger phase
    association. Preliminary origins with low score can become regular origins
    when improved by phase association.
-   Adjusted the documentation, increased the readability of configuration
    parameters: adjust order and tool tips.

### Added

-   When a cluster is found it is relocated and additional phases are added.
    Unstable locations from relocation based on few phases may prevent
    association. Therefore, a second step is added where additional phases are
    added before relocation. The solutions are compared based on the score. The
    best solution is considered.
-   Added `association.maxPResidual` and `association.maxSResidual` to control
    association of picks from P and S phases. `association.maxResidual` serves as
    a final check of all station residuals.
-   `association.minPhase` replacing `association.minScore`. See above.

## 2019-09-04

### Fixed

-   Fixed the options `-a` and `-m` in the dump_picks script.

## 2019-08-29

### Added

-   We have set timesUsed = true for arrivals in preliminary origins. When sending
    preliminary origins the pick times can therefore now be used for relocating the
    preliminary origins from scanloc without modification in scolv or screloc.

## 2019-08-21

### Added

-   The default travel time table of SeisComP for LocSAT provide the times in
    intervals of 1 degree epicentral distance. Thus the curvature of the
    travel-time curve at closer distance is not well imaged potentially resulting
    in wrong locations or missing event solutions. Therefore, the LocSAT tables,
    iasp91_scanloc.*, based on the IASP91 model with higher spacial sampling are
    added. Configuration example for associating and locating:

    ```
    association.table = iasp91_scanloc
    locator.profile = iasp91_scanloc
    ```

## 2019-05-15

### Added

-   Do not try to associate picks to origins which were pick times are before origin
    time or after first arrival P and S times at `association.maxDist`.
    The `association.maxResidual` parameter is considered. This implementation
    potentially speeds up the pick association.

### Fixed

-   Include the split cluster in the check for the maximum number of cluster.
    Otherwise the total number of origins may be higher than `maxOrigins`
-   Event association check. It could happen that origins were ignored by
    the preferred origin score check causing more load.

## 2019-04-17

### Fixed

-   Segfault caused by missing null pointer check.

## 2019-04-10

### Changed

-   Code cleanup.

## 2019-03-06

### Changed

-   Adjust output when using the parameter `--cluster-search-log-file`. Consider
    also invalid clusters.

## 2019-03-06

### Added

-   Out the lower limit of the recommended `maxPickDelay` parameter when running
    scanloc with `--cluster-search-log-file`. The value can be considered for
    tuning the cluster search.

## 2019-02-28

### Changed

-   Do not trigger cluster search if the new pick will not be used.

## 2019-02-27

### Added

-   new command line option `author` to dump_picks script. With
    that option it is possible to filter the result pick set additionally
    by author.

## 2019-02-01

### Added

-   New command line option `--cluster-search-log-file`. Location of
    the cluster search log file used to store additional information e.g.
    the found clusters and split clusters.

## 2019-01-21

### Added

-   New config option `clusterSearch.regionFilter`. With this option
    enabled scanloc takes only picks for the cluster search into account
    those sensor locations are inside the defined region. The region is
    defined by latitude, longitude and a radius in km. By default the
    region filter is disabled.

## 2019-01-15

### Fixed

-   scanloc locator bug. In case of the initial relocation attempt fails
    the algorithm tries to relocate the origin by selecting the first pick.
    This stage of the relocation process always failed.

## 2018-09-10

### Added

-   Add the documentation of the parameters `association.maxDist` and
    `association.stationConfig`. Both parameters control the epicentral distances
    within which stations can be considered for providing picks to association.

## 2018-07-09

### Changed

-   When reading a station configuration file trailing spaces and line breaks
    are removed.

## 2018-06-11

### Changed

-   When associating P picks scanloc checks if the corresponding station location
    already contributes a P pick on the same location and does not accept
    more picks on the same location. Before the change, the test was restricted
    to the streamID. However, other picker modules or operators may pick on
    other streams. Therefore, the locationID instead of the streamID
    is tested.

## 2018-04-17

### Added

-   New config option `locator.fixDepth`. Scanloc relocates origins in
    several stages. With this option enabled the relocation process forces the
    depth to default value in case of all previous relocation attempts fail.

## 2018-04-05

### Added

-   In playback mode (`--ep` option), the timing of scanloc origins is obscured
    since usually many more origins than in real time are available within
    short time intervals. Therefore the publication parameters are now automatically
    set to zero and the available origins are published immediately as soon as
    they are available. Otherwise origins may be lost.

## 2018-04-03

### Fixed

-   Optimized distance calculation in cluster search. Re-tuning of the cluster
    search may significantly increase the performance.

## 2018-03-15

### Fixed

-   The parameter `association.maxDist` is given in units of km but it
    was compared with epicentral distance in degree. The conflict is fixed
    and the parameter is now used consistently in units of km.

## 2018-02-01

### Added

-   Mark core points in cluster results.

## 2018-01-31

### Added

-   New config parameter `clusterSearch.checkOrigins`. In case of a
    cluster contains picks with the same stream ID the cluster is split
    into combinations. For each combination scanloc creates an origin which
    might not fulfill the cluster search criteria anymore. Enable this config
    option to skip these origins. This feature is disabled by default.

## 2018-01-19

### Changed

-   The S-AIC picker outputs more debug information with respect to
    processing. This only affects the saic plugin. The plugin version
    was increased to 0.5. In particular, the log prefix `[S-AIC]`
    was removed and the log component was changed from `SAICPicker`
    to `S-AIC`. If component logging is enabled in any SC3 application,
    then this component will be used as log prefix.

## 2018-01-15

### Added

-   More unit tests used for internal package build only.

## 2017-11-15

### Added

-   Added `--db-disable` flag to disable database usage.

## 2017-09-25

### Fixed

-   Bug in station configuration file reading when configured in
    `association.stationConfig`.

## 2017-09-06

### Fixed

-   Cluster search.

## 2017-09-04

### Fixed

-   Bug in close pick detection.

## 2017-08-28

### Changed

-   Improve cluster search performance.

## 2017-08-08

### Fixed

-   `ignorePicks` configuration parameter. Floating point numbers were not
    handled properly.

## 2017-07-03

### Fixed

-   Enhance debug output.

## 2017-06-28

### Fixed

-   Avoid duplicates in cluster search.

## 2017-06-20

### Fixed

-   Flush origin outbox on shutdown.

## 2017-06-15

### Fixed

-   Cluster search reference time calculation. Instead of using the pick with the
    latest pick time the algorithm used always the first pick as cluster reference
    time.

## 2017-06-09

### Fixed

-   Cluster search

## 2017-05-15

### Added

-   station configuration support by configuration of `association.stationConfig`
    like in scautoloc.

## 2017-03-22

### Added

-   Added object flow to soh log

## 2017-03-20

### Fixed

-   Fixed station epoch cache lookup.

## 2017-03-12

### Added

-   Association of phases with zero weight (extended feature requiring specific
    license).

## 2017-03-09

### Fixed

-   Message group handling.

## 2017-02-27

### Added

-   Default values for options in dump_picks
-   Add amplitudes to dump_picks and playback_picks

## 2017-02-24

### Added

-   The script playback_picks supports different pipelines.

## 2017-02-20

### Removed

-   Region check and rect filter.

## 2017-02-16

### Added

-   Configurable locator interface and traveltime table.

## 2017-02-16

### Fixed

-   New command line option `--locator-list`

## 2017-02-09

### Added

-   Support to list registered locators.

## 2017-01-12

### Removed

-   Removed region and rect filter from XML description and documentation.
    This filter will be removed in the near future.

## 2016-12-16

### Fixed

-   Region filter test.

## 2016-06-31

### Added

-   New configuration parameter `clusterSearch.regions` which can be used to
    specify non-rectangular region filters.

## 2016-06-08

### Fixed

-   Sending of origins in offline mode.

## 2016-03-10

### Fixed

-   Support association of manual S picks with no reference P pick.

## 2016-03-10

### Fixed

-   Use database even for `--ep` to read inventory unless `--inventory-db`.

## 2016-03-09

### Added

-   New configuration parameter `clusterSearch.maxPickDelay` which can be used
    to specify the maximum difference between pick times and first pick time
    taken into account by the clustersearch. By default all picks are taken
    into account.

## 2016-01-07

### Added

-   Remove sorted picks with too large residual, starting with picks with
    largest residual, relocate and evaluate residuals after each removal.

## 2015-12-22

### Fixes

-   Use correct distance calculation on sphere.

## 2015-12-18

### Fixed

-   Dump_picks uses correct column names if a prefix is configured e.g.
    with PostgreSQL.

## 2015-12-01

### Fixed

-   Reject origins with depths greater than ignore depth.

### Added

-   Check for outlier arrivals one by one and relocated after every removal.
-   Repeat outlier arrival check until remainders are kept.
-   Check depth and score after outlier removal.

## 2015-08-25

### Added

-   Offline and online processing examples to documentation.

## 2015-07-10

### Added

-   Fixed cluster search origin check. Limits the number of origins to the
    configured threshold.

## 2015-05-26

### Added

-   Offline processing of events.

## 2015-04-23

### Fixed

-   Fixed crash when pick could not been loaded from database.

## 2015-03-30

### Fixed

-   Incoming origins will be checked for double assigned picks.

## 2015-02-24

### Added

-   New configuration parameter `clusterSearch.maxOrigins`.
