hybridMT
The seismic moment tensor is becoming a standard for description of earthquake kinematic source processes in the whole range of magnitudes. Seismic moment tensor inversion allows to estimate the fault plane parameters and the balance between volumetric and nonvolumetric strain in the seismic source. The resolved seismic moment tensors are typically decomposed into volumetric and deviatoric components using various decomposition schemes allowing to understand the detailed physical kinematic processes occurring in the sources regardless of the type of seismicity as well as regardless of its size.
We provide the community with hybridMT moment tensor inversion and refinement software package for MATLAB/shell environment. The command line tool (Windows/Linux) focimt and its MATLAB wrapper focimt.m (which are both described shortly in a separate page) allow performing unconstrained full, deviatoric and doublecouple constrained seismic moment tensor inversions in time domain. The output data may be exported in ASCII format or as MATLAB cell/structure arrays. Also, the output may be exported to a graphical representation of seismic moment tensors in a form of “beach ball” plots. The seismic moment tensors may be refined using hybridmt.m routine when earthquakes form a cluster. The package was thoroughly tested with synthetic data, acoustic emission data from laboratory experiments as well as induced seismicity data from geothermal sites.
Authors/License
Grzegorz Kwiatek and Patricia MartínezGarzón
hybridMT package is licensed under GNU General Public License (GPL).
Referencing
When you find hybridMT package useful, please refer to it in your work:
Kwiatek, G., MartínezGarzón, P. and M. Bohnhoff (2016). HybridMT: A MATLAB/Shell Environment Package for Seismic Moment Tensor Inversion and Refinement. Seismological Research Letters 87 (4), DOI: 10.1785/0220150251. [ Download pdf (1.8 MiB) ]
Download
Current version of hybridMT package is 1.2.2. The hybridMT package may be requested by filling the online form below. After submitting the form, the email will be sent to you with a download link (please check your spam folder if the email will not appear in your mail box after a couple of minutes).
Download hybridMT seismic moment tensor inversion and refinement package
Simply fill in the form below, and verify your email address
and you’ll be sent a link to download our software package.
Documentation
The hybridMT package contains documentation that directly integrates with MATLAB help system (as MATLAB documentation is composed of HTML documents, it can be also open in any web browser). In addition, the PDF documentation is provided in package. Also, you can download the PDF documentation separately from here:
Hybridmtmanual (1.2.1, 1.7 MiB)  hybridMT moment tensor inversion and refinement software package manualFinally, there is a FAQ section just below.
FAQ

What is the “omega” parameter in the focimt input file and how to calculate it?
“omega” parameter which is a part of ASCII input file is basically the area below the first Pwave ground displacement pulse (in time domain) or equivalently the spectral level taken from the amplitude spectrum of ground displacement pulse. The unit of “omega” parameter is [m * s] (meter times second), and it comes from the fact that we multiply the amplitude of first Pwave pulse using ground displacement seismogram in [m] by the half of duration of the first Pwave pulse in [s]. Regardless of whether time or frequency domain was used to extract the “omega” value, the parameter should contain the sign information. The sign of “omega” is in accordance with the seismological convention, i.e. it is positive for the positive first Pwave ground displacement amplitude (i.e. ground motion AWAY from the seismic source) and negative otherwise (ground motion TOWARDS the seismic source).
In case of simple impulsive source time functions it is typically not necessary to calculate the integral of ground displacement first Pwave pulse. Instead, the amplitude D (cf. picture) including sign information of first Pwave pulse may be taken from ground displacement seismogram (the seismogram should be calibrated to [m]) and multiplied by the the rise time (i.e. time interval between the Pwave onset and Pwave amplitude, t_maxt_ons in seconds [s]). In this case, the integral of the pulse is simply replaced by the area of the triangle.

What full moment tensor decomposition scheme is used in focimt.m?
The MATLAB wrapper focimt.m has no option for changing the decomposition scheme, which is currently fixed to Jost and Herrmann’s (1989) approach. However, the focimt application has implemented an alternative decomposition scheme based on Vavrycuk’s (2001) approach. In focimt application this is specified by option d D or d Y (see the documentation of focimt application for details). Therefore, the hardcoded decomposition scheme in focimt.m may be changed from Jost and Herrmann’s to Vavrycuk’s approach simply by changing the following line from (note change from “D” to “Y” in option d):
commandline = ['i ' temp '.txt d DWAFTUMVE o ' temp ' s ' solutions ' n ' normfunc ' ' bbsize ' ' bbformat ' ' bbproj ' ' jacknife ' ' bootstrap ' ' vmodel ' ' ball];
to
commandline = ['i ' temp '.txt d YWAFTUMVE o ' temp ' s ' solutions ' n ' normfunc ' ' bbsize ' ' bbformat ' ' bbproj ' ' jacknife ' ' bootstrap ' ' vmodel ' ' ball];
Future version of focimt.m implement the decomposition switch parameter.
 How should I provide takeoff angle in RAW ASCII file format?

What is the azimuth convention for RAW ASCII file format?
The azimuth of a vector from the seismic hypocenter to the seismic station is measured in degrees, and it is positive from north towards east. 0,90,180, and 270 degrees corresponds to the station located North, East, South, and West from the earthquake hypocenter.

What is the incidence angle convention for RAW ASCII input file?
The angle of incidence in RAW ASCII input file follows the standard seismological convention. The angle of incidence to the sensor is measured in degrees from down direction (towards center of Earth). In other words, the seismic ray pointing directly up (perpendicular towards the surface) has 0 degrees incidence angle and pure horizontal ray (parallel to the surface) has 90 degrees incidence angle.
Note #1: In case of pure horizontal ray (incidence = 90) one should not expect Pwave arrival to be visible on vertical component. Phases with incidence angle = 90 degrees should be disregarded from processing.
Note #2: Large values of incidence angle (>80 degrees) leads to high corrections for “omega” parameter, as the “omega” is divided by the cosine of the angle of incidence. This typically leads to overestimation of total and scalar seismic moment, as well as it may influence the moment tensor decomposition.

Why I get error message on “incorrect expression or statement” when running drawhudsonnet.m or drawstereonet.m?
If you get error similar to this:
>> drawhudsonnet; ??? Error: File: drawhudsonnet.m Line: 119 Column: 3 Expression or statement is incorrectpossibly unbalanced (, {, or [.
it is likely due to the fact that your version of MATLAB does not support empty output arguments that are specified in MATLAB as “~” (tilde character). If possible, please update your MATLAB to the newest version that handles empty output arguments. Alternatively, please change every null output variable “~” to any valid and not used variable name, e.g. “dummy”:
[~,DD] = eig(M);
to
[dummy,DD] = eig(M);
This problem will be resolved in future version of hybridMT.

Why I receive error messages “Argument ‘###’ failed validation with error: ####”
Consider a scenario of executing the drawstereonet.m function:
[X,Y] = drawstereonet([10 20 30 40],[50 60 70 80]); ??? Error using ==> drawstereonet at 43 Argument 'AZM' failed validation with error: Undefined function or method 'ismatrix' for input arguments of type 'double'.
This error results from the fact your MATLAB version does not contain ismatrix() routine. If it is possible, please update the MATLAB to the newest version. Alternatively, you can try to disable the validation routine. In case of example above, by changing line:
p.addOptional('AZM', [], @(x) ismatrix(x) && isnumeric(x) );
to:
p.addOptional('AZM', [], @(x) isnumeric(x) );