Computing Resources in ESCI

Unix Software: Scientific: CWP

Description

The CWP (Center for Waveform Phenomena) is a freeware seismic data processing package from the Colorodo School of Mines.

Location

/usr/site/cwp

Commands

This package contains too many commands to document individually in detail. Additionally, the individual commands do not each have their own man pages. Some are self-documented. The CWP package provides some nice tools for navigating its many features. Here is the output of the "suname" program:
 -----  CWP Free Programs -----   
CWPROOT=/usr/site/cwp

Mains: 

In CWPROOT/src/cwp/main:
* CTRLSTRIP - Strip non-graphic characters
* DOWNFORT - change Fortran programs to lower case, preserving strings
* FCAT - fast cat with 1 read per file 
* ISATTY - pass on return from isatty(2)
* MAXINTS - Compute maximum and minimum sizes for integer types 
* PAUSE - prompt and wait for user signal to continue
* T - time and date for non-military types
* UPFORT - change Fortran programs to upper case, preserving strings

In CWPROOT/src/par/main:
A2B - convert ascii floats to binary 				
B2A - convert binary floats to ascii				
DZDV - determine depth derivative with respect to the velocity	",  
FARITH - File ARITHmetic -- perform simple arithmetic with binary files
FTNSTRIP - convert a file of floats plus record delimiters created 	
H2B - convert 8 bit hexidecimal floats to binary		
KAPERTURE - generate the k domain of a line scatterer for a seismic array
MAKEVEL - MAKE a VELocity function v(x,y,z)				
MKPARFILE - convert ascii to par file format 				
PRPLOT - PRinter PLOT of 1-D arrays f(x1) from a 2-D function f(x1,x2)
RAYT2D - traveltime Tables calculated by 2D paraxial RAY tracing	
RECAST - RECAST data type						
RESAMP - RESAMPle the 1st dimension of a 2-dimensional function f(x1,x2)
SMOOTH2 --- SMOOTH a uniformly sampled 2d array of data, within a user-
SMOOTH3D - 3D grid velocity SMOOTHing by the damped least squares	
SMOOTHINT2 --- SMOOTH non-uniformly sampled INTerfaces, via the damped
SUBSET - select a SUBSET of the samples from a 3-dimensional file	
SWAPBYTES - SWAP the BYTES of various  data types			
TRANSP - TRANSPose an n1 by n2 element matrix				
UNIF2 - generate a 2-D UNIFormly sampled velocity profile from a layered
UNISAM - UNIformly SAMple a function y(x) specified as x,y pairs	
UNISAM2 - UNIformly SAMple a 2-D function f(x1,x2)			
VELCONV - VELocity CONVersion					
VELPERT - estimate velocity parameter perturbation from covariance 	
VTLVZ -- Velocity as function of Time for Linear V(Z);		
WKBJ - Compute WKBJ ray theoretic parameters, via finite differencing	
XY2Z - converts (X,Y)-pairs to spike Z values on a uniform grid	
z2xyz - convert binary floats representing Z-values to ascii	

In CWPROOT/src/psplot/main:
PSBBOX - change BoundingBOX of existing PostScript file	
PSCONTOUR - PostScript CONTOURing of a two-dimensional function f(x1,x2)
PSCUBE - PostScript image plot of a data CUBE				
PSEPSI - add an EPSI formatted preview bitmap to an EPS file		
PSGRAPH - PostScript GRAPHer						
PSIMAGE - PostScript IMAGE plot of a uniformly-sampled function f(x1,x2)
PSLABEL - output PostScript file consisting of a single TEXT string	
PSMERGE - MERGE PostScript files					
PSMOVIE - PostScript MOVIE plot of a uniformly-sampled function f(x1,x2,x3)
PSWIGB - PostScript WIGgle-trace plot of f(x1,x2) via Bitmap		
PSWIGB - PostScript WIGgle-trace plot of f(x1,x2) via Bitmap		
PSWIGP - PostScript WIGgle-trace plot of f(x1,x2) via Polygons	

In CWPROOT/src/xplot/main:
* LCMAP - List Color Map of root window of default screen 
* LCPROP - List PROPerties of root window of default screen of display 
* SCMAP - set default standard color map (RGB_DEFAULT_MAP)
XCONTOUR - X CONTOUR plot of f(x1,x2) via vector plot call		
XCONTOUR - X CONTOUR plot of f(x1,x2) via vector plot call		
* XESPB - X windows display of Encapsulated PostScript as a single Bitmap
* XEPSP - X windows display of Encapsulated PostScript
XIMAGE - X IMAGE plot of a uniformly-sampled function f(x1,x2)       	
XPICKER - X wiggle-trace plot of f(x1,x2) via Bitmap with PICKing	
* XPSP - Display conforming PostScript in an X-window
XWIGB - X WIGgle-trace plot of f(x1,x2) via Bitmap			

In CWPROOT/src/Xtcwp/main:
XGRAPH - X GRAPHer							
XMOVIE - image one or more frames of a uniformly sampled function f(x1,x2)
XRECTS - plot rectangles on a two-dimensional grid			

In CWPROOT/src/Xmcwp/main:
* FFTLAB - Motif-X based graphical 1D Fourier Transform

In CWPROOT/src/su/graphics/psplot:
SUPSCONTOUR - PostScript CONTOUR plot of a segy data set		
SUPSCUBE - PostScript CUBE plot of a segy data set			
SUPSGRAPH - PostScript GRAPH plot of a segy data set			
SUPSIMAGE - PostScript IMAGE plot of a segy data set			
SUPSMAX - PostScript of the MAX, min, or absolute max value on each trace
SUPSMOVIE - PostScript MOVIE plot of a segy data set			
SUPSWIGB - PostScript Bit-mapped WIGgle plot of a segy data set	
SUPSWIGP - PostScript Polygon-filled WIGgle plot of a segy data set	

