PRESTo User Manual

for PRESTo v. 1.0

by Luca Elia

e-mail bug-report e-mail


What is PRESTo?

PRESTo is a free and open source software platform for Earthquake Early Warning (EEW)(external link) that integrates recent algorithms for real-time, rapid earthquake location, magnitude estimation and damage assessment, into an easily configurable and portable package. It is under active experimentation in Southern Italy on the Irpinia Seismic Network (ISNet)(external link) (Satriano, Elia et al. [1]), and in several other local and national seismic networks worldwide.

The software is mainly targeted at: managers of seismic networks, civil protections, owners of seismic sensors, companies providing seismic sensors and data-loggers and scientists in the field of seismology and earthquake engineering who are interested in characterizing within seconds (if supported by an adequate network infrastructure) the damaging potential of an occurring earthquake, with the possibility to provide personalized alarm messages to any number of end-users.

PRESTo in fact continually processes the real-time streams of ground motion recorded by the seismic stations (e.g. three-component acceleration or velocity data) for P-waves arrival detection. These data are normally streamed in real-time from the stations using a SeisComP(external link) server via the SeedLink(external link) protocol, but they can also be read from files (in SAC(external link) format), in order to provide a simulation mode whereby waveforms of past events can be played back into the system. While a (real or simulated) event is occurring, the software promptly performs event detection and provides location and magnitude estimates as well as shaking predictions at target sites.

The earthquake location is obtained by an evolutionary, real-time probabilistic approach based on an equal differential time formulation. At each time step, the algorithm uses information from both triggered and not-yet-triggered stations. Magnitude estimation exploits empirical relationships that correlate this parameter to the filtered peak displacement (Pd) measured over the first 2-4 s of P- and S-waves signal. Finally, peak ground-motion parameters at remote sites can be estimated through ground motion prediction equations once location and magnitude are available.

Alarm messages containing the evolutionary estimates of source and target parameters, sent over the internet, can thus reach vulnerable infrastructures at a distance before the destructive waves, enabling the initiation of automatic safety procedures.

This manual provides an end-user guide to the deployment of PRESTo in a seismic network and to its configuration, as well as a description of the algorithms currently implemented, which are summarized in Table 1.
Table 1 – Algorithms implemented in the current version of PRESTo. The system is under active testing and development, so this is subject to change as new versions are made available
FilterPicker: designed so that it operates stably on continuous, real-time, broad-band signals, avoids excessive picking during large events. (Lomax A., [6])
LocationRTLoc: evolutionary location technique based on an equal differential time (EDT) formulation and a probabilistic approach. Both triggered and not-yet-triggered stations are used at each time step. (Satriano et al., [6,7])
MagnitudeRTMag: magnitude estimation based on short windows of signal (e.g. 2/4 seconds), following the automatically picked P-waves arrival and predicted S-waves arrival. (Lancieri et al., [5])
Ground ShakingGMPE: suitable Ground Motion Prediction Equations can be specified by the end user, as formulas in text files. They are evaluated at run-time for estimating the peak acceleration and peak velocity at target sites, based on magnitude and location. (e.g. Akkar and Bommer, [3])

About Us

RISSC-Lab(external link) is a laboratory comprised of researchers from the Department of Physics of the University "Federico II" of Naples (Italy), and AMRA(external link) s.c.a.r.l. RISSC-Lab is coordinated by Aldo Zollo(external link), full professor of Seismology.

RISSC-Lab carries out research and technological development activities in theoretical and experimental seismology, and is financed through national and international scientific projects.
AMRA s.c.a.r.l., Center of Competence in the field of Analysis and Monitoring of Environmental Risk, is a permanent research enterprise devoted to developing innovative methodologies to approach environmental problems.


The research work behind PRESTo has been supported by the Italian DPC-S5 project. Part of the work has been carried out within the SAFER project (Seismic Early Warning for Europe), founded by the European Community via the Sixth Framework Program for Research. Current development support is provided by Early Warning related Work Packages of these projects: NERA(external link) (Network of European Research Infrastructures for Earthquake Risk Assessment and Mitigation, 2010-2014) and REAKT(external link) (Strategies and Tools for Real-Time Earthquake Risk Reduction, 2011-2014). Further development specifically aimed at applications to nation-wide networks has been funded by KIGAM(external link) (Korean Institute of Geoscience and Mineral Resources).

Copyright Notice

PRESTo EWS is free software. Program and source code are distributed under the terms of the GNU General Public License, version 2 (GPLv2).



PRESTo is written in C++, a programming language that provides optimal speed performance (a key element for an early warning system) without sacrificing the code expressiveness, thanks to its object-oriented nature. The code is easily portable to different operating systems, thanks to the SDL library(external link) (Simple DirectMedia Layer), used for abstracting low-level operations, and the OpenGL(external link) libraries, a de facto standard for scientific and interactive visualization. Executables are currently available for Windows, Linux (Ubuntu) and Mac OS X. The software is organized into a main thread that implements the core processing procedures activated during an event, and some additional processing threads that handle the continuous tasks, such as waveforms acquisition, using the SeedLink(external link) protocol, and their processing.

Running PRESTo

Quick Start Guide

You’ll find more detailed instruction below. Anyway, for reference, here’s a quick round-down of the steps needed to run your first PRESTo simulation as quickly as possible, under Windows (Linux and Mac are similar):

  1. Extract the PRESTo distribution archive in its own directory, e.g. C:\PRESTo
  2. The archive includes an example earthquake occurred in ISNet. The waveforms for this event are stored in C:\PRESTo\data\ISNet\example, along with the "real" source parameters (example_real.txt with location and magnitude from the ISNet Bulletin). To simulate the earthquake open a command prompt, and type:
    C:\> cd C:\PRESTo
    C:\PRESTo> PRESTo.exe ISNet example
  3. A window should open up, showing the waveforms streaming from every station (vertical components). Eventually the earthquake should be detected and processed. PRESTo can then be terminated by closing its window, or pressing Shift-ESC.
  4. The results of the simulation will be found in the C:\PRESTo\data\ISNet\example directory:
    • example.log - detailed log of PRESTo running the simulation
    • example_0.mail.log - excerpt of the above log just for the earthquake processing (0 is the earthquake ID)
    • example_0.kml - earthquake animation viewable with e.g. Google Earth(external link)
    • example_0.png - screenshot of PRESTo at the end of the earthquake processing

To configure PRESTo for your seismic network and run your first simulation using the waveforms recorded at your stations:

  1. Open the PRESTo\data directory.
  2. Copy the ISNet directory to network-name, where network-name is a name of your choice for the seismic network (with no spaces), and open the network-name directory.
  3. Create 3D travel-time grids for P- and S-waves at all your stations and targets, using the NonLinLoc(external link) software. This will require their coordinates and a suitable 1D velocity model. The file names will be: layer.<P|S>.<station>.time.<hdr|buf>. Place them in the time directory (delete the ISNet ones first).
  4. Edit the list of location grids for all stations and targets at the top of rtloc.txt.
  5. Place the SAC files in earthquake-name, where earthquake-name is a name of your choice identifying the event (with no spaces). The filename extensions must be ".sac" (or ".SAC"). The station name is read from the header (KSTNM). The component is assigned according to the last letter of the component name in the header (KCMPNM) i.e. "Z", "N" or "E". Otherwise the component name is guessed from the filename (i.e. ".Z.", ".U.", ".UD.", ".0." in the filename means vertical; ".N.", ".NS.", ".1." means North-South; and ".E.", ".EW.", ".2." means East-West).
  6. Edit the details of the stations in stations.txt. The conversion factor from counts to m/s2 (or m/s for velocimeters) is: data-logger constant/sensor constant. The sensor constant converts from e.g. acceleration to Volts (V ⋅ s2/m), and the data-logger constant converts from Volts to counts (V/count). If the SAC files are already in m/s2 or m/s rather than counts, use 1 for both constants. If they are in cm/s2 or cm/s, use 1 for the data-logger constant and 100 for the sensor constant.
  7. Launch PRESTo (PRESTo.exe network-name earthquake-name). It should process the event, or a dialog box will pop-up pointing out a configuration error to fix. In that case edit the configuration files as appropriate and re-launch the application for the new parameters to take effect.

Optionally, you can change the map background by replacing map.png with an image of the location grid you used. The exact longitude and latitude ranges are given in the log file, along with Google Maps links appropriate for your location grid.

The root directory (e.g. C:\PRESTo) contains the executable (PRESTo.exe) as well as a few directories, such as data (for user provided data) and config (for user provided parameters). The following chapters discuss how to configure the software. To run the program open a command prompt and use the following syntax:

      C:\PRESTo> PRESTo.exe network-name [earthquake-name]

Network-name is the name of the network, the description of which must be found in a data\network-name directory. Earthquake-name is the optional earthquake to be simulated, using SAC files from directory data\network-name\earthquake-name.

Simulation Mode

When an earthquake name is provided as second parameter, e.g.:

      C:\PRESTo> PRESTo.exe ISNet example

PRESTo will run in simulation mode, and will perform the playback of all the SAC files it finds in data\network-name\earthquake-name (data\ISNet\example in this case). It will open up a graphical window like the one below:

PRESTo screenshot - L'Aquila 2009

Figure 1 – Screenshot of PRESTo after playing back the waveforms recorded by the RAN network(external link) (National Accelerometric Network) during the L’Aquila main-shock (2009, central Italy).

A log file named data\network-name\earthquake-name\earthquake-name.log will be written. SAC files in the earthquake directory must have ".sac" (or ".SAC") extension. The station name is read from the header (KSTNM). The component is assigned according to the last letter of the component name in the header (KCMPNM), if it is either "Z", "N" or "E". Otherwise the component name is guessed from the filename (i.e. ".Z.", ".U.", ".UD.", ".0." in the filename means vertical; ".N.", ".NS.", ".1." means North-South; and ".E.", ".EW.", ".2." means East-West). Make sure there is only one file per component per station, or PRESTo will complain about duplicate component.

Real-time mode

If no earthquake-name parameter is provided, for instance:

      C:\PRESTo> PRESTo.exe ISNet

PRESTo will run in real-time mode, streaming ground motion data from the internet via the SeedLink protocol, using the stations specified in the network description. It will open up a graphical window and start a log file in data\network-name\date_time_realtime.log, where date_time is the timestamp at which the program was started.

User interaction

Click on an element in the window (waveforms, map, magnitude graph) to zoom it in/out. Click on the "m/sn" button to toggle the seismogram units between counts and acceleration (or velocity). In playback mode only, click on "Pause" to pause the simulated time, or on "Restart" to restart the simulation. In addition the following keys can be used:

Shift-ESCTerminate the program (same as closing the window)
PPlayback only: toggle pause (same as pressing the on-screen button). Shift-P (or Ctrl-P) will advance simulated time in half second steps
RPlayback only: restart simulation
F1Toggle display of: percent of frame time spent to draw the screen, frames-per-second (should be ~30), window size. Useful to check if the graphics card and CPU performance are adequate
F2 / Print Scr.Save a screen shot in PNG format (filename: screenshot_<num>.png where <num> is a progressive number). This is saved in the network directory in real-time mode or in the earthquake directory if in playback mode
F10Screen refresh and event declaration/processing run at 30 Hz by default. This key toggles the speed limit on/off (Note: CPU and GPU usage will max-out if not limited!)


A detailed log of the inner workings of PRESTo is saved in the network directory (or the earthquake directory in simulation mode).

Additionally, at the end of any processed earthquake (either real-time detected or simulated), a few summary files are saved: a screenshot, a KML animation (viewable with Google Earth(external link), for instance), an excerpt of the log pertaining only to the earthquake, further stripped-down to be less verbose and suitable to be attached to an e-mail. The logs can be easily parsed with something like AWK(external link). Under Windows the best option to obtain AWK is probably to install Cygwin(external link).

In simulation mode it is also optionally possible to save a screenshot every second in order to assemble a video of the whole simulation. Using an external image manipulation tool, for instance convert (part of ImageMagick), the animation can be produced giving the following command from within the earthquake directory: convert -delay 100 movie_*.png movie.gif.
The suggested output format is GIF, as it retains much of the original detail, and can be shown in any web browser.

For added flexibility, users can provide a procedure (e.g. a batch file under Windows, a shell script under Linux/Mac/Cygwin) that will be launched just as PRESTo is done processing any event, in real-time mode only, in order to perform additional custom actions per earthquake. The user provided executable must be placed in eventpostproc\eventpostproc.bat ( under Linux/Mac) and is passed as first parameter the "handle" of the event (i.e. data\network-name\<origin_time>_<quake_ID>). The handle can be transformed in the path of the log for this earthquake by appending ".mail.log" or to that of the full log by appending ".log" (likewise: ".kml" for the KML animation, and ".png" for the screenshot). The eventpostproc procedure can then parse the logs to extract useful data, such as the last estimates of source parameters, and to perform some further actions such as sending an e-mail and SMS, or to insert the source parameters in a bulletin/database.

In real-time mode health state messages and alarms can be sent over the internet to end-users. Health state messages are just very short "heart-beat" message sent regularly to inform the receiving end that PRESTo is up and running, while alarm messages can be of two kinds:

Configuring PRESTo

PRESTo is configured through a series of text files. In these files, lines starting with a ‘#’ character are treated as comments (ignored). Moreover, whenever a true/false value is expected, 0 must be used for false and 1 (or any non-zero number) for true. In general you may want to use the supplied template configuration files as a starting point. They contain the format of the data to enter as a comment at the top of the file and possibly a few example items.

Window/Sound configuration in config\config.txt

This file contains a few parameters that affect just some user-facing aspects of PRESTo, not its Early Warning processing. You’ll rarely need to change it.

Graphics / SoundDefaultDescription
PRESTo window width and height in pixels. The window must have a 4:3 aspect ratio (i.e. width/height = 1.33333). Use 0 for automatic window size (90% of the desktop)
fullscreen0 (false)Enable full-screen mode
vsync0 (false)Enable vertical syncing in full-screen mode (smoother graphics, but may adversely affect performance)
sound0 (false)Enable sound during an earthquake (siren, earthquake shaking at the target)

Network description in data\network-name

This directory must contain the description of the network and the parameters that depend on network topology and geographic region. The term network here is used loosely, as in general for large networks you may want to create one such directory for each geographic region in the epicentral zone of an earthquake you are going to simulate. This network information must be supplied by the user through the following files:

File NameDescription
time\ (directory)P- and S-waves travel-time grids used for estimating earthquake location and arrival times at targets. These are binary files that must be generated with the NonLinLoc software and copied here. Note: only full 3D grids are supported, even if using a 1D velocity model (as is commonly the case)
rtloc.txtList of travel-times grids to load, one grid per line:
  • STA station-name
The list must include all stations as well as targets to use. Each entry loads the corresponding travel-times grids from time directory. This file also contains, at the bottom, a few parameters controlling the earthquake location algorithm (RTLoc, see details)
stations.txtList of the stations to use and their descriptions. Each line contains (separated by spaces):
  • station name, sensor type (ACC or VEL), clipping threshold (counts), data-logger constant (V/count), sensor constant (e.g. V ⋅ s2/m), SeedLink IP or hostname, SeedLink network code, SeedLink channels (e.g. HNZ HNN HNE, or 01HNZ if using 01 as location code)
If using velocimeters, they should be broad-band instruments, capable of faithfully recording the low frequencies of moderate-to-large earthquakes. Clipping should be configured depending on the data-logger sensibility (e.g. ~7e6 counts for 24-bit data loggers = 80% of (2^24)/2).

Note: only stations listed in rtloc.txt too are allowed here (i.e. whose grid has been loaded).
seedlink.txtList of stations to stream data from via SeedLink, one per line:
  • station-name
Only read in real-time mode. This file is mainly useful to limit the real-time data streaming to a subset of all the stations for whatever reason (bandwidth, data quality or sensor type considerations)
targets.txtList of target sites to send alarms to (see details), one per line. Each line contains (separated by spaces):
  • "full name", travel-times grid name, show on map (1=true, 0=false), IP or hostname for alarm delivery ( to disable), UDP port
The first target in the list is supposed to be the most prominent, i.e. it will be highlighted in yellow/red on the map during an earthquake
broker.txtServer for the dissemination of broadcast alarms (see details). One line containing (separated by spaces):
  • IP or hostname ( to disable), TCP port, "destination" (e.g. /topic/presto), "username", "password"
rtmag.txtRegression law coefficients and time windows used for magnitude estimation (RTMag, see details). The exact regression law used can be found in the logs, and has the form:
  • M = (log10(Pd) – A – C ⋅ log10⁡(R/10))/B
where Pd is the peak displacement (m) in the time window and R is the hypocentral distance in km. Each line contains (separated by spaces):
  • time window (e.g. 2P for P-waves, 2 seconds), components to use (e.g Z or ZNE for all), A,dA, B,dB, C,dC, Standard error, saturation magnitude
At this time it is not possible for users to specify a different equation, just different coefficients. The Gutenberg-Ricther law is used as a-priori information on magnitude, its β coefficient is specified as:
  • GR <beta>
pga.txt, pgv.txtFormulas to estimate the peak ground motion at targets (PGA, PGV). See details. Each file contains two formulas separated by a newline. The first estimates the logarithm of the peak ground motion at the target (cm/s for pga.txt, cm/s2 for pgv.txt); the second the logarithm of its uncertainty. The formulas will use the PRESTo estimates as inputs: earthquake magnitude (Mag), epicentral distance (R_epi) and depth (Dep).
  • log10_pgx(Mag, R_epi, Dep)
  • err_log10_pgx(Mag, R_epi, Dep)
The formulas can contain C language conditions of the form:
  • (Mag > 4) ? <formula_high_mag> : <formula_low_mag>
to use different laws according to magnitude (or some other input parameter)
map.pngAn image of the area covered by the chosen location grid, in PNG format, used to draw the map. The exact longitude and latitude ranges needed are provided in the top part of the logs, along with a Google Maps link. Easiest option: open the Google link in a browser; save the image as "map.png" in the network directory; crop the region outside the black rectangle with an image manipulation program
quake_id.txtOnly read in real-time mode, it contains just an integer number: the earthquake ID (progressive number) to be associated to the next earthquake. In simulation mode the starting ID is always 0

Early Warning parameters in config\params.txt

This single file collects all the parameters affecting the various Early Warning algorithms: P-waves picking, event declaration (binding), earthquake location, magnitude estimation, alarms to remote targets. You’ll also find a few non-critical parameters here, which just affect the way information is displayed on screen. In addition it is possible to activate some debugging features of PRESTo, which are usually best left to simulations only (in some cases they are disabled automatically in real-time mode). The general idea is for parameters in these files to be somewhat independent of the seismic network being used, with network specific parameters being specified in the network directory files. On the other hand some parameters, such as those controlling the event declaration (picks binding) do actually need to be tweaked on a per-network basis do account for the topology of the stations, so bear that in mind. This is a list of all the currently supported parameters grouped by area of influence:

