Upload
andrea-bono
View
217
Download
0
Embed Size (px)
Citation preview
ARTICLE IN PRESS
0098-3004/$ - se
doi:10.1016/j.ca
�Correspond+39 065041303
E-mail addr
Computers & Geosciences 31 (2005) 55–64
www.elsevier.com/locate/cageo
PWL 1.0 Personal WaveLab: an object-oriented workbench forseismogram analysis on Windows systems
Andrea Bono�, Lucio Badiali
Istituto Nazionale di Geofisica e Vulcanologia, Centro Nazionale Terremoti, Via di Vigna Murata 605, Rome 00143, Italy
Received 19 January 2004; received in revised form 28 September 2004; accepted 28 September 2004
Abstract
Personal WaveLab 1.0 wants to be the starting point for an ex novo development of seismic time-series analysis
procedures for Windows-based personal computers. Our objective is two-fold. Firstly, being itself a stand-alone
application, it allows to do ‘‘basic’’ digital or digitised seismic waveform analysis. Secondly, thanks to its architectural
characteristics it can be the basis for the development of more complex and power featured applications. An expanded
version of PWL, called SisPick!, is currently in use at the Istituto Nazionale di Geofisica e Vulcanologia (Italian
Institute of Geophysics and Volcanology) for real-time monitoring with purposes of Civil Protection. This means that
about 90 users tested the application for more than 1 year, making its features more robust and efficient.
SisPick! was also employed in the United Nations Nyragongo Project, in Congo, and during the Stromboli
emergency in summer of 2002.
The main appeals of the application package are: ease of use, object-oriented design, good computational speed,
minimal need of disk space and the complete absence of third-party developed components (including ActiveX).
Windows environment spares the user scripting or complex interaction with the system.
The system is in constant development to answer the needs and suggestions of its users.
Microsoft Visual Basic 6 source code, installation package, test data sets and documentation are available at no cost.
r 2004 Elsevier Ltd. All rights reserved.
Keywords: Seismic phase-picking; Object oriented; UML; SAC files managing; Hypoinverse2000 Phases export; Filters
1. Introduction
A new system for acquisition and processing of digital
signals has been developed in the last few years at the
Istituto Nazionale di Geofisica e Vulcanologia (INGV)
(Badiali et al., 2001). The Italian National Seismic
Network currently collects the seismic signals from its
own sensors and from other regional and local
collaborative networks into the computer data centre
e front matter r 2004 Elsevier Ltd. All rights reserve
geo.2004.09.010
ing author. Tel.: +39065 1860290; fax:
ess: [email protected] (A. Bono).
in Rome. The result is a virtual wide network.
Communications are provided partly through wired
analogue and digital lines, and partly through satellite
digital connections.
The waveforms come from reliable triggering system
and from continuous file buffer recording, and are
normalised according to an internal format (Badiali
et al., 2001), but SAC format is also available.
The availability of a large number of signals made the
available ‘‘console-based’’ application too slow and
inefficient to be used for Civil Protection purposes. So,
PWL facilities were boosted up to process as quickly as
possible all the time-series recorded by the brand new
d.
ARTICLE IN PRESSA. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–6456
automatic system, to make manipulations such as
filtering, to pick or review seismic phases and to start
location routines. An interesting feature is the ability of
showing in a single area (Event Graphical Area: EGA)
all waveforms related to an event with no restrictions of
number or dimension of files. At present, most of seismic
analysis systems can display at most one trace or three
components of the same station. Moreover, PWL can
show vertical components in its EGA and detailed three
components for active station in a second window
activated by a double-click. All phase picking and
editing can be performed in both windows. In the three
components view, a vertical picking bar covers the three
waveforms during the analysis in order to help the user
in phases identification. It is possible to switch from one
station to another just by a mouse click.
Another interesting function is given by ‘‘waveforms
grouping and synchronisation’’. All time-series shown in
the EGA can be synchronised and grouped in order to
apply modification to all traces simultaneously. Func-
tions like zoom, crop, offset correction and filters can be
applied to a single trace or to all the traces. Grouping
and synchronisation are selected by default in the three
components window.
Many shortcuts are implemented to speed up most
frequent operations.
PWL and its evolution SisPick! should not be compared
with the existing and really powerful analysis packages.
They do not include all features embedded in titanic
systems like SAC or PITSA or other commercial products.
The authors only want to provide a ‘‘basic but expand-
able’’ system created to be really user friendly with the
well-known layout of a Windows application. Program-
ming experienced users will rapidly be able to improve the
provided source code with their own algorithms (such as
special filters, signal integration or differentiation, particle
motion viewers, magnitude calculators, etc.).
2. Main features
PWL was developed on a Windows 2000 workstation
with Microsoft Visual Basic 6 development environment
and it is currently available only for Windows systems.
As mentioned, the most basic functions on waveforms
are implemented. They include:
�
Graphical representation of data according to thefollowing file types: WF, TWF, INGNET (INGV file
formats), SAC.
�
Zoom in/zoom out.�
Print.�
Filters and fast Fourier transform: band-pass, high-pass, low-pass by frequency windowing.
�
Editing: spikes removing, amplitude adjusting, offsetand baseline corrections with linear regression.
�
Picking, deleting, moving phases and ‘‘visual weigh-ing’’. Automatic weight codes are set according to the
Hypoinverse2000 standard. Phase quality and polar-
ity can be set too.
�
Coda duration picking or revision.�
Phases export in ASCII Hypopinverse2000 files.As said, more powerful features are at present running
in the PWL version used for seismic monitoring at the
INGV. Amongst them, we mention an automatic file
selection routine and an embedded hypocentre location
package.
An export/import function of SAC type files is
included. This guarantees a high level of compatibility.
User can analyse files in the office, at home or wherever
he has access to a Windows PC with at least 1MB of free
disk space. In fact, program can run on a local machine
without a specific connection to the automated INGV
Data Acquisition System. User will have to manually
load files creating his own ‘‘personal events’’.
The typical use of PWL implies the availability of
triggered waveforms from individual events, but in some
cases continuous traces can be read and properly
cropped. That is the case of the Stromboli emergency
application on summer of 2002 and the United Nations
Nyragongo Project. We must consider that ‘‘continuous
vs. trigger’’ means ‘‘larger vs. smaller’’ files: long
recordings decrease system performance.
Traces can be aligned by P arrivals and a synchroni-
zation routine is available because files can start or end
at different times (default in INGV version). This
immediately warns the user if an unwanted trace was
included into an event.
There is no theoretical limit to the number of
waveforms that can be loaded into the system. During
a test (Slovenia earthquake July 12th, 2004 Ml 5.2) 109
traces were loaded and PWL was working dearly. Trace
boxes are dynamically resized until a number of traces is
reached (this bound can be configured by the user);
afterwards, a vertical scroll-bar helps in the visualisation.
Filters included in PWL are basically a FIR synthesis
by frequency windowing. Available features are low/
high/band-pass, differentiator, band-stop. Corner fre-
quencies and number of poles are customisable.
Implemented tapers are Hamming, Blackman, Kaiser,
Lanczos, Weber and Ideal rectangular and triangular
(see Openheim and Shafer, 1990).
Another band-pass algorithm with time-shift correc-
tion was implemented re-engineering a FORTRAN
routine by Paul Spudich—USGS Menlo Park (CA).
Traces can be returned to an unfiltered state by
‘‘undoing’’ the last filter or by the reload option.
Program interface can be customised, choosing colors
for waves, axes, grids (visible or not), phases and
backgrounds. Network settings for local/distributed
operation mode are configurable too.
ARTICLE IN PRESSA. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–64 57
3. An innovative architecture
The software was developed conforming to the object-
oriented (OO) methodology to make it as modular as
possible, making maintenance easier. OO methods have
the potential for greatly improving the usefulness of
computers in science and engineering. In fact, our
experience with using C++ for numerical-scientific
computing has clearly shown that the resulting libraries
and applications are significantly easier to be extended,
maintained and re-used in new situations, compared to
the traditional procedure-based programming style of
Fortran and C. Therefore, OO programming and
component-based programming (standard for VB and
other Rapid Application Development tools) are two
important techniques that contribute to such improve-
ments of software development efficiency.
A class, in OO languages, is essentially the definition
of a data structure or, in other words, the set of variables
closely connected with each other and the operations,
called ‘‘methods’’, that can be performed on such data.
Methods are equivalent to subprograms in non-OO
terminology.
An object is a particular instance of a class that is
created within a program in order that the methods that
the class defines may be used. The objects of a class are
totally and exclusively defined by the definition of the
class. It is not necessary to know the way they are
implemented or the source code that defines the methods
and private variables in order to use them.
Visual Basic implements objects through the use of so-
called ‘‘class modules’’. It is thus enough to include in a
project the oClassName4.cls file in order to inherit all
its features.
The Use Case Map (UCM) shown in Fig. 1 provides a
general behaviour specification of the system.
That is a high-level design model to help us express
and reason about a system’s large-grained behaviour
patterns (Buhr, Casselman, 1996). As this kind of maps
Fig 1. Use Case Map: PWL behaviour specification.
is intended to be used at the requirements level or for
high-level design, they deliberately do not explain all
details of the system but can provide a general
specification.
Class Diagrams are successively used to give a
description of the implementation level (Fowler and
Scott, 2000).
Fig. 2 shows the Class Diagram for PWL.
3.1. Waveform class
One of the most interesting characteristics of PWL
architecture is that it includes a class for defining seismic
time-series.
Table 1 contains a brief description of class structure.
With a few modifications (a couple of lines have to be
commented and an appropriate Read routine has to be
coded), Waveform Class Module can be included in any
other visualisation program and re-used to show two-
dimensional data streams in standard VB picture-boxes.
Fig 2. UML Class Diagram.
ARTICLE IN PRESS
Table 1
Waveform class structure
Attribute Data type Description
FileName String Seismogram file
name
Station String Station code
Date String Record date
Time String Record time
NSamples Longlnt Number of samples
Frequency Float Sampling frequency
Component String Channel
code+component
code
X() Float X samples
Y() Float Y samples
xMin Float Minium value for X
samples
xMax Float Maxium value for X
samples
yMin Float Minium value for Y
samples
yMax Float Maxium value for Y
samples
Amplitude Float Maximum
amplitude
Period Float Period
NPhases Longlnt Number of phases
Duration Float Coda duration in
seconds
Method Description
ReadWave() Reads wf, twf files
PlotWF() Draws a seismogram in a picture box
PlotPhases() Phases display
FIRFilter() Applies FIR filters
PanWave() Pans current wave
MinMaxP) Calculates minimum and maximum X
and Y
ChangeDuration() Updates coda duration
AutoDespike() Autmatic spike removal routine
Remove Offset() Offset correction
Remove Spikes() Manual spike removal ruotine
SetNewStart() Sets new starting sample
SetNewEnd() Sets new ending sample
Save() Saves seismogram in SAC format
Reload() Reloads file
Close Wave() Unloads seismogram file
A. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–6458
3.2. Seismic Event related classes
We chose to design two classes to represent seismic
events. Event class contains all information about the
current earthquake. The class module name is clsE-
ventHypo200.cls. This means that we adopted the
Hypo2000 standard to represent such kind of informa-
tion. This is because we considered that the most used
earthquake location packages accord to this standard.
So, if we can store event details in this data structure,
our system is ready to interact with the most common
and power featured locators.
ClsEventHypo2000 includes all general information
about the earthquake such as date, hour, number of
recording stations, number of phases and number of
time-series. Among its attributes we must cite a Phases
array and a Waves array. This means that this class is
related to other ones as shown in Fig. 2.
ClsEvtLineHypo2000 includes information about a
single station recordings (an hypo2000 file line): station
code, P and S arrival times, amplitude and period, coda
duration and so on. Furthermore, it contains file names
for three components time-series.
Classes details are shown in Tables 2 and 3.
ClsTerna is quite similar to Event class but it is used to
record information about a three-component station
when the Station View Window is loaded. Table 4 shows
its structure.
3.3. Phase class
clsPhase is used to store information about phase
picking. As we are following the Hypo2000 standard, we
record station code, phase quality and polarity, arrival
time, channel code, component code and phase weight.
Table 5 shows the class structure.
About methods: ShowPhases can draw phase pickings
on seismograms and Update and Delete routines are
used to edit class attributes.
A crucial point in phase class managing is represented
by its application to earthquake location. In fact, it is
possible that more than one P or S phases are picked for
a station (example PG, SG and PN, SN). Hypo2000
location routines only use a P and an S phase per
station. So we have to choose which phases have to be
sent to the location routine. Current version of the
System automatically updates its Line objects with the
first P and S phases, following the arrival time order. We
are currently working on a user-driven phase selection.
3.4. A Sequence Diagram
As the whole system is focused around the Event
concept, it is important to describe how this structure is
built and managed. A Sequence Diagram (Quatrani,
1998) about classes instantiation is shown in Fig. 3.
After an event selection (or first manual file load), an
Event object is created and subsequently an EventLine is
created for each station; then the seismogram file is read
and a Waveform object is created. Phase objets are
created if the analyst is using regular event files. See
Appendix 2 for Event file format.
After the event has been read, user can perform
picking or editing in order to start available location
routines.
ARTICLE IN PRESS
Table 2
EventHypo2000 class structure
Attribute Data type Description
Active Wave Longint Selected wave index
EvtDate String Event date
EvtTime String Event time
FileName String Event file name
N Phases Longint Number of phases
NSelected Longint Number of selected waves
nStations Longint Number of stations
Open Waves Longint Number of waves in EGA
Lines() clsEvtLineHypo2000 Array of event lines
Waves() clsWaveform Array of seismograms
Phases() clsPhase Array of Phases
Method Description
Activate Wave() Activates specified wave
AddWave() Adds a station to the event
ReadEvent() Reads event file
CloseEvent() Unloads event and all seismograms
DeletePhase() Deletes specified phase from event
PickAPhase() Adds a phase
Refresh() EGA display refresh
ShowPlots() Plots all selected waves
SyncroWaves() Performs synchronization
Update() Updates phases and coda durations after picking
WriteEvent() Writes event file
A. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–64 59
3.5. Integration with location software
The use of PWL in the INGV real-time seismic
monitoring tasks has been possible, thanks to the
integration with some event-location routines (not part
of the PWL package). All these routines, we say
Hypoinverse or Hypoellipse, can be defined as legacy
software. Legacy software are computer programs that
are difficult to maintain and incompatible with the
current state-of-the-art operating systems like MS-DOS
executables running under Windows (Coyle, 2000). We
chose to integrate executable files of locators into our
visual interactive window shell without re-engineering
original source code. So it is possible to launch the
FORTRAN locator and wait for the result. Then, a
summary window with location parameters and resi-
duals can be displayed. This allows the user to recover
bad readings and perform a rapid picks-review.
Such an approach offers a lot of advantages. For
example,
�
legacy programs do not need to be re-written inanother language (a single location program was
completely translated in Visual Basic),
�
data input–output is done easier and with moreflexibility using Windows objects and controls,
�
data output can be immediately visualised andinterpreted with the help of graphical components
(Friedrich and Karslioglu, 2003).
In Fig. 4, we show a Use-Case representing the
interaction between PWL and the Location System.
3.6. User Interface
PWL User Interface is based on typical Windows
controls. An MDI-Form is the top-most interface and
all functions and routines can be accessed through this
window. A tool-bar and a menu-bar allow the user to
manage the rapid execution of the main operations.
An information frame is on the right-most side and a
few other forms are loaded when needed.
More details are given in the user documentation
(HTML website http://SisPick.ingv.it or PDF document).
4. A case study
Let us examine some of the main features of PWL in a
practical example.
We will consider the Monti Tiburtini earthquake
(Md 2.2) of August 1, 2004.
ARTICLE IN PRESSA. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–6460
Seismograms (Fig. 5 shows vertical components) are
loaded in the EGA with the picks of the automated
acquisition system. Fig. 6 shows the EGA after a band-
Table 3
EventLineHypo2000 class structure
Attribute Data type Description
Staz String Station code
ChannelCode String Channel code
ComponentCode String Component code
NetworkCode String Network code
N Waves Longlnt Number of seismograms
P_Phase String P phase remark
P_Polar String P phase polarity
P Quality String P phase quality
P Time String P arrival time
P_Weight Integer Assigned P weight code
S Phase String S phase remark
S_Quality String S phase quality
S Time String S arrival time
S Weight Integer Assigned S weight code
YYMMDD String Record date
Duration Float Coda duration
Amplitude Float Amplitude
Period Float Period
FileZ String Vertical component file name
FileN String NS component tile name
FileE String EW component file name
Used Boolean True if station is used in location
Method Description
ReadLine() Reads a line from event file
ReadPhases() Recovers phases from a line
UpdateLine() Updates phases and duration
WriteLine() Writes lines in specified file
Table 4
Tern class structure
Attribute Data type
Staz String
ChannelCode String
NWaves Integer
NPhases Integer
Duration Float
Waves() clsWaveform
Phases() clsPhase
Method Description
lnitTern() Initializes class structures
RecoverWaves() Recovers current station
ShowWaves() Seismograms display
SyncroWaves() Time-series synchronizat
PickAPhase() Adds a phase to Tern.Ph
DeletePhase() Drops a phase from Tern
ScndPhasesToEvent() Sends all phases to Even
pass filter applied to the waves group. Such a kind of
operation is made easier by tool buttons and keyboard
shortcuts. For example, traces are filtered by simply
pressing the ‘‘F’’ key.
In order to re-pick a phase, user can follow three
alternatives:
�
sei
ion
ase
.P
t. P
Ta
Ph
At
Sta
Ch
Co
Ar
Ar
Ph
Po
Qu
W
M
De
Co
select phase from the picking bar and drag it onto the
seismogram,
�
right-click and chose ‘‘P’’ or ‘‘S’’ in a popup menu(phase will be picked on mouse position),
�
simply type ‘‘P’’ or ‘‘S’’ and phase will be picked onmouse position.
Description
Station code
Channel code
Number of seismograms (1–3)
Number of phases
Coda duration in seconds
Array of time-series
Array of phases
smograms
sf) array
hases() array
hases()
ble 5
ase class structure
tribute Data type Description
z String Station code
annelCode String Channel code
mponentCode String Component code
rival_Date String Arrival date
rival_Time String Phase time
ascNamc String Phase name
larity String Polarity
+,�,U,D,C, D
ality String Quality i,e
eight Integer Assigned phase
weight code
ethod Description
lete() Drops a phase
mpact_Phases() Used to compact arrys of phases after
Delete
ARTICLE IN PRESS
Fig 3. Sequence diagram of event selection procedure.
Fig 4. Communication between PWL and FORTRAN legacy
code location routines.
A. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–64 61
The application also makes setting a value for an
uncertain arrival time of a phase very simple (see Fig. 7).
In fact, as soon as you set a phase, a circumference
centred around the point you click on is visible, having a
variable radius depending on the mouse pointer’s
position. As the radius increases, so does the uncertainty
and therefore the application automatically varies the
weight to be assigned to the interpretation.
If more than one component for the same station is
available, the interpretation can be conducted on all the
group of three components (see Fig. 8).
When interpretation is finished, the location process
can be started and a file with phases in the ASCII
Hypo2000 format is created.
The INGV version of PWL also reports details about
a location in a specific Summary Window (see Fig. 9). In
this form, residuals are classified by colour gradient:
green is used for values lower than 0.5 s; yellow is
used for residuals between 0.5 and 1 s; red is used for
residual over 1 s. Double click on a residual produces
automatic zoom in on selected phase in the Station View
Window.
5. Discussion
The main innovation introduced by the system
examined is represented by the possibility to rapidly
elaborate a great quantity of waveforms in a graphical
mode having a global view on all time-series. As been
said, there is also a module for a complete management
of SAC files, which allows the user to operate from
home as from the office, using his Windows machine to
read time-series generated under other systems (UNIX,
VMS, SUN OS).
All functions are made easy by the visual context of
the system.
The massive use of the system in the real-time
monitoring activity of the Istituto Nazionale di Geofisica
e Vulcanologia of Rome, during the Stromboli emer-
gency and in the United Nations’ Nyragongo Project
lead to a strong improvement of the system. Among the
most important incoming upgrades:
1.
The increased compatibility with other softwareproducts through the import/export of many more
file formats.
2.
The use of a multiple database system fordata storage. At present, integration with Oracle 8i,
MS SQL Server e MS Access systems has been
planned.
3.
Implementation of algorithms for the study ofparticle motion in 2D and 3D.
ARTICLE IN PRESS
Fig 5. EGA with seismograms (vertical components) of Monti Tiburtini earthquake.
Fig 6. Seismograms after time bounds reset and default band-pass filter (3–7Hz).
A. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–6462
4.
The integration of a Fortran program that computesdouble-couple fault plane solutions from P-wave first
motion data using a grid search method.
5.
A C++ release for Linux platform is currently underdevelopment.
The system is at its early versions, we thus expect user
requests for integration of new features and manage-
ment of other file formats.
Of course, no licensing is required and users can make
free use of source code.
ARTICLE IN PRESS
Fig 7. Automatic weight setting.
Fig 8. Phase picking in the Station View Window: three components of CERT (Cerreto Laziale) station.
A. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–64 63
Acknowledgements
Our thanks go to A. Amato, S. Barba, A. Basili, M.
Di Bona, S. Mazza, F. Mele for their advice during
development.
A. Amato, as Director of the Centro Nazionale
Terremoti (National Earthquakes Center), authorised
the use of PWL on the workstations of INGV’s seismic
surveillance hall and encouraged its use and intensive
testing from personnel during shifts.
M. Di Bona supplied an algorithm (FORTRAN code by
Paul Spudich—USGS Menlo Park (CA)) that was oppor-
tunely modified to implement a Cosine-Band Pass Filter.
A. Basili, F. Mele and M. Di Bona, R. Basili were the
most active contributors during the development of the
acquisition system and the location software.
ARTICLE IN PRESS
Fig 9. Location Summary Window.
A. Bono, L. Badiali / Computers & Geosciences 31 (2005) 55–6464
Appendix 1
System requirements
The package is installed with the typical Windows
approach using a Setup application. PWL executable file
and a few runtime libraries are copied onto the local
hard drive. The free disk space that is necessary is
roughly 1MByte.
CPU speed and quantity of RAM influence very much
the application performance. The minimal hardware
configuration is
CPU:
Pentium 200MhzRAM:
128MBScreen resolution:
800� 600Appendix 2
Event file format
An Event file is a modified HypoInverse2000 ASCII
file. The only difference is represented by the file names
added in columns 87 (vertical component), 110 (hor-
izontal NS component) and 133 (horizontal EW
component). All these names have to be 22 characters
long. No file path is needed. File names have to be
separated by a ‘‘;’’. If no file is available for a
component, related line positions have to be space filled.
Sample event files are distributed with source code and
documentation.
References
Badiali, L., Marcocci, C., Mele, F., Piscini, A., 2001. Improved
seismic acquisition system and data processing for the
Italian national seismic network. Proceedings of the 2001
AGU Fall Meeting, San Francisco, USA, p. 83.
Buhr, R.J.A., Casselman, R.S., 1996. Use Case Maps for
Object-Oriented Systems. Prentice-Hall Inc., Englewood
Cliffs, NJ 302pp.
Coyle, F.P., 2000. Legacy integration-changing perspectives.
IEEE Software March/April, 37–41
Fowler, M., Scott, K., 2000. UML (Unified Modeling
Language) distilled. Addison-Wesley Longman, Reading,
MA 146pp.
Friedrich, J., Karslioglu, M.O., 2003. Updating Fortran
programs and other legacy code to an interactive window
platform. Computers & Geosciences 29 (9), 1091–1100.
Openheim, A.V., Shafer, R.W., 1990. Digital Signal Processing.
Prentice-Hall Inc., Englewood Cliffs, NJ 603pp.
Quatrani, T., 1998. Visual Modeling with Rational Rose and
UML. Addison-Wesley Longman, Reading, MA 222pp.
Further Reading
Internet references
HYPOINVERSE: http://geopubs.wr.usgs.gov/open-file/of02-
171/of02-171.pdf or http://quake.wr.usgs.gov/research/soft-
ware/index.html.
PITSA: http://www.geo.uni-potsdam.de/Forschung/Software/
pitsa.html.
SAC Seismic Analysis Code: http://www.llnl.gov/sac/.
SNAP-Seismic Network Analysing Program (SNAP): ftp://
seismo.ethz.ch/pub/baer/snap/.
WinQuake: http://psn.quake.net/wqdocs/winquake.html#Fea-
tures.