In CWPROOT/src/su/main:
BHEDTOPAR - convert a Binary tape HEaDer file to PAR file format	
DT1TOSU - Convert ground-penetrating radar data in the Sensors & Software
SEGDREAD - read an SEG-D tape						
SEGYCLEAN - zero out unassigned portion of header		
SEGYHDRS - make SEG-Y ascii and binary headers for segywrite		
SEGYREAD - read an SEG-Y tape                                         
SEGYWRITE - write an SEG-Y tape                                       
SETBHED - SET the fields in a SEGY Binary tape HEaDer file, as would be
SU3DCHART - plot x-midpoints vs. y-midpoints for 3-D data	
SUABSHW - replace header key word by its absolute value	
SUACOR - auto-correlation						
SUADDHEAD - put headers on bare traces and set the tracl and ns fields
SUADDNOISE - add noise to traces					
SUAMP - output amp, phase, real or imag trace from		
SUASCII - print non zero header values and data		
SUATTRIBUTES - trace ATTRIBUTES instantanteous amplitude, phase,	
SUBFILT - apply Butterworth bandpass filter 			
SUCHART - prepare data for x vs. y plot			
SUCHW - Change Header Word using one or two header word fields	
SUCONV - convolution with user-supplied filter			
SUDIPFILT - DIP--or better--SLOPE Filter in f-k domain	
SUDIVCOR - Divergence (spreading) correction				
SUDIVSTACK -  Diversity Stacking using either average power or peak   
SUDMOFK - DMO via F-K domain (log-stretch) method for common-offset gathers
SUDMOTX - DMO via T-X domain (Kirchhoff) method for common-offset gathers
SUEDIT - examine segy diskfiles and edit headers			
SUFDMOD2 - Finite-Difference MODeling (2nd order) for acoustic wave equation
SUFFT - fft real time traces to complex frequency traces	
SUFILTER - applies a zero-phase, sine-squared tapered filter		
SUFLIP - flip a data set in various ways			
SUFRAC -- take general (fractional) time derivative or integral of	
SUGABOR -  Outputs a time-frequency representation of seismic data via
SUGAIN - apply various types of gain to display traces                
SUGAZMIG - SU version of Jeno GAZDAG's phase-shift migration 		
SUGET  - Connect SU program to file descriptor for input stream.	
SUGETHW - sugethw writes the values of the selected key words		
SUHARLAN - signal-noise separation by the invertible linear		
SUHILB - Hilbert transform					
SUIFFT - fft complex frequency traces to real time traces	
SUILOG -- time axis inverse log-stretch of seismic traces	
SUIMP2D - generate shot records for a line scatterer	
SUIMP3D - generate inplane shot records for a point 	
SUINTERP - interpolate traces using automatic event picking		
SUINTVEL - convert stacking velocity model to interval velocity model	
SUK1K2FILTER - symmetric box-like K-domain filter defined by the	
SUKDMIG2D - Kirchhoff Depth Migration of 2D poststack/prestack data	
SUKDSYN2D - Kirchhoff Depth SYNthesis of 2D seismic data from a	
SUKILL - zero out traces					
SULOG -- time axis log-stretch of seismic traces		
SUMAX - get trace by trace local/global maxima, minima, or absolute maximum
SUMEDIAN - MEDIAN filter about a user-defined polygonal curve with	
SUMIGPS - MIGration by Phase Shift with turning rays			
SUMIGTK - MIGration via T-K domain method for common-midpoint stacked data
SUMIX - compute weighted moving average (trace MIX) on a panel	
SUMUTE - mute above (or below) a user-defined polygonal curve with	", 
SUNMO - NMO for an arbitrary velocity function of time and CDP	     
SUNULL - create null (all zeroes) traces	 		
SUOLDTONEW - convert existing su data to xdr format		
SUOP - do unary arithmetic operation on segys 		
SUOP2 - do a binary operation on two data sets			
SUPACK1 - pack segy trace data into chars			
SUPACK2 - pack segy trace data into 2 byte shorts		
SUPASTE - paste existing SEGY headers on existing data	
SUPEF - Wiener predictive error filtering				
SUPGC   -   Programmed Gain Control--apply agc like function	
SUPLANE - create common offset data file with up to 3 planes	
SUPUT - Connect SU program to file descriptor for output stream.	
SUQUANTILE - display some quantiles or ranks of a data set            
SURADON - compute forward or reverse Radon transform or remove multiples
SURAMP - Linearly taper the start and/or end of traces to zero.	
SURANGE - get max and min values for non-zero header entries	
SURECIP - sum opposing offsets in prepared data (see below)	
SUREDUCE - convert traces to display in reduced time		", 
SUREFLPSV - REFlectivity modeling of either PSV or SH waves for layered
SURELAN - compute residual-moveout semblance for cdp gathers based	
SURESAMP - Resample in time					
SURESSTAT - Surface consistent source and receiver statics calculation
SUSHAPE - Wiener shaping filter					
SUSHW - Set one or more Header Words using trace number, mod and	
SUSORT - sort on any segy header keywords			
SUSPECFK - F-K Fourier SPECtrum of data set			
SUSPECFX - Fourier SPECtrum (T -> F) of traces 		
SUSPECK1K2 - 2D (K1,K2) Fourier SPECtrum of (x1,x2) data set		
SUSPIKE - make a small spike data set 			
SUSTACK - stack adjacent traces having the same key header word
SUSTATIC - Elevation static corrections, apply corrections from	
SUSTKVEL - convert constant dip layer interval velocity model to the	
SUSTOLT - Stolt migration for stacked data or common-offset gathers	
SUSTRIP - remove the SEGY headers from the traces		
SUSWAPBYTES - SWAP the BYTES in SU data to convert data from big endian
SUSYNCZ - SYNthetic seismograms for piecewise constant V(Z) function	
SUSYNLV - SYNthetic seismograms for Linear Velocity function		
SUSYNLVCW - SYNthetic seismograms for Linear Velocity function	
SUSYNVXZ - SYNthetic seismograms of common offset V(X,Z) media via	
SUSYNVXZCS - SYNthetic seismograms of common shot in V(X,Z) media via	
SUTAB - print non zero header values and data for non-graphic terminals
SUTAPER - Taper the edge traces of a data panel to zero.	
 SUTAUP - forwared and inverse T-X and F-K global slant stacks	