Simulation / DebuggingDefaultDescription
simulation_speed1.0Simulation speed-up factor compared to real time (e.g. 0.5 is half speed, 2.0 is twice as fast)
simulation_write_displacement0 (false)For debugging: write the computed displacement waveforms in .sg2 format (SeisGram2K, textual), for all time windows used to find a peak displacement
simulation_movie_period0.0If non-zero, save a screenshot every this many seconds (file name: movie_NUM.png where NUM is a progressive number).
The screenshots can later be joined together to obtain an animation (using external tools).
Warning: generates large files continuously, keep the running times short!
If non-zero simulates random data transmission lags with this Gaussian mean and sigma (seconds)
debug_gaps_period0.0Insert gaps in the waveforms (holes in the data streams) every this many seconds, for debugging. Use 0 to disable
debug_gaps_duration0.0Duration of the gaps (seconds). Use 0 to disable
debug_save_rtloc0 (false)Save the location probability density grid for each location estimate (simulation mode only). Warning: generates many large files per earthquake!
debug_save_rtmag0 (false)Save the probability distribution of magnitude of every time window and station, for each magnitude estimate
display_heli_min_accel0.01Minimum full-scale acceleration (m/s2) to use in the auto-scale of on-screen accelerometric helicorders (i.e. high values will shrink noise to a flat line)
display_heli_min_vel0.001Minimum full-scale velocity (m/s) to use in the auto-scale of on-screen velocimetric helicorders (i.e. high values will shrink noise to a flat line)
display_heli_secs60.0On-screen helicorder duration (seconds)
display_heli_width0.55On-screen helicorder horizontal width (0.0-1.0 with 0.5 = half screen width). The remaining screen area is used for the map
display_heli_max_num100Maximum number of helicorders to show on-screen (N). Only the first N stations in seedlink.txt or the first N stations found in SAC files will be displayed. Useful when a large number of stations are used. Note that all stations will be used for Early Warning, regardless of this parameter
display_heli_lag_threshold10.0When |Timenow-Timelast_sample| is above this many seconds a station is declared lagging, i.e. yellow helicorder, ghosted out on the map. Note that this includes stations with timestamps in the future (GPS problems)
display_map_fixed_size1 (true)The on-screen map auto-zooms to include stations, targets and epicenters. 1 = Keep the aspect ratio of the map fixed (that of the location grid area); 0 = change aspect ratio depending on the elements to display
display_map_station_scale1.0Scale factor to adjust the default size of station icons on the map (as well as targets, quakes etc.). Useful for very dense or very sparse networks
display_real_quake1 (true)When simulating an earthquake, show on the map its real location (i.e. from a bulletin). This is read from a text-file in the earthquake directory, if present: <earthquake-name>_real.txt, containing: Latitude(°) Longitude(°) Depth(km) Magnitude
display_heli_show_mag1 (true)Show on each helicorder the magnitudes measured on each time window
Data Transmission [Seedlink]DefaultDescription
slink_timeout_secs60The SeedLink connection will be closed and re-opened after this many seconds with no data received
slink_delay_secs10Wait this many seconds to re-open the connection after the above timeout
slink_keepalive_secs0.0Send keep-alive packets every this many seconds
slink_log_verbosity0Verbosity level of the SeedLink log (filename: same as the main PRESTo log, but with ".err" extension instead of ".log"). 0=Normal, 1=Diagnostic messages too, 2+=Error messages too
latency_log_period_secs600Write in the main log the data latency statistics (min./avg./max. since the last measurement) for each data stream every this many seconds (0 to disable)
Waveform PreprocessingDefaultDescription
waveform_rmean_secs30After picking, remove from each 1-second of waveform the signal mean computed on this many previous seconds. The resulting waveform is the one displayed and used to measure peak displacements. Use 0 to disable
waveform_clipping_secs0If clipping is detected in a waveform, discard it for this many seconds (0 to disable). Clipping is declared when a sample has an absolute value, in counts, higher than the clipping threshold declared in stations.txt
waveform_min_snr5Minimum Signal-to-Noise Ratio (i.e. the ratio of the RMS measured after the phase arrival and the RMS measured before) to use a waveform for magnitude estimation (0 to disable).
FilterPicker [Picker]DefaultDescription
picker_filterWindow4.0How far back in seconds the previous samples are examined.
The filter window will be adjusted upwards to be an integer N power of 2 times the sample interval (deltaTime).
Then numRecursive = N + 1 "filter bands" are created. For each filter band n = 0,N the data samples are processed through a simple recursive filter backwards from the current sample, and picking statistics and characteristic function are generated.
Picks are generated based on the maximum of the characteristic function values over all filter bands relative to the threshold values threshold1 and threshold2
picker_longTermWindow10.0Long term window in seconds. It determines:
a stabilization delay time after the beginning of data; before this delay time picks will not be generated.
The decay constant of a simple recursive filter to accumulate/smooth all picking statistics and characteristic functions for all filter bands
picker_threshold18.0Threshold to trigger a pick event (potential pick). This threshold is reached when the (clipped) characteristic function for any filter band exceeds threshold1
picker_threshold28.0Threshold to declare a pick (pick will be accepted when tUpEvent reached).
This threshold is reached when the integral of the (clipped) characteristic function for any filter band over the window tUpEvent exceeds threshold2 * tUpEvent, i.e. the average (clipped) characteristic function over tUpEvent is greater than threshold2
picker_tUpEvent0.2Maximum time the integral of the (clipped) characteristic function is accumulated after threshold1 is reached (pick event triggered) to check for this integral exceeding threshold2 * tUpEvent (pick declared)
Event Declaration [Binder]DefaultDescription
3Minimum number of triggered stations in the coincidence time window to declare an event. This and the following parameters need to be tailored for the network topology (i.e. average inter-station distance, network size, seismogenic zone distance etc.)
2.0Duration of the coincidence time window (seconds)
15.0Duration of the association window (seconds): all picks after an event will be associated to the event if their time lies within this many seconds from the first associated pick
binder_quakes_separation30.0How many seconds should pass from the first pick of the previous event and the first pick of a new possible event. Below this threshold no new events are declared
binder_quakes_life40.0For how many seconds should the earthquake parameters be refined. After this many seconds the earthquake is no longer processed and source parameters estimates are considered "final"
Picks coincidence and association require the apparent velocities of the picks (measured from the first, earlier pick) to fall within this range of velocities (km/s), i.e. a range compatible with the propagation of P-waves. The lower bound should be higher than the S-waves velocity, the upper bound should be high enough to account for deep / external events (almost simultaneous arrival at distant stations)
30Average inter-station distance (km). Within this distance to the first pick of a quake, the apparent velocity checks are not enforced (e.g. the apparent velocity can be "infinite" near the epicenter)
120Picks more distant than this value (km) from the first pick of an earthquake will not be associated to it
Probabilistic Location [RTLoc]DefaultDescription
locate_period0.5Re-locate an event at least every this many seconds (even if no new picks have been received)
locate_force_sac0 (false)Force earthquake location to that read from the SAC headers (simulation mode only)
locate_force_lon-12345Force earthquake longitude (degrees, simulation mode only). Use -12345 to disable
locate_force_lat-12345Force earthquake latitude (degrees, simulation mode only). Use -12345 to disable
locate_force_dep-12345Force earthquake depth (km, simulation mode only). Use -12345 to disable
1 (true)Use the information that some stations have not triggered yet at each time step. Can improve the location when less picks are available
locate_ignore_error0 (false)Ignore the earthquake location uncertainty, treat it as zero (not shown on screen, does not affect magnitude uncertainty, etc.)
Magnitude Estimation [RTMag]DefaultDescription
magnitude_max_value8.0Maximum possible magnitude. By clipping the magnitude PDF distribution to this value, we avoid non-null probabilities for unreasonably high magnitudes. Especially when using short time windows to estimate Pd (in the first few seconds), when the PDF above high magnitudes is constant, due to saturation effect of the regression laws
magnitude_outlier_threshold3.5When computing the Bayesian magnitude, ignore outliers i.e. values measured by some stations in one of their time windows that diverge greatly from all of the other stations/time windows. Useful to reject very high values from a broken sensor, or very low values from a wrong pick. This parameter is the maximum acceptable modified Z-score (according to Iglewicz and Hoaglin, increases as the sample deviates from the median). Often set at 3.5 (0 to disable)
magnitude_low_fmin1.0Minimum frequency (Hz) of the band-pass filter applied after integration (low-magnitude events)
magnitude_low_fmax25.0Maximum frequency (Hz) of the band-pass filter applied after integration (low-magnitude events)
magnitude_high_threshold5.0Magnitude value above which we define the earthquake "high-magnitude". This is needed to choose the band-pass filter to apply after integration to measure the displacement
magnitude_high_fmin0.075Minimum frequency (Hz) of the band-pass filter applied on displacement (high-magnitude events)
magnitude_high_fmax3.0Maximum frequency (Hz) of the band-pass filter applied on displacement (high-magnitude events)
5.0Magnitude is estimated using the peak displacement over post-arrival time windows. To obtain a more accurate displacement, extend these time windows to this many seconds before the arrival. The peak is still searched on the non-extended windows though
magnitude_p_secs_short2.0Duration of the short P-waves time window (seconds)
magnitude_p_secs_long4.0Duration of the long P-waves time window (seconds)
magnitude_s_secs2.0Duration of the S-waves time window (seconds)
0 (false)1 = Do not discard P-waves time windows when they overlaps the S-waves time window
Alarms to Targets [Alarms]DefaultDescription
alarm_heartbeat_secs60.0Send a heart-beat message to targets (and brokers) every this many seconds
alarm_during_simulation0 (false)Send alarm messages even during a simulation (use only for testing!)
alarm_max_period1.0After this many seconds have elapsed from the previous alarm, send a new alarm even if source and target parameters did not change

