Beginning in early 2017 I started the development of what is best
thought of as a three-component seismogram variant of seismic
unix. The concept this package uses is the classic
idea of UNIX filters. That is the main thing this has
in common with seismic unix. Everything else is completely
different. The package utilizes the SEISPP library
described below, but build on the generic concept of modules
working on a data stream.
Click here to get to the
home page for this package.
Since 2002 most of my work has utilized the C++ language. I
am not an evangelist, but was unquestionably a convert to object
oriented programming at that time as all my recent work has
utilized object-oriented methods as I judged them
appropriate. Objects are not described well by
conventional, linear documentations like Unix man pages, but are
more readily documented with hypertext. The following are
hypertext documents of current elements of my C++ library
SEISPP is my SEISmic C++ (PP) library. It contains API definitions for an extensive list of seismology-oriented data objects. Some ones worth highlighting are; TimeSeries, TimeSeriesEnsemble, ThreeComponentSeismogram, and ThreeComponentEnsemble. These define a general API for working with seismic data. All make extensive use (through inheritance) of another, common concept in seismic process: auxiliary data attributes commonly stored in fixed header fields. Here I have generalized this concept to a object I call Metadata. This object provides methods to access an arbitrary, variable length set of header parameters. These parameters can be loaded by different methods in constructors for each of the seismic data types. The library is evolving with more specialized objects that do specific things to seismic data. Two important recent developments are a generalized stacker defined the Stack object and the MultichannelCorrelator object that generalizes the concept of cross-correlation of an ensemble of single-channel seismogram (TimeSeries objects held in a TimeSeriesEnsemble).
The one-dimensional interpolator library (INTERPOLATOR1D) is a procedural library of a collection one-dimensional interpolations routines. It is intended to easily convert between regular and irregular grids. There are overloaded functions to take care of different ways of storing vectors of the dependent and independent variables. The core of this library was blatantly stolen from Igor Mirozov.
The GCLgrid library is an object-oriented implementation of 2D and 3D georeferenced grids. I use this library extensively in a plane wave migration code I plan to release when I believe it is stable and in the pmelgrid 3d location program. It has a lot of other potential applications included a planned development for storing 3D travel time tables. The concepts behind the algorithm are described in the following recent publication:
Fan, C., G. L. Pavlis, and K. Tuncay (2006). GCLGRID: A three-dimensional geographical curvilinear grid library for computational seismology, Computers in Geosciences, 32, pp. 371-381.
The dmatrix
library is a lightweight, simple object for working with dense
matrices. There are numerous comparable implementation of
this on the web that could be used as alternatives, but I use this
one extensively. It is used, for example, to store data in
the ThreeComponentSeismogram
object as a 3 by Nsample matrix.
During development of some modeling codes for USArray and work on
the STEEP project in Alaska I developed suite of general C++
objects for handling geographically referenced objects other
beyond the grid objects that were the core of the GCLgrid
library. The documentation for these objects is
admittedly incomplete but pages produced by Doxygen can be found here.
Some things you will find there are implementations for a masked
GCLgrid object, general polygonal surfaces in 3D, some special C++
classes for plate motion models, and a C++ API to
Crust1.0.
In the 1990s Lorie Bear developed a series of processing methods
based on the concept of multiwavelets. I implemented
pieces of her work and extended some of her ideas in some nasty C
code I developed in the early 2000s. Starting in late
2015 I realized that much of that old C code could be made more
approachable through a C++ API. The multiwavelet
library is an attempt to do that. One of the novel
concepts in that library is the idea of a particle motion time
series (PMTimeSeries).
The Doxygen pages for this library can be found here.
I am developing some manuals for applications programs I have developed. Here is the current list: