This plugin allows the use of traditionnal Hypo71PC locator with SeisComP3
Co-financed by the European Union and le Ministère de l'Ecologie, du Développement Durable, des Transports et du Logement (http://tsuareg.ipgp.fr, http://www.interreg-caraibes.org), developed by OVSM (IPGP).
The Hypo71 locator algorithm has been implemented into SeisComP3 through the plugin mechanism. A new plugin hypo71 contains the LocatorInterface implementation for Hypo71.
This plugin uses a slightly modified Hypo71 version from Alexandre Nercessian (IPGP) which allows negative earthquake depth (above sea level) and negative stations altitude (below sea level - OBS).
When receiving a list of arrivals to locate, the plugin builds a Hypo71 input file with informations from the station inventory and configured profile. It then runs Hypo71, reads the output file and sends the results (location, uncertainties, RMS, pick residuals ...) to SeisComP3.
If several trial depths are configured, the plugin will run as many Hypo71 rushes as configured depths. Then all the results are read, and a decision is made on the best one, based on location RMS and uncertainty. A final run is then made with the best result depth as trial depth.
The plugin allows the user to set up as many profiles as needed. A profile contains all the information relative to the velocity model and Hypo71 iteration parameters.
This allows the user to tune the behaviour of Hypo71 to what he needs. If no profiles are set-up, the plugin will use default Hypo71 profile, according to example shown in Hypo71 first publication. Some of this default Hypo71 parameters have been altered to allow more and finer iteration, since computer power is now far above what was available in the 1970's.
After running Hypo71, the output is converted into a SC3 (SC3ML) origin object including some error measures. The following table shows how the Hypo71 error measures are mapped to the SC3 data model:
SC3 | Hypo71 |
---|---|
Origin.latitude.uncertainty | ERH/sqrt(2) |
Origin.longitude.uncertainty | ERH/sqrt(2) |
Origin.depth.uncertainty | ERZ |
Origin.originQuality.standardError | _ |
Origin.originQuality.secondaryAzimuthalGap | _ |
Origin.originQuality.usedStationCount | usedStationCount |
Origin.originQuality.associatedStationCount | associatedStationCount |
Origin.originQuality.associatedPhaseCount | associatedPhaseCount |
Origin.originQuality.usedPhaseCount | associatedPhaseCount |
Origin.originQuality.depthPhaseCount | depthPhaseCount |
Origin.originQuality.minimumDistance | km2deg(Tdist.front) |
Origin.originQuality.maximumDistance | km2deg(Tdist.back) |
Origin.originQuality.medianDistance | km2deg(~Tdist) |
Origin.originQuality.groundTruthLevel | QUALITY |
Origin.originUncertainty.horizontalUncertainty | _ |
Origin.originUncertainty.minHorizontalUncertainty | _ |
Origin.originUncertainty.maxHorizontalUncertainty | _ |
Origin.originUncertainty.azimuthMaxHorizontalUncertainty | _ |
ConfidenceEllipsoid.semiMajorAxisLength | _ |
ConfidenceEllipsoid.semiMinorAxisLength | _ |
ConfidenceEllipsoid.semiIntermediateAxisLength | _ |
ConfidenceEllipsoid.majorAxisPlunge | _ |
ConfidenceEllipsoid.majorAxisAzimuth | _ |
ConfidenceEllipsoid.majorAxisRotation | _ |
The Hypo71 plugin is installed under share/plugins/hypo71.so. It provides a new implementation of the LocatorInterface with the name Hypo71.
To add the plugin to a module add it to the modules configuration, either modulename.cfg or global.cfg:
plugins = ${plugins}, hypo71
All output is stored in the configured HYPO71ROOT.
The following file are stored:
In addition to the native Hypo71 output a SC3 origin object is created and returned to the calling instance. Usually this object is then sent via messaging.
To add the plugin to an application such as scolv or screloc, add the plugin name to the list of plugins that are loaded (e.g. scolv.cfg):
plugins = ${plugins}, hypo71
Futhermore add the plugin configuration:
########################################################
############# Hypo71 plugin configuration ##############
########################################################
# Hypo71 root directory (working directory)
HYPO71ROOT = ${HOME}/hypo71
# Hypo71 input file to process (generated by plugin)
hypo71.inputFile = ${HYPO71ROOT}/HYPO71.INP
# Hypo71 log file to store ZTR calculation and final results
hypo71.logFile = ${HYPO71ROOT}/HYPO71.LOG
# Hypo71 output file to read results from (generated by binary)
hypo71.outputFile = ${HYPO71ROOT}/HYPO71.PRT
# Hypo71 script called by plugin
hypo71.hypo71ScriptFile = ${HYPO71ROOT}/run.sh
# Hypo71 binary
hypo71.hypo71BinaryFile = ${HYPO71ROOT}/h71.bin
# Hypo71 default profile
hypo71.defaultControlFile = ${HYPO71ROOT}/profiles/default.hypo71.conf
# Hypo71 origin patternID
hypo71.publicID = Hypo71.@time/%Y%m%d%H%M%S.%f@.@id@
# Should we use the custom patternID ?
hypo71.useHypo71PatternID = false
# Hypo71 custom profiles examples
hypo71.profiles = ModelA
hypo71.profile.Tectonic.earthModelID = "My Velocity Model A"
hypo71.profile.Tectonic.methodID = Hypo71PC
hypo71.profile.Tectonic.controlFile = ${HYPO71ROOT}/profiles/profile.a.conf
Copy the content of config/hypo71/ in ${HOME}/hypo71/ Verify that everything is properly set up in the script ${HOME}/hypo71/run.sh
#!/bin/bash
HYPO71PC_BINARY=h71.bin
# Jumping into the right directory
cd ${HOME}/hypo71/
# Executing binary with input file as argument
./$HYPO71PC_BINARY < input
Add a symlink from the Hypo71PC binary to the hypo71 working directory :
ln -s ${HOME}/seiscomp3/bin/Hypo71PC ${HOME}/hypo71/h71.bin
Verify that everything is properly set up in the file ${HOME}/hypo71/input
HYPO71.INP
HYPO71.PRT
HYPO71.OUT
Notice the 3 blank lines at the end of "input" file, those are not to be removed.
Finally set-up your Hypo71 profile (${HOME}/hypo71/profiles/profile.a.conf
############################################################
## HYPO71 SeisComP3 Plugin ##
## @OVSM-IPGP ##
## ##
############################################################
## This profile is based on Dorel velocity model for French Antilles
## It allows several iterations at different starting depth for deep and crustal earthquakes
##############
# Reset List #
##############
TEST(01) = .1 # sec # cutoff RMS value under which Jeffrey's weghting of residuals is not used
TEST(02) = 50. # km #
TEST(03) = 0.2 # critical F-value for the stepwise multiple regression
TEST(04) = .01 # km # adjustment value under which Geiger's iteration is terminated
TEST(05) = 5. # km # focal-depth value above which DZ is rest to DZ / (K+1)
TEST(06) = 4. # regression TEST(03)/TEST(06) coefficient value if no significant variable is found in the stepwise multiple regression
TEST(10) = 2. # km # coefficient value J = D/TEST(10) used for resetting DX and DY
TEST(11) = 999. # maximum number of iterations in the hypocentral adjustment
TEST(12) = .5 # coefficient value DZ = -Z*TEST(12) used for resetting DZ when hypocenter is placed in the air
TEST(13) = 1. # km # standard error value of hypocentral optionally calculated RMS
## The following values are only available with the Hypo71PC version modified by Alexandre Nercessian (IPGP) which is included with this plugin
TEST(15) = -2. # km # maximum altitude of earthquake in km (down is positive)
TEST(20) = 1. # used altitude = read altitude * TEST(20) - for example, -2500 = -250 * 10
######################
# Crustal Model List #
######################
CRUSTAL_VELOCITY_MODEL = 3.50, 6.00, 7.00, 8.00
CRUSTAL_DEPTH_MODEL = 0.00, 3.00, 15.00, 30.00
################
# Control Card #
################
# MANDATORY
ZTR = 5, 20, 40, 60, 80, 100, 150, 200 # km # trial focus depth, at least two
# MANDATORY
XNEAR = 200. # km # distance from epicenter up to which the distance weighting is 1
# MANDATORY
XFAR = 450. # km # distance from epicenter beyond which the distance weighting is 0
# MANDATORY
POS = 1.76 # ratio of P-velocity to S-velocity
KAZ = 1 # 1 or blank # apply azimuthal weighting of stations ?
KSORT = 1 # 1 or blank # sort stations by distance in the output ?
# Use last localization as starting point ?
# then LAT1, LAT2, LON1, LON2 and ZTR will take origin last values
DISABLE_LAST_LOC = true
####################
# Instruction Card #
####################
KNST = 1 # use S data ?
INST = 0 # fix depth ?
The usage of the new Hypo71 plugin is straight forward. Once loaded successfully the new locator shows up in the lower left corners combo box.
Select the new Hypo71 locator and a profile from the pre-configured list.
The Hypo71 implementation doesn't provide a virtual profile automatic but the plugins ships with some example profiles.
If an origin has been relocated the method should be set to "Hypo71" and the earth model contains the name of the profile used to perform this localization.
The Hypo71 locator implementation supports to override configured settings or control parameters for a session. Those changes are not persistent and lost if the locator is changed to another one or the profile has been changed.
To open the settings dialog press the button right to the locator selection combo box.
Then the Hypo71 selected profile parameters show up.
Take a look at Fred Klein HYPOINVERSE Earthquake Location software http://earthquake.usgs.gov/research/software/#HYPOINVERSE
Hypo71PC original manual and binary are available on JC Lahr website. http://jclahr.com/science/software/hypo71/
Type: string
Temporary file used by Hypo71 to store calculation logs Default is HYPO71.LOG.
Type: string
Temporary file to write Hypo71 input data to Default is HYPO71.INP.
Type: string
Temporary output file to read Hypo71 localization data from Default is HYPO71.PRT.
Type: string
Hypo71 default profile. If no custom profile is specified, this profile will be used by the plugin when proceeding to a localization. Default is ${HOME}/hypo71/default.hypo71.conf.
Type: string
Bash script to use when calls have to be made by the plugin when proceeding to a localization Default is ${HOME}/hypo71/run.sh.
Type: list:string
Hypo71 profile name. Multiples names may be set, as long as they are separated by comma. Each profile can have different velocity or parameters.
Type: string
Custom patternID to use when generating origin publicID
Type: bool
Specifies if the given publicD should be used for generating origin publicID
Note
hypo71.profile.$name.* A profile contains a velocity model and Hypo71PC parameters $name is a placeholder for the name to be used and needs to be added to hypo71.profiles to become active.
hypo71.profiles = a,b
hypo71.profile.a.value1 = ...
hypo71.profile.b.value1 = ...
# c is not active because it has not been added
# to the list of hypo71.profiles
hypo71.profile.c.value1 = ...
Type: string
Profile's velocity model name
Type: string
Profile's method. It's generally the locator's name (Hypo71). Default is Hypo71PC.
Type: string
File containing a profile parameters