Detailed Description of PRESTo

This chapter should reveal a few more details on the inner working of PRESTo, but it’s otherwise not strictly needed by end-users in order to install, configure and use the system.


Upon launch the application reads its configuration from config\config.txt and opens a window. The Early Warning parameters are read from config\params.txt. The description of the seismic network is read from the data\network-name directory. The travel-time grids specified in data\network-name\rtloc.txt are read from the data\network-name\time directory, to be used for the location of earthquakes and the lead-time calculation at targets. In simulation mode the SAC files from the user specified directory, i.e. data\network-name\earthquake-name, are read for play-back and logs are saved in the earthquake directory (i.e. data\network-name\earthquake-name\earthquake-name.log). In real time mode the data streams to the remote stations are opened, the main log is written in data\network-name\date_time_realtime.log while a SeedLink log is written in data\network-name\date_time_realtime.err.
Any error during this phase causes the program to abort after reporting the error in a dialog window.

Ground acceleration (or velocity) from three components is acquired from the list of stations specified in seedlink.txt (real-time mode), or rather from SAC files in the earthquake directory specified as second parameter (simulation mode). If some of the horizontal components are missing, PRESTo will still work and try to dynamically compensate for that during magnitude estimation by replicating the other horizontal component, if available, or even replacing both of them with the vertical component.
For each channel, a thread running concurrently with the rest of the program performs the following sequence of processing steps, potentially a hundred times a second:

Early Warning

The main thread, which runs in parallel with the acquisition threads, keeps a list of the last P-waves picks as well as detected earthquakes, in order to perform the Early Warning on more than one earthquake at once. It performs the following steps (30 times per second):

  1. The list of new, not-yet processed picks is updated (picks are produced by the acquisition threads)
  2. Each new pick is confronted with past recent picks:
    • The pick is associated to the latest earthquake if it lies in the corresponding association time window (i.e. within a few seconds from the first pick associated to that event) and if it’s from a non-associated station. Additionally the arrival must be consistent with the propagation of P-waves (its apparent velocity must be within bounds)
    • Conversely, if the new pick lies in the coincidence time window of a sufficient number of non-associated picks, a new event is declared. At least a few seconds must have passed from the first pick of the latest event, and picks must satisfy the apparent velocity check as well.
    • Otherwise the pick is stored in the non-associated picks list, and kept for a few minutes.
  1. The probabilistic earthquake location of recent earthquakes is updated using the RTLoc(external link) algorithm, if either new picks have been associated, or some time has passed. The most probable hypocenter, origin time and covariance matrix (uncertainty ellipsoid) are computed based on the P-waves arrival times at stations and, optionally, non-triggered stations and current time. RTLoc needs two 3D grids per station, holding the travel times from each point of the location grid to the station (one grid for P-waves and one for S-waves).
  1. For each station associated to a still occurring earthquake that has been successfully located:
    • The theoretical S-waves arrival is computed based on source location and travel times grid.
    • On a time window after the arrival (param: 2 seconds), if available, the peak displacement is measured, yielding a magnitude probability distribution for the station, MS (see below for details).
    • The magnitude distribution for the station over a short time window after the automatically detected P-waves arrival (param: 2 seconds), MPshort, is computed if waveform data is available and, optionally, if the time window does not overlap the S-waves time window above.
    • Similarly, the magnitude distribution for the station over a longer time window after the automatically detected P-waves arrival (param: 4 seconds), MPlong is computed (if data is available and, optionally, there is no overlap with the S-waves time window).
    • The peak displacement id obtained through (double) integration, band pass filter (param: 0.075 – 3 Hz) and finding the maximum modulus of the vector sum of the three components over the time window (configurable to work on some components only).
    • The magnitude probability density function for each time window and station is a Gaussian with mean value M given by:
      M = (log10(Pd) – A – C ⋅ log10(R/10))/B
      where R is the hypocentral distance in km, Pd is the filtered peak displacement in meters and A, B and C are coefficients that depend on the signal window (they are specified in rtmag.txt).
  2. The earthquake magnitude probability distribution is obtained by multiplying the MS, MPshort and MPlong distributions for all stations, and with an a priori distribution corresponding to the Gutenberg-Richter law. This provides both a most likely magnitude (peak of the distribution) and uncertainty (magnitude range where the integral of the distribution rises from 5% to 95%).
  3. If the resulting magnitude is below a threshold (param: 4), it is re-computed (repeating the two previous steps) using the displacement filter for low-magnitude events (param: 1 - 25 Hz). This makes it possible to test the behavior of the system on low-magnitude events (for networks in low seismicity geographic areas, for instance) while at the same time performing Early Warning for moderate-to-large earthquakes.
  1. Using magnitude and location from the previous steps, the peak acceleration and velocity are estimated at stations (to compare with measured ones) and targets, using the attenuation laws provided in pga.txt, pgv.txt. It is possible to provide different laws depending on the estimated earthquake parameters, for instance to use one law, such as Akkar and Bommer [3], for high magnitude events and another for low magnitude events. The seconds remaining before the estimated S-waves arrival at these remote sites is also computed using the estimated source parameters and the velocity model.
  1. Alarm messages are sent over the internet to the remote target sites specified in targets.txt. The messages take the form of short UDP packets that contain, encoded as textual key-value pairs: earthquake parameters and their uncertainties; target-specific estimates such as the peak ground shaking expected at the recipient site, and the remaining seconds before the arrival of destructive waves (S-waves) there. The exact format of the alarms can be found in the logs (e.g. running a simulation with localhost as target IP and with alarm_during_simulation set to 1). Alarms are sent for any occurring earthquake in real-time mode (and optionally during simulations too, for testing) each time the above parameters change of a non-negligible amount (to not flood the receiving end), but anyway never less frequently than once per second (user configurable). The UDP transport layer has been chosen since alarms are short, stream-like (e.g. the most recent message supersedes previous ones) and need to be delivered as fast as possible, i.e. what UDP is best at. In addition to "earthquake" messages, "heart-beat" messages are also continuously sent to targets (e.g. every few seconds) to signal the working condition of the EWS to targets.
  1. An additional broadcast alarm message (in QuakeML(external link) format) is also optionally provided, focusing on the earthquake source parameters (magnitude, location) instead of the target-specific information (ground shaking). This message is sent via TCP to a server for the dissemination of alarms to a broader public, instead of being sent directly to targets. The server acts as a "broker", relaying the messages to any number of subscribed clients, and it must run a messaging software that supports the STOMP(external link) protocol, such as ActiveMQ(external link). The broker.txt file can specify the server IP and login credentials. A typical use of this feature is to alert any number of end-users who have installed and configured an Early Warning Display(external link) at their own target site. In this case the receiving software is responsible for providing a shaking prediction at the site of installation, based on the earthquake location and magnitude.
  1. Only in real-time mode, a user provided procedure is launched as a last step after processing an event: PRESTo\eventpostproc\eventpostproc.bat ( under Linux/Mac). It may perform custom actions using the final estimates of the earthquake parameters, such as sending e-mails, SMS and inserting the event in a database/bulletin. The procedure is passed a handle to the relevant output files produced by PRESTo, i.e. a filename with path relative to the PRESTo root dir, deprived of the extension part, i.e. data/network-name/YYYY-mm-dd_HH.MM.SS.MS_EqkID where the date is the estimated origin time and the ID is the progressive earthquake ID. The procedure is expected to append the extension it is interested in (currently either ".log", "mail.log", ".kml" or ".png") and use / parse the related file as it sees fit. The example shell script shows how to send an SMS and an e-mail containing the final source parameters and PGA, PGV at targets, a Google Maps link for the epicentral area, with attached PRESTo screenshot.

