Upload
velkus2013
View
224
Download
0
Embed Size (px)
Citation preview
8/17/2019 SAC Tutorial
1/26
Overview
SAC, the acronym for Seismic Analysis Code, wasdeveloped at Lawrence Livermore National Laboratory,University of California, in the early 1980s!
"t is a command#driven pro$ram $enerallyimplemented on many types of UN"% operatin$ systemsand has become a standard data manip&lation tool in
seismolo$y!
"ts binary data format is one of the principle dataformats &sed today in storin$ and manip&latin$seismolo$ical time series data!
'ith SAC(
one can interactively read seismo$ram data andperform many standard data processin$ operations,s&ch as
filterin$time pic)samplit&de pic)s
correlation*o&rier transformsseismic instr&ment correctionsparticle motion rotationtrace envelopesspectral ratioslinear re$ressions
fre+&ency#waven&mber analysis
8/17/2019 SAC Tutorial
2/26
and create a variety of plots of the data andres<in$ analysis
here are also &tility pro$rams that can be &sed toview plots or to convert SAC $raphics files into otherformats s&ch as -ostScript!
hese files can then be &sed with other $raphicspro$rams s&ch as Adobe "ll&strator to constr&ct morecomple. fi$&res!
/ne can also interact directly with the UN"% operatin$system while &sin$ SAC, callin$ system f&nctions orr&nnin$ secondary pro$rams as needed!
acros scripts of SAC commands2 can be combinedwith CShell scripts for a&tomatin$ seismic processin$!
SAC binary data files can be written and read fromfortran and C pro$rams &sin$ inp&t3o&tp&t ro&tinescontained in the SAC library, 4sac!a4!
last modified 3/05/01
8/17/2019 SAC Tutorial
3/26
CERI Implementation
SAC is part of C56"s s&pported software!
/n lo$in, each &ser so&rces the 4ceri7common!cshrc4file which sets the followin$ UN"% environmentalvariables! hese variables are needed by the SACpro$ram to access internal databases!
he *ollowin$ are sac ariablessetenv SAC:"6 3ceri7common3s&pported3sac;0003sacset path < =path =SAC:"63bin2
setenv SACC*LA>S 4#w #:?S:@!; #:SUN/S@!04setenv SAC**LA>S 4#w #Nn;000 #N+004
setenv SAC-*LA>S 4#-4setenv SAC%'"N:/'S .11setenv SACAU% =SAC:"63a&.setenv SAC>6A-B"CS:5"C5 %
setenv L:7L"?6A67-AB=SAC:"63lib(=L:7L"?6A67-AB
Important Note:
At this time 30D3012 C56" does not have a $enerallyavailable copy of the SAC library, 4sac!a4 or 4sacio!a4,that can be &sed in compilin$ fortran or C pro$rams on
SUN Solaris systems! A copy is available at 3teteme)o3local3sac3lib3sac!a if yo& need to compile pro$ramswith SAC "3/ ro&tines!
8/17/2019 SAC Tutorial
4/26
he SAC pro$ram is started by typin$, for e.ample(
system promptE sac;000
o& then see(
N5' S5"S"C ANALS"S C/:5 Farch ;8, 199G ersion 00!D12H
Copyri$ht 199D 6e$ents of the University of California
SACE
And SAC is ready to $oI
last modified 3/05/01
8/17/2019 SAC Tutorial
5/26
SAC Commands
SAC commands are entered at the command prompt!>enerally data are constr&cted within SAC or readfrom a file before other operations are attempted!Alternatively, sometimes certain SAC commands areinvo)ed to prepare a certain )ind of data operation orto set &p parameters for a plot!
he definitive website on SAC commands is located athttp(33www!llnl!$ov3sac3 !
Bere is an alphabetical list of commands containedwithin SAC! Note, that a command may have a
shorthand form on the left of each word pair2!
absol&teval&eabsol&teval&e
abs absadd addaddf addf am )eepamap) ap)a.es a.esa.is a.es
fortrane.ternal7interfacefft fftdft fftfileid fileid
filterdesi$nfilterdesi$nfdfilterdesi$nfir firfloor floorf&nc$enf&nc$enf$ f&nc$en
lds ldslistdatasetsldsline linelinefitlinefitlinlin
linlinlinlo$linlo$listhdrlisthdrlhlisthdrloadloadloadctable
loadctable
+dp +dp+&antiJe+&antiJe
+&it +&itdone +&itend +&ite.it +&it+ +&it+&its&b+&its&b
vspacevspacevspvspace
8/17/2019 SAC Tutorial
6/26
lctloadctablelo$ lo$lo$10lo$10lo$lablo$lablo$linlo$linlo$lo$lo$lo$lowpasslowpasslplowpass
bandpassbandpassbpbandpassbandreKbandreKbr bandreKbbf) bbf)beam beambeamform
beambe$indevicesbe$indevicesbdbe$indevicesbe$$be$indevicesb$be$indevicesbe$inframe
be$inframebe$frbe$inframebfbe$inframebe$inwindowbe$inwindowbwbe$inwindowbenioff benioff
binoperr
$etbb $etbb$map $map$rayscale$rayscale$s $rayscale$rid $rid$ro&p $ro&p$te.t $te.t$t $te.t
macromacrommacromapmapmar)ptpmar)ptpmar)pmar)ptp
mar)timesmar)timesmar)tmar)timesmar)val&emar)val&emar)vmar)val&emer$emer$e
messa$emessa$emesmessa$emtwmtwm&lm&lm&lfm&lf
m&lome$a
read readr readreadalphareadalpharareadalphareadbbfreadbbf rbbfreadbbf
readcssreadcssrcss readcssreaderrreaderrrerrreaderrreadhdrreadhdrrh
readhdrreadsddreadsddrsddreadsddreadspreadsprsp readsprenamerename
report
waitwaitwcsswritecsswhpfwhpf widthwidthwienerwiener
wnrwienerwildwildwindowwindowwritewritewwrite
writebbfwritebbf wbbfwritebbf writecsswritecsswcsswritecsswritehdrwritehdr
wh
8/17/2019 SAC Tutorial
7/26
binoperrboecbinoperrborder border
m&lome$a
reportreversereverser$litchesr$litchesrmeanrmeanrms rmsrotate rotaterot rotater+ r+rtrendrtrendrtr rtrend
writehdrwritesdd
writesddwritespwritespwspwritesp
capf capf ccipf capf cds cdsc&rrentdatasetcdschnhdrchnhdrch chnhdrchpf chpf color color
col colorcomcorcomcorconto&rconto&rcont conto&rconvertconvertconv convertconvolve
convolveconvoconvolvecopy copycopyhdrcopyhdrcorrelatecorrelatecor correlatec&t c&t
c&terr c&terr
hannin$hannin$han hannin$help helph helphi$hpasshi$hpasshp hi$hpasshilbert hilbert
newsnewsnplotcnplotcn&lln&ll
scallop
scallopscp scallopsetbb setbbsetdevicesetdevicesetmacrosetmacros$f s$f hcd s$f smooth
smoothspe spespectro$ramspectro$ramsp$spectro$rams+r s+rs+rt s+rtsss sssstretch
stretchs&b s&bs&bf s&bf symbolsymbolsymsymbolsynchroniJesynchroniJesynch
synchroniJe
.div
.div
.f&d$e
.f&d$e
.f&ll
.f&ll
.$rid
.$rid
.label
.label
.labl
.label
.lim
.lim
.lin
.lin
.lo$
.lo$
.vport
.vport
.vp
.vport
.wind
.vport
8/17/2019 SAC Tutorial
8/26
synta.synta.syn synta.systemcommandsystemcommandscsystemcommand
data$endata$end$ data$endecimatedecimatedelete deletedif dif div divdivf divf divome$adivome$a
ifft ifftidft ifftima$e ima$einicm inicminstallmacroinstallmacroint intinterpolateinterpolateinterpinterpolate
oapfoapf ocipfoapf ohpfohpf
taper tapertic)s tic)stitle titletrace tracetranscripttranscripttransfertransfertranstransfertransfertabletransfertabletsiJe tsiJe
ydivydivyf&d$eyf&d$eyf&llyf&lly$ridy$rid
ylabelylabelylablylabelylimylimylinylinylo$ylo$
yvportyvportyvpyvportywindyvport
echo echoenddevicesenddevicesed
enddevicese$enddevicesend$enddevicesendframeendframeef endframeendfrendframe
envelope
)eepam)eepam)hronhite)hronhite
pa&sepa&sepic)spic)s
plabelplabelplot plotp plotplot1plot1p1plot1plot;plot;
p;
&nsetbb&nsetbb&nwrap&nwrap
Jcolors
JcolorsJlabelsJlabelsJlevelsJlevelsJlinesJlinesJtic)sJtic)s
8/17/2019 SAC Tutorial
9/26
envelopeerase eraseera eraseeval&ate
eval&ateeval eval&atee.p e.pe.p10 e.p10e.ternale.ternal7interfacee.te.ternal7interface
plot;plotalphaplotalphapaplotalphaplotcplotcpcplotcplotctableplotctableplotdyplotdyplotp)plotp)pp)plotp)plotp)tableplotp)tableplotpmplotpmppmplotpmplotspplotsp
pspplotspplot.yplot.yp.yplot.yprod&ctionprod&ctionprodprod&ction
A description of each command can be obtained whilein the SAC pro$ram by typin$
SACE help commandname
*or e.ample, here is what yo& wo&ld see for thecommand, abs(
8/17/2019 SAC Tutorial
10/26
SACE help abs
SAC Command 6eference an&al A?S
SUA6(
a)es the absol&te val&e of each data point!
SNA%(
A?S
566/6 5SSA>5S( 101( No data files read in!
10( "lle$al operation on spectral file
B5A:56 CBAN>5S( :5-"N, :5-A%, :5-5N
LA5S 65"S"/N( Man&ary 8, 198 ersion 8!02SACE
SAC commands can be $ro&ped into several f&nctionalcate$ories(
5.ec&tive *&nction od&le, e!$!,manip&late blac)board variableshelpmacro
+&it:ata#Set od&le:ata *ile od&le, e!$!,
readc&tlisthdr
>raphics 5nvironment od&le, e!$!,.vport
8/17/2019 SAC Tutorial
11/26
title>raphics Control od&le, e!$!,
be$indevicesenddevices
>raphics Action od&le, e!$!,plotplot1plotp)
Spectral Analysis od&le, e!$!,fftplotspbandpass
Unary /perations od&le, e!$!,addm&ls+rt
?inary /perations od&le, e!$!,
mer$eaddf divf
Si$nal Correction od&le, e!$!,rtrendrmeanrotate
decimate5vent Analysis od&le, e!$!,
ohpf oapf
Si$nal eas&rement od&le, e!$!,rmsmar)times
% :2 :ata od&le, e!$!,
8/17/2019 SAC Tutorial
12/26
spectro$ramconto&r
"nstr&ment Correction od&letransfer
S&bprocess "nvo)in$ od&lespe Spectral 5stimation S&bprocess2sss Si$nal Stac)in$ S&bprocess2
Analysis oolsfilterdesi$n
*O Spectr&mbbf)beammap
As yo& can probably tell, there are many thin$s thatyo& can tell the SAC pro$ram to do! Us&ally, it pays to
4play4 with SAC, e.ec&tin$ commands to process a fewseismo$rams to &nderstand what yo& want to do withthe data! /nce yo& have yo&r processin$ clarified, thecommands can be written into a file and &sed as ascript # the SAC macro # to process more data, or to )eepa record of e.actly what yo& did to the data!
last modified 3/05/01
8/17/2019 SAC Tutorial
13/26
SAC Data Formats
SAC can read data in a variety of formats(
SAC ?inary *ormat read2CSS format readcss2S:: format readsdd2ASC"" formats readalpha2
Use the 4help4 facility in SAC or refer to the onlineman&al for detailed descriptions of these formats!
SAC Binary Format
his is the standard format for most seismic data! ASAC binary file consists of a header of ascii data that
defines the followin$ binary seismic data! he datamay consist of e+&ally incremented or irre$&larlyspaced time series data, or comple. spectral data!
SAC header(
he header portion of the file is very important to thedatafile since it contains information on samplin$
interval, station location, event location, $ro&ndmotion components, and all other parametersimportant in earth+&a)e data processin$! heseparameters are &sed by the vario&s SAC commands tomanip&late the data!
*or e.ample, here is a listin$ of the header variables
for NS waveform data recorded at LN from the
8/17/2019 SAC Tutorial
14/26
recent Shelby Co! microearth+&a)e(
Commands/Results Explanation
SACE r LN!5>N!N!1!sacSACE lh
*"L5( LN!5>N!N!1!sac #######################
N-S < 18100 ? < 0!0000000eP00 5 < 1!8098999eP0;
"*-5 < "5 S56"5S*"L5
L55N < 6U5 :5LA < 9!9999998e#0
:5-"N <#@!1800000eP0; :5-A% < G!G00000eP0; :5-5N < 1!08;9;8eP00 /A6O56 < 0
O:A5 < MAN 1 012,;001
O"5 < 01(;;(D9!0 "-5 < ?5>"N "5 O"NS < N OSN < LN C-A < 0!0000000eP00
C-"NC < 9!0000000eP01 SLA < !D@000eP01 SL/ < #8!98000;eP01
5LA < !D;;8001eP01'aitin$
5L/ < #8!9998001eP01
:"S < 1!9;8@D90eP01 A < D!;D81GeP01 ?A < ;!;@01eP0; >CA6C < 1!@;9GDe#01 L/6/O < 6U5
6ead the data filelist the header &sin$ 4lh4
file name
n&mber of points in the filebe$in timeendin$ time
type of fileevenly sampled time seriestime incrementminim&m amplit&de in filema.im&m amplit&de in filemean amplit&de of file
ori$in mar)er timedate M&lian day2U referencereference time e+&ivalence$eneric name of instr&ment
station namecomponent aJim&th relative to northcomponent 4incidence an$le4 reletive tothe vertical
station latit&destation lon$it&de
event latit&de
event lon$it&destation distance from event in )mstation aJim&th from event in de$rees
event bac) aJim&th from station inde$rees$reat circle arc len$th in de$reesparameter enablin$ the file to be modified
SACE
8/17/2019 SAC Tutorial
15/26
Some of the information in the SAC header is comp&teda&tomatically once the appropriate header variableshave been defined! *or e.ample, 4:"S4, 4A4, 4?A4,and 4>CA6C4 are comp&ted once the station and eventlocations are defined by their $eo$raphicalcoordinates!
/ther information is essential for partic&lar SACcommands to wor)! *or e.ample 4C-A4 and4C-"NC4 m&st be defined to &se the 4rotate4 commandto rotate horiJontal seismic data into tan$ential andradial motions or to comp&te a particle motion plot&sin$ 4ppm4!
/nce data are man&ip&lated by SAC, the res< can bewritten to dis), in SAC binary format, &sin$ the 4write44w42 command!
SACE r file1SACE hp b& co 1 n ; p 1SACE w file;
last modified 3/05/01
8/17/2019 SAC Tutorial
16/26
SAC Plotting
A partic&lar stren$th of SAC is in vis&aliJin$ the dataafter it is processed! SAC can be pro$rammed to $ive awide variety of plot types! Us&ally, a $raphics windowis initialiJed to view the plot and commands can be$iven to interactively chan$e plot characteristics! /ncethe plot has been constr&cted in s&itable form, it can be
saved to a SAC $raphics file in 4s$f4 format! hese s$f files are then &s&ally converted to another format, li)e-ostScript, for o&tp&t to a printer or as inp&t to another$raphics pro$ram!
his plot was made &sin$ the followin$ commandswhile wor)in$ on a acintosh at home(
8/17/2019 SAC Tutorial
17/26
Commands/Results Explanation
SACE r mlnt!J mlnt!r mlnt!tSACE .vport 0!1 0!GSACE +dp off SACE .lim D8 0
SACE title on 46otated :ataat LN4SACE .label on 4ime, sec4SACE ylabel on 4:i$italCo&nts4SACE bd te)@01@
SACE p1SACE bd s$f
SACE p1SACE ed s$f SACE s$ftops f001!s$f plot1 1ySACE +
6ead the three data fileschan$e the . direction aspect ratio for theplot
t&rn of the 4+&ic) and dirt plot4 option
only plot time series data between D8 and0 secondsma)e a title
ma)e a label for the . a.isma)e a label for the y a.is
t&rn on the te)@01@ device to plot to te)window on my mac at homeplot all of this st&ff &sin$ 4plot14, view anddecide to save to a file
be$indevice s$f to save to a s$f file&se p1 a$ain, all other commands havebeen saved by SAC
enddevice s$f to finish the s$f plot file&se the s$ftops conversion &tility toconvert the s$f file to -ostScript+&it
At this point " ftpd the plot file to the ac and &sedAdobe "ll&strator to convert the -ostScript plot into a$if file for this webpa$e! Us&ally, " combine a n&mberof SAC plots with Adobe "ll&strator to prod&ce a fi$&re!
Common plottin$ commands incl&de(plot p2 # plot a sin$le seismo$ramplot1 p12 # plot almost any n&mber of seismo$ramsplotp) pp)2 # interactive windowin$ and phasepic)in$ ro&tineppm # plot particle motion for two components of motion &s&ally two horiJontal components2
plotsp # plot the amplit&de and phase spectra!
last modified 3/05/01
8/17/2019 SAC Tutorial
18/26
Blackboard Variables
SAC also has the internal f&nctionality of a calc&lator!he 4?lac)board4 is simply a feat&re that saves &serdefined variables! hese variables can be manip&latedand &sed in calc&lations! 6es<s can be fed into SACcommands for f&rther data processin$! h&s, SAC hasb&ilt into it a simple pro$rammin$ lan$&a$e!
he synta. for manip&latin$ blac)board variables isrelatively simple b&t sometimes obsc&re! 6efer to theSAC man&al for details!
ariables can be defined, eval&ated, and p&t intosimple e+&ations! here are also "*, 5LS5"*, 5LS5statements in addition to :/ loops! Sometimes it is a
real tradeoff whether to write a fancy SAC macro to&tiliJe blac)board variables or K&st &se yo&r favoritepro$rammin$ lan$&a$e to do the same thin$!
5.amples are $iven in the acros section of thesewebpa$es!
last modified 3/05/01
8/17/2019 SAC Tutorial
19/26
acros
A SAC macro is a script of SAC commands! SAC macroscan ta)e several forms dependin$ on how yo& want toimplement them! hese incl&de(
A simple macro file containin$ SAC commandswitho&t )eywords or dependent ar$&mentsA macro with dependent ar$&ments
A macro with )eywords
5.ample 1 # A simple macro based on the plottin$e.ample
macro name = mlntplot How it is used
r mlnt!J mlnt!r mlnt!t.vport 0!1 0!G+dp off
.lim D8 0title on 46otated :ata at LN4
.label on 4ime, sec4ylabel on 4:i$ital Co&nts4
bd s$f p1ed s$f s$ftops f001!s$f plot1 1 y
SACE macro mlntplot
5.ample ; # he same macro driven by dependentar$&ments
8/17/2019 SAC Tutorial
20/26
macro name = mlntplot2 How it is used
r =1 =; =.vport 0!1 0!G+dp off .lim D8 0title on 46otated :ata atLN4
.label on 4ime, sec4ylabel on 4:i$ital Co&nts4
bd s$f p1ed s$f s$ftops f001!s$f plot1 1 y
SACE macro mlntplot; mlnt!J mlnt!r
mlnt!t
5.ample # he same macro driven by )eywords
macro name =
mlntplot3How it is used
=)eys files val&es
r =files
.vport 0!1 0!G+dp off .lim =val&estitle on 46otated :ata at
LN4.label on 4ime, sec4ylabel on 4:i$ital Co&nts4
bd s$f p1
ed s$f s$ftops f001!s$f plot1 1 y
SACE macro mlntplot files mlnt!J mlnt!rmlnt!t val&es D8 0
acros can also call other macros! his is very &sef&lin applyin$ a $eneric operation to many specific datafiles!
Another &sef&l tric), partic&larly when &sin$ SAC with
8/17/2019 SAC Tutorial
21/26
CShells, is to &se the UN"% directed inp&t! *or e.ample,&sin$ the first macro above, we co&ld prod&ce the plotby typin$ the followin$ at the UN"% system prompt(
syspromptE sac;000 Q mlntplot E sac!o&tp&t
4sac!o&tp&t4 is a file that catches all the sac i3o thatwo&ld normally be seen on the screen!
acro e.amples from the SAC files of C!A! Lan$ston #4he tr&th is o&t whereR42
mom7correlate # find the best scale factor betweentwo time series in the least#s+&ares sensedatasynplot!macro # plot data and syntheticseismo$rams to$ether
red&ce!macro # read in a file, red&ce the traveltimeand scale
last modified 3/05/01
8/17/2019 SAC Tutorial
22/26
CS!ell Scripts
he UN"% CShell enables SAC macros to be b&ilt withina CShell script and then r&n! his is partic&larly &sef&lwhen r&nnin$ synthetic seismo$ram codes that o&tp&ttime series in SAC binary format! hese synthetic timeseries can then be processed with SAC with the samedata processin$ performed on real data!
Bere are fo&r CShell Scripts that incorporate SAC inthem to varyin$ de$rees
)intcalc; # prod&ce synthetic seismo$rams from awaven&mber inte$ration pro$ram!
data7model7plot # ma)e the SAC macros to prod&cedata3synthetic comparisons!
pic)set&p;, phasepic); # &se pp) interactively topic) amplit&de and times from seismo$rams! Savethe pic)s in file for more processin$!
last modified 3/05/01
8/17/2019 SAC Tutorial
23/26
"se in Fortran Programs
ime series data can be $enerated in yo&r own fortranand C 2 pro$rams and o&tp&t in SAC binary format!any of my pro$rams &se this capability since it is&sef&l to compare data and synthetic seismo$rams inthe same format! "t also &sef&l to read SAC binary filesto perform more specialiJed f&nctions that SAC does
not incl&de!his is accomplished by called the followin$ "/ro&tines available in the SAC library, 4sac!a4!
rsac1 # reads an evenly spaced data file!rsac; # reads an &nevenly spaced data file!wsac1 # writes an evenly spaced data file!
wsac; # writes an &nevenly spaced data file!
"n addition to these ro&tines, there are a n&mber of s&bro&tines that access or define each SAC headervariable! See the SAC man&al for details!
An Example
Bere is an f pro$ram that constr&cts a $a&ssian timef&nction an o&tp&ts the res< in SAC binary format!
Source Code Explanation
c ###### $a&ss!f pro$ram to create $a&ssian timef&nction CBA6AC5690 ONA5
CBA6AC56 ANS
8/17/2019 SAC Tutorial
24/26
dimension A66A819;2
CBA6AC5680 -ASNA5 Create the far field time f&nction#################### '6"5,1002
100 */6A"N-U time width and time shiftof $a&ssian p&lse(2 65A:,2 twidth,tshift
alpha>2C A66A"2>210 C/N"NU5C########## N/' C65A5 A B5A:56 "N SAC
*/6A!#####################C
C # Set all header fields to their defa< val&es!C CALL N5'B:6 CC # US56 AC"/N( Shown below are incomplete
statements &sedC to define each of the SAC header fields!C Usin$ yo&r own variables, complete thestatements
C which define the SAC header fields thatyo&C want to be in the file! :elete the
remainin$ lines!CC # he definitions for each of these variables canbe fo&nd in the
C appendi. to the SAC Command 6eferencean&al!
C
calc&late the $a&ssianf&nction
Set &p a new SACheader
8/17/2019 SAC Tutorial
25/26
C # *ields which be$in with an 4L4 are lo$ical
fields and m&stC be either !6U5! or !*ALS5!C # *ields which be$in with an 4N4 are inte$erfields!
C # *ields which be$in with an 4"4 are alsointe$ers, b&t can onlyC be set to a limited n&mber of val&es, each
correspondin$C to a specific condition! See the abovementioned appendi.!C # *ields which be$in with a 4O4 are charactervariables of
C len$th 8 &nless otherwise noted!C # All other fields are real!CC # he followin$ fields are re+&ired(C N-S
8/17/2019 SAC Tutorial
26/26
'6"51,;002 ONA5
;00 */6A1%,SAC *"L5 ,A;, BAS ?55N'6"5N / :"SO299 C/N"NU5 S/-
5N:
Bere is the ma)e file &sed to compile this pro$ram(
**LA>S < #$
?"N < 3yo&rdirectory3bin
L"? < =SAC:"623lib$a&ss( $a&ss!f f =**LA>S2 #o =?"N23$a&ss $a&ss!f =L"?23sac!a
Important Note:
At this time 30D3012 C56" does not have a $enerally
available copy of the SAC library, 4sac!a4 or 4sacio!a4,that can be &sed in compilin$ fortran or C pro$rams onSUN Solaris systems! A copy is available at 3teteme)o3local3sac3lib3sac!a if yo& need to compile pro$ramswith SAC "3/ ro&tines!
last modified 3/06/01