SUTSQ -- time axis time-squared stretch of seismic traces	
SUTTOZ - resample from time to depth					
SUTVBAND - time-variant bandpass filter (sine-squared taper)  
SUUNPACK1 - unpack segy trace data from chars to floats	
SUUNPACK2 - unpack segy trace data from shorts to floats	
SUVCAT - append one data set to another			
SUVELAN - compute stacking velocity semblance for cdp gathers		     
SUVIBRO - Generates a Vibroseis sweep (linear, linear-segment,
SUVLENGTH - Adjust variable length traces to common length   	
SUWIND - window traces by key word					
SUXCOR - correlation with user-supplied filter			
SUXEDIT - examine segy diskfiles and edit headers			
SUZERO -- zero-out data within a time window	 		

In CWPROOT/src/su/graphics/psplot:
SUPSCONTOUR - PostScript CONTOUR plot of a segy data set		
SUPSCUBE - PostScript CUBE plot of a segy data set			
SUPSGRAPH - PostScript GRAPH plot of a segy data set			
SUPSIMAGE - PostScript IMAGE plot of a segy data set			
SUPSMAX - PostScript of the MAX, min, or absolute max value on each trace
SUPSMOVIE - PostScript MOVIE plot of a segy data set			
SUPSWIGB - PostScript Bit-mapped WIGgle plot of a segy data set	
SUPSWIGP - PostScript Polygon-filled WIGgle plot of a segy data set	

In CWPROOT/src/su/graphics/xplot:
SUXCONTOUR - X CONTOUR plot of Seismic UNIX datafile via vector plot call
SUXCONTOUR - X CONTOUR plot of Seismic UNIX datafile via vector plot call
SUXGRAPH - X-windows GRAPH plot of a segy data set			
SUXIMAGE - X-windows IMAGE plot of a segy data set			
SUXMAX - X-windows graph of the MAX, min, or absolute max value on	
SUXMOVIE - X MOVIE plot of a segy data set 				
SUXPICKER - X-windows  WIGgle plot PICKER of a segy data set		
SUXWIGB - X-windows Bit-mapped WIGgle plot of a segy data set	

In CWPROOT/src/tri/main:
TRI2UNI - convert a TRIangulated model to UNIformly sampled model	
TRIMODEL - make a triangulated sloth (1/velocity^2) model                  		
UNI2TRI - convert UNIformly sampled model to a TRIangulated model	

In CWPROOT/src/xtri:
SXPLOT - X Window plot a triangulated sloth function s(x1,x2)		

In CWPROOT/src/tri/graphics/psplot:
SPSPLOT - plot a triangulated sloth function s(x,z) via PostScript	

Shells: 

In CWPROOT/src/cwp/shell:
# Grep  - recursively call egrep in pwd
# ARGV - give examples of dereferencing char **argv
# COPYRIGHT - insert CSM COPYRIGHT lines at top of files in working directory
# CPALL , RCPALL - for local and remote directory tree/file transfer
# CWPFIND - look for files with patterns in CWPROOT/src/cwp/lib
# DIRTREE - show DIRectory TREE
# FILETYPE - list all files of given type
# NEWCASE - Changes the case of all the filenames in a directory, dir
# OVERWRITE - copy stdin to stdout after EOF
# PRECEDENCE - give table of C precedences from Kernighan and Ritchie
# REPLACE - REPLACE string1 with string2  in files
# THIS_YEAR - print the current year
# TIME_NOW - prints time in ZULU format with no spaces 
# TODAYS_DATE - prints today's date in ZULU format with no spaces 
# USERNAMES - get list of all login names
# VARLIST - list variables used in a Fortran program
# ZAP - kill processes by name

In CWPROOT/src/par/shell:
# GENDOCS - generate complete list of selfdocs in latex form
# UPDATEDOC - put self-docs in ../doc/Stripped and ../doc/Headers
# UPDATEDOCALL - put self-docs in ../doc/Stripped
# UPDATEHEAD - update ../doc/Headers/Headers.all

In CWPROOT/src/psplot/shell:
# MERGE2 - put 2 standard size PostScript figures on one page
# MERGE4 - put 4 standard size PostScript plots on one page

In CWPROOT/src/su/shell:
# LOOKPAR - show getpar lines in SU code with defines evaluated
# MAXDIFF - find absolute maximum difference in two segy data sets
# RECIP - sum opposing (reciprocal) offsets in cdp sorted data
# RMAXDIFF - find percentage maximum difference in two segy data sets
# SUAGC - perform agc on SU data 
# SUBAND - Trapezoid-like Sin squared tapered Bandpass filter via  SUFILTER
# SUDIFF, SUSUM, SUPROD, SUQUO, SUPTDIFF, SUPTSUM,
# SUDOC - get DOC listing for code
# SUENV - Instantaneous amplitude, frequency, and phase via: SUATTRIBUTES
# SUFIND - get info from self-docs
# SUGENDOCS - generate complete list of selfdocs in latex form
# SUHELP - list the CWP/SU programs and shells
# SUKEYWORD -- guide to SU keywords in segy.h
# SUNAME - get name line from self-docs
# UNGLITCH - zonk outliers in data

Libs: 

In CWPROOT/src/cwp/lib:
ABEL - Functions to compute the discrete ABEL transform:
AIRY - Approximate the Airy functions  Ai(x), Bi(x) and their respective
ALLOC - Allocate and free multi-dimensional arrays
ANTIALIAS - Butterworth anti-aliasing filter
AXB - Functions to solve a linear system of equations Ax=b by LU
BIGMATRIX - Functions to manipulate 2-dimensional matrices that are too big 
BUTTERWORTH - Functions to design and apply Butterworth filters:
COMPLEX - Functions to manipulate complex numbers
COMPLEXD - Functions to manipulate double-precision complex numbers
COMPLEXF  - Subroutines to perform operations on complex numbers.
CONVOLUTION - Compute z = x convolved with y
CUBICSPLINE - Functions to compute CUBIC SPLINE interpolation coefficients
DBLAS - Double precision Basic Linear Algebra subroutines
DGE - Double precision Gaussian Elimination matrix subroutines  adapted
FRANNOR - functions to generate a pseudo-random float normally distributed
FRANUNI - Functions to generate a pseudo-random float uniformly distributed
HANKEL - Functions to compute discrete Hankel transforms
HILBERT - Compute Hilbert transform y of x
HOLBERG1D - Compute coefficients of Holberg's 1st derivative filter
INTCUB - evaluate y(x), y'(x), y''(x), ... via piecewise cubic interpolation
INTL2B - bilinear interpolation of a 2-D array of bytes
INTLIN - evaluate y(x) via linear interpolation of y(x[0]), y(x[1]), ...
INTSINC8 - Functions to interpolate uniformly-sampled data via 8-coeff. sinc
INTTABLE8 -  Interpolation of a uniformly-sampled complex function y(x)
MKDIFF - Make an n-th order DIFFerentiator via Taylor's series method.
MKHDIFF - Compute filter approximating the bandlimited HalF-DIFFerentiator.
MKSINC - Compute least-squares optimal sinc interpolation coefficients.
MNEWT - Solve non-linear system of equations f(x) = 0 via Newton's method
PFAFFT - Functions to perform Prime Factor (PFA) FFT's, in place
POLAR - Functions to map data in rectangular coordinates to polar and vise versa
PRINTERPLOT - Functions to make a printer plot of a 1-dimensional array
QUEST - Functions to ESTimate Quantiles:
RESSINC8 - Functions to resample uniformly-sampled data  via 8-coefficient sinc
RFWTVA - Rasterize a Float array as Wiggle-Trace-Variable-Area.
RFWTVAINT - Rasterize a Float array as Wiggle-Trace-Variable-Area, with
SBLAS - Single precision Basic Linear Algebra Subroutines
SCAXIS - compute a readable scale for use in plotting axes
SGA - Single precision general matrix functions adapted from LINPACK FORTRAN:
SHFS8R - Shift a uniformly-sampled real-valued function y(x) via
SINC - Return SINC(x) for as floats or as doubles
SORT - Functions to sort arrays of data or arrays of indices
SQR - Single precision QR decomposition functions adapted from LINPACK FORTRAN:
STOEP - Functions to solve a symmetric Toeplitz linear system of equations
SWAPBYTE - Functions to SWAP the BYTE order of binary data 
TEMPORARY_FILENAME - Creates a file name in a user-specified directory.
TRIDIAGONAL - Functions to solve tridiagonal systems of equations Tu=r for u.
VANDERMONDE - Functions to solve Vandermonde system of equations Vx=b 
WAVEFORMS	Subroutines to define some wavelets for modeling of seimic
XCOR - Compute z = x cross-correlated with y
XINDEX - determine index of x with respect to an array of x values
YCLIP - Clip a function y(x) defined by linear interpolation of the
YXTOXY - Compute a regularly-sampled, monotonically increasing function x(y)

In CWPROOT/src/par/lib:
VND *VNDop(int mode, long lwmax, int ndim, long *N, long npanels, 
ATOPKGE - convert ascii to arithmetic and with error checking
DOCPKGE - Function to implement the CWP self-documentation facility
EALLOC - Allocate and free multi-dimensional arrays with error reports.
ERRPKGE - routines for reporting errors
FILESTAT - Functions to determine and output the type of a file from file
GETPARS - Functions to GET PARameterS from the command line. Numeric
MODELING - Seismic Modeling Subroutines for SUSYNLV and clones
SMOOTH - Functions to compute smoothing of 1-D or 2-D input data
SUBCALLS - routines for system functions with error checking
SYSCALLS - routines for SYSTEM CALLs with error checking

In CWPROOT/src/su/lib:
FGETTR - Routines to get an SU trace from a file 
FPUTTR - Routines to put an SU trace to a file 
HDRPKGE - routines to access the SEGY header via the hdr structure.
TABPLOT - TABPLOT selected sample points on selected trace
VALPKGE - routines to handle variables of type Value

In CWPROOT/src/psplot/lib:
BASIC - Basic C function interface to PostScript
PSAXESBOX - Functions to draw PostScript axes and estimate bounding box
PSAXESBOX3 -  Functions draw an axes box via PostScript, estimate bounding box
PSCONTOUR - draw contour of a two-dimensional array via PostScript
PSCUBEAXESBOX - Draw an axes box for cube via PostScript
PSWIGGLE - draw wiggle-trace with (optional) area-fill via PostScript

In CWPROOT/src/xplot/lib:
AXESBOX - Functions to draw axes in X-windows graphics
COLORMAP - Functions to manipulate X colormaps:
IMAGE - Function for making the image in an X-windows image plot
RUBBERBOX -  Function to draw a rubberband box in X-windows plots
WINDOW - Function to create a window in X-windows graphics
XCONTOUR - draw contour of a two-dimensional array via X vectorplot calls
XCONTOUR - draw contour of a two-dimensional array via X vectorplot calls

In CWPROOT/src/Xtcwp/lib:
AXES - the Axes Widget
COLORMAP - Functions to manipulate X colormaps:
FX - Functions to support floating point coordinates in X
MISC - Miscellaneous X-Toolkit functions
RESCONV - general purpose resource type converters
RUBBERBOX -  Function to draw a rubberband box in X-windows plots

In CWPROOT/src/Xmcwp/lib:
RADIOBUTTONS -  convenience functions creating and using radio buttons
SAMPLES - Motif-based Graphics Functions

In CWPROOT/src/tri/lib:
CHECK - CHECK triangulated models
CIRCUM - define CIRCUMcircles for Delaunay triangulation
COLINEAR - determine if edges or vertecies are COLINEAR in triangulated
CREATE - create model, boundary edge triangles, edge face, edge vertex, add
DELETE - DELETE vertex, model, edge, or boundary edge from triangulated model
DTE - Distance to Edge
FIXEDGES - FIX or unFIX EDGES between verticies
INSIDE -  Is a vertex or point inside a circum circle, etc. of a triangulated
NEAREST - NEAREST edge or vertex in triangulated model
PROJECT - project to edge in triangulated model
READWRITE - READ or WRITE a triangulated model

In CWPROOT/src/cwputils:
CPUSEC - return cpu time (UNIX user time) in seconds
CPUTIME - return cpu time (UNIX user time) in seconds using ANSI C built-ins
WALLSEC - Functions to time processes
WALLTIME - Function to show time a process takes to run

To search on a program name fragment, run:
     "suname name_fragment"

For more information run: "program_name"

  Items labeled with an asterisk (*) are C programs that may
  or may not have a self documentation feature.

  Items labeled with a pound sign (#) are shell scripts that may,
  or may not have a self documentation feature.

 To find information about these codes type:   sudoc program_name
-----------------------------------------------------------------

Documentation

CWP/SU Homepage

Additionally, as mentioned above, you can run "sudoc program_name" on each command listed as being self-documented for information about its syntax and options. Running 'suhelp' gives an introductory overview. IMPORTANT: Make sure the environment variable 'CWPROOT' is set to the location of the CWP/SU package, '/usr/site/cwp'. To set this environment variable: if you are running the C-shell (default), run 'set CWPROOT=/usr/site/cwp'; if you are running Bash or the Korn Shell, run 'export CWPROOT=/usr/site/cwp'.

See Also


Questions? Comments? Please contact Mary Cochran.