PRESTo ChangeLog

v. 1.0
  • Removed experimental algorithms: on-site alert levels, PDZ, displacement filtering based on SNR. These parts will be finalized and implemented in PRESTo Plus.
  • Ignore negligible changes of magnitude again, like in pre-0.2.6 versions.
v. 0.2.8
  • Initial support for velocimeters. Added a column to stations.txt, to specify for each station whether it is accelerometric (ACC) or velocimetric (VEL).
  • Improved the event declaration algorithm to minimize false events, especially in large networks (many stations, large distances, high transmission lags):
    • picks coincidence (for event declaration) and pick association to an existing event are now fairly independent of the time order in which picks are received by the system, to cope with unpredictable delays and packet lengths
    • picks coincidence and association require the apparent velocities of the picks (measured from the first, earlier pick) to fall within reasonable bounds, compatible with the propagation of P-waves
    • more aggressive removal of old picks and quakes from memory, to cope with higher network densities
  • Initial support for the Earthquake Early Warning Display (EEWD): implemented a simple STOMP client to send alarm messages in QuakeML format to a remote server (a message broker, e.g. ActiveMQ). The broker.txt file specifies the server hostname and login information. The message broker will broadcast earthquake alarms to all the connected EEW Displays, installed at target sites.
    Each Display will show a map similar to that of PRESTo, with a count-down and expected intensity for the target location.
  • Added sensor clipping detection, mostly useful to discard saturated velocimeters in epicentral area. Added a column in stations.txt to specify the clipping value for each sensor (in counts, e.g. 80% of (2^24)/2 for 24-bit data loggers). When the absolute value of the counts for a channel is higher than the clipping value, declare clipping for several seconds ("waveform_clipping_secs" parameter). Early warning parameters (Pd, Tauc, alert level, magnitude) are not computed on a channel during clipping.
  • The PDZ palette is stretched to match the user supplied Pd threshold (onsite_disp_threshold). Enabled interpolation of Pd measured at stations.
  • Removed the (redundant) mail log pasted into the full log.
  • The statistics of data transmission latencies are reset after being written to the log, so they are more useful (only relative to the last latency_log_period_secs).
  • Allow zooming helicorders and the map while paused.
  • Only visible targets are now present in the KML animation. They are labeled with the full name, not the grid name.
  • More checks to detect invalid SAC files (e.g. non-SAC files with .sac extension, missing header values). Produce a fatal error instead of skipping them. Fill-in missing header values when possible.
  • PARAM: display_heli_min_vel (default: 0.0001). Minimum full-scale velocity (m/s) to use in the auto-scale of on-screen helicorders for velocimetric stations (i.e. high values will shrink noise to a flat line).
  • PARAM: waveform_min_snr (default: 5). When computing magnitude or on-site alert levels, do not include waveforms whose Signal-to-Noise Ratio (e.g. RMS after the phase arrival / RMS before the P-pick) is below this value (0 to disable).
  • PARAM: waveform_clipping_secs (default: 30). For how many seconds a channel is considered clipped after a clipped sample is detected (0 disables clipping detection).
  • PARAM: waveform_rmean_secs, replaces rmean_packets. The realtime waveform mean is calculated on this number of previous seconds (instead of: number of packets) and this is done on every second of new incoming data, regardless of packet length. This is needed since the packet duration depends on the data-logger, signal content and sampling rate so it can be very variable in heterogeneous network. This also eliminates the discrepancy between playback (1-second packets) and realtime (variable duration).
  • PARAM: onsite_disp_ratio_threshold (default: 1.5). A threshold used to decide the best filtering of the waveforms when measuring the on-site parameters. There are now two filter bands like in the case of magnitude: "low" band for low magnitude events (high frequencies, e.g. 1-25 Hz) and "high" band for high magnitude events (low frequencies, e.g. 0.075-3 Hz). The "low" filter is chosen when the Pd measured using it, Pd_low, is much smaller than Pd using the "high" filter, Pd_high, i.e. log10(Pd_high/Pd_low) >= threshold.
  • PARAM: magnitude_disp_ratio_threshold (default: 1.5). As in the on-site case, use the "low" filtering when computing magnitude if log10(Pd_high/Pd_low) >= threshold. Only used if magnitude_high_threshold is disabled (< 0).
  • PARAM: magnitude_outlier_threshold (default: 3.5). Remove magnitude outliers whose score (proportional to the deviation from the median) is above this threshold (0 to disable). Useful to reject e.g. very high values from a broken sensor, or very low values from a wrong pick.
  • PARAM: binder_apparent_vel_min, binder_apparent_vel_max. Range of valid apparent velocity (km/s) for a pick associated to an event.
  • PARAM: binder_apparent_vel_stations_spacing. Average inter-station distance (km). Within this distance to the first pick of a quake, the apparent velocity checks are not enforced (e.g. the apparent velocity can be "infinite" near the epicenter).
  • PARAM: binder_apparent_vel_max_distance. Maximum distance (km) from the first pick of an earthquake valid for the association.
  • BUGFIX: crash when loading SAC files on Windows 8.1 64-bit.
  • BUGFIX: PGx uncertainty is now calculated as a min,max range (non-symmetrical around the mean value).
    IMPORTANT: this changes the log file format (PGx lines) and the UDP alert format, replacing a single PGx uncertainty with a min,max range.
  • BUGFIX: in lag simulation, improved the randomization (and gaussian distribution). Made it consistent across different Operating Systems.
  • BUGFIX: excessive logging of PGX values when no UDP alert was sent (i.e. no target IP defined or in simulation mode).
  • BUGFIX: possible crash in simulation mode when loading a station with no vertical component SAC.
  • BUGFIX: in simulation mode, after resetting, helicorders were desynched/lagging for a while and heartbeats sending was not reset.
  • BUGFIX: the map was missing when using a network with a single icon (e.g. one station and no targets).
v. 0.2.7
  • Updated to the latest libraries: SDL 2.0, SDL_Image 2.0, SDL_net 2.0, libPNG 1.6, FilterPicker 5.03, libslink 2.4, muParser 2.2.3.
  • Switched sound library from FMod 3.x to SDL_mixer 2.0.
  • First Linux version.
  • Use explicitly thread-safe time.h functions on all platforms (required for Linux).
  • Use SDL_GetTicks for simulated time, not clock() (required for Linux).
  • Some fixes for thread safety during data acquisition.
  • Fix casting error during data acquisition in case of large packet time differences.
  • Error out on unknown parameters in rtloc.txt.
v. 0.2.6x (IN PROGRESS)
  • Skip picking on horizontal components.
  • BUGFIX: crash in simulation mode during an event if the vertical component SAC for a station was missing. Such stations are not loaded now.
  • In the log, DISP messages now also report Pd in cm, in addition to Pd in counts.
  • PARAM: magnitude_max_value. Clip magnitude PDF distribution to this value (default: 8.0). In previous version the clipping was there, but fixed at 8.0.
  • Appended the quake ID to the filename of output files in simulation mode, i.e.
    This way multiple quakes in the same SAC files produce multiple outputs like in real-time mode.
  • Do not convert station name from KSTNM SAC header to uppercase.
  • Modified ALARM messages: replaced product of on-site Pd ("PdP") with sum of log10(Pd) ("SumLgPd") to avoid underflow issues. Same for sum of on-site tauc ("TcP" -> "SumLgTc"). For consistency, renamed sum of on-site Pd and Tc too ("PdS" -> "SumPd", "TcS" -> "SumTc"). Used -infinity (-1.#INF in the log) when these data are not available, instead of -1 (since the latter is now a valid value for the sum of logarithms). Another change: only consider Pd and tauc in the sums when the alert level is defined (i.e. Pv is above a threshold so that tauc is reliable and we are confident we are measuring on signal following an arrival).
  • BUGFIX: crash when calculating location uncertainty when probabilities are very low, e.g. false event in real-time -> very low pdf values, all below pdf_cut in in rtloc.txt -> uniform distribution (all zeros). Now a default location uncertainty (0) is used in such cases.
  • When new signal windows are available to RTMag, consider this a magnitude change even if they do not actually change the magnitude or its uncertainty. This increases the log verbosity and produces redundant identical points on the magnitude graph, but is needed to correctly count RTMag windows in the timeline shell. Also updated the timeline shell to correctly count available picks before a magnitude is available (i.e. use the new LOCATION messages instead of the QUAKE ones in the log).
  • Random selection of helicorders when using SAC files and "display_heli_max_num" (the same selection between runs though). Used to be the first stations in SAC filename order.
  • PARAM: display_map_station_scale. Scale factor to adjust the default size of station icons on the map (also targets, quakes etc.). Useful for very dense or very sparse networks. Default is 1.0.
  • Included muParser library (v2.2.2) to evaluate at run time formulas provided by the user as strings in the configuration files.
  • Changed the way the predicted PGx at targets and sites is calculated. In previous version fixed prediction laws were used (Akkar & Bommer for high magnitudes, from ShakeMap for small events), with coefficients specified by the user (pga.txt, pgv.txt). Now the user supplies his own functions as one-line text strings in those same files: the first to calculate the log10 of PGx and the second to calculate the associated error (all in cm/s or cm/s^2). The inputs are the earthquake magnitude, epicentral distance and depth, provided as variables named respectively Mag, R_epi and Dep. In order to change law according to e.g. magnitude, a C-style expression such as this can be used: (Mag >= 4.0) ? <formula_high> : <formula_low>. Note: the new configuration files use the same laws and coefficients as before.
  • Preliminary experimental support for generating the Potential Damage Zone (PDZ, i.e a Pd map) in real-time. The map is an interpolation of measured Pd at stations, and theoretical Pd where no stations are present. The theoretical Pd is calculated using the distance from the location provided by the regional system and the mean of the measured tauc. (Since Pd is a proxy for PGV, a PGV/Imm map is also possible.). Below parameter "display_map_pdz_opacity" should be kept 0 unless when testing the PDZ.
  • PARAM: display_map_pdz_opacity. Controls the opacity of the PDZ shown on the map (0..1, 0 = completely transparent, i.e. disabled, 1 = completely opaque). Default: 0.
  • When SeedLink packets are not being received from a station (i.e. large feed latency, shown in red), the last measured data latency is now ignored, since it's stale, and it's replaced with 0, also shown in red.
  • Wait for the screen drawing to be really finished (i.e. replaced glFlush with glFinish) before saving a screenshot or updating the loading bar. (might cure sporadic black screenshots in realtime mode, and no loading bar on some computers / OpenGL drivers?).
  • Made config.txt parsing more strict (all parameters must be present, no duplicates) and added its contents to the log too.
  • Collect and show all config.txt / params.txt errors on exit, not just the first detected one.
  • Made it mandatory to have a 4/3 aspect ratio for the window size. By specifying 0 for both "screen_w" and "screen_h", the window size will be automatically chosen to fill 90% of the desktop, either horizontally and/or vertically (100% in full screen mode).
  • Skip audio card initialization when running without sound, as no audio lib calls are done in that case. Also sound is turned off if there are problems initializing the audio card, instead of exiting with a fatal error. Useful when there are installation issues with the audio card driver or no audio card at all.
v. 0.2.5x (IN PROGRESS)
  • PARAM: removed display_real_quake_lon/lat/dep/mag, moved the real quake information to a file in the earthquake directory called <earthquake_name>_real.txt, with format: Lat(°) Lon(°) Dep(km) Mag. The new boolean parameter display_real_quake controls whether the real location is shown on the map.
  • BUGFIX: corrupted textures (e.g. map) if their width was not divisible by 4.
  • BUGFIX: potential thread safety issue when sending the mail in real-time mode.
  • PARAM: display_heli_max_num. Maximum number of helicorders to show on-screen (N). Only the first N stations in seedlink.txt or the first N SAC files found (sorted by filename) will be displayed. This can be useful when a large number of stations are used, and the screen is too crowded with helicorders (and/or they are too tiny) and/or the performance is poor. Note that all stations will be used for Early Warning, regardless of this parameter.
  • PARAM: display_heli_lag_threshold. When |Tnow-Tlast_sample| is above this many seconds a station is declared lagging, i.e. yellow helicorder, ghosted out on the map. Note that this also covers stations with timestamps in the future (GPS problems).
  • ESC no longer quits (too easy to press by mistake). Shift-ESC does now.
  • BUGFIX: correctly trim spaces from the end of station/channel name read from the SAC header.
  • Station icons on the map have a minimum size now, in order to be visible even if the location grid is very large.
  • BUGFIX: BUGFIX: crash if out of memory while reading the grids at startup.
  • Enable the allocation of up to 4GB on 64-bit OS, allowing larger grids / more stations to be used (compiled with LARGEADDRESSAWARE linker switch).
  • Support for NonLinLoc v6.0 grids (just an additional "FLOAT" appended to the first line of the .hdr files).
  • BUGFIX: removed blank border in texture\wave.png. It was causing smaller-than-requested wave-front radiuses on the map. Also now using the station closest to ground level to compute the wave-front radius.
  • BUGFIX: crash when converting out-of-range timestamps to text (now they are silently converted to the Epoch timestamp when printing).
  • BUGFIX: error out on duplicate parameters in params.txt.
  • BUGFIX: error out on non-integer sampling rates in SAC files.
  • BUGFIX: reworked the time handling in the Graphical User Interface: promoted to higher precision (same as that used in the actual Early Warning procedures). This should cure any precision degradation in the user facing controls. Also prevented a possible GUI halt after running for about 49 days.
  • Each target site now requires the corresponding travel-times grid. The old code enabled the quick addition of arbitrary targets given their coordinates, by using search and interpolation algorithms over the available station grids only. But it was inaccurate and would fail around the borders of the grid.
  • Updated FilterPicker to a newer version (date of last modified file: 2011-11-03)
  • Portability fixes, compiles under Cygwin (g++ 4.5.3)
  • Moved filtering after double integration when measuring Pd.
  • On-site parameters for low and high magnitude were collapsed together (implicitly for high magnitude events).
  • PARAM: alarm_max_period. Send an alarm at least every this many seconds per earthquake, even if source parameters, on-site parameters and PGx at target have not changed (target has fewer remaining seconds, anyway).
  • PARAM: onsite_all_picks. If non-zero, on-site alerts will be computed for every pick, not just those bound to an earthquake by the regional event detection algorithm.
  • PARAM: onsite_vel_threshold. Do not provide an on-site alert level if the peak velocity (Pv) in the on-site time window is below this value (regardless of Pd, τc).
  • On-site alert levels are now shown in the KML animation too, if shown on screen (i.e. if display_show_onsite is non-zero).
  • Alarms sent to targets (via UDP) now also contain: alarm sequence number (target can discard alarms with a lower sequence number than the last received), epicentral distance (km), on-site mean value of τc, on-site mean value of log10(Pd), number of stations used for on-site means.
  • Throw away SeedLink packets more than a day in the past or the future, or with unrealistic meta-values (0 samples, negative or too high sample rate). Note that this is done after libSlink has handled the data, so malformed or wrong packets may still crash PRESTo there.
  • When the last samples from a station are more than 10 seconds in the future, the station is shown on screen in the same way as a lagging station: yellow helicorder, ghosted icon on the map.
  • The network name and "Real-Time" are shown at the top of the window in real time mode.
  • Removed explicit grid filenames from rtloc.txt, they're now hardcoded to data\<network-dir>\time\layer.<P|S>.<station>.time.
  • Improved Google Maps URLs in the log: use the new "scale" parameter to double the resolution, and provide an additional URL for the whole map.
  • The log now also reports a 1-d approximation of the velocity model in the grids, obtained measuring the velocity at each depth for the first station.


  1. Satriano C., Elia L., Martino C., Lancieri M., Zollo A. and Iannaccone G., "PRESTo, the earthquake early warning system for Southern Italy: concepts, capabilities and future perspectives", Soil Dyn Earthq Eng, doi: 10.1016/j.soildyn.2010.06.008(external link)
  2. Picozzi M., Zollo A., Brondi P., Colombelli S., Elia L. and Martino C., "Exploring the Feasibility of a Nation-Wide Earthquake Early Warning System in Italy", J Geophys Res, doi: 10.1002/2014JB011669(external link)
  3. Akkar S. and Bommer J.J., "Empirical prediction equations for peak ground velocity derived from strong-motions records from Europe and the Middle East", Bull Seism Soc Am, 97(2):511–530, 2007, doi: 10.1785/0120060141(external link)
  4. Colombelli S., Amoroso O., Zollo A. and Kanamori H., "Test of a threshold-based Earthquake Early Warning method using Japanese data", Bull Seism Soc Am, 2012, 102(3):1266-1275, doi: 10.1785/0120110149(external link)
  5. Lancieri M. and Zollo A., "Bayesian approach to the real-time estimation of magnitude from the early P and S wave displacement peaks", J Geophys Res 2008; 113(B12), doi: 10.1029/2007JB005386(external link)
  6. Lomax A., Satriano S. and Vassallo M., "Automatic picker developments and optimization: FilterPicker - a robust, broadband picker for real-time seismic monitoring and earthquake early-warning", Seism. Res. Lett., 83:531-540, doi: 10.1785/gssrl.83.3.531(external link)
  7. Satriano C., Lomax A. and Zollo A., "Real-time evolutionary earthquake location for seismic early warning", Bull Seism Soc Am 2008, 98(3):1482–94, doi: 10.1785/0120060159(external link)
  8. Vassallo M., Satriano C. and Lomax A., "Automatic picker developments and optimization: An optimization strategy for improving the performances of automatic phase pickers", Seism Res Lett, 83, 531-540, doi: 10.1785/gssrl.83.3.531(external link)
  9. Zollo A., Amoroso O., Lancieri M., Wu YM. and Kanamori H., "A threshold-based earthquake early warning using dense accelerometer networks", Geophys. J. Int. (2010) 183, 963–974, doi: 10.1111/j.1365-246X.2010.04765.x(external link)