obspy.io.nlloc - NonLinLoc file format support for ObsPy
This module provides read/write support for some NonLinLoc file formats.
- copyright:
The ObsPy Development Team (devs@obspy.org)
- license:
GNU Lesser General Public License, Version 3 (https://www.gnu.org/copyleft/lesser.html)
Example
If NonLinLoc location run was performed using one of the standard projections
available in the NonLinLoc package, it is straightforward to read a NonLinLoc
Hypocenter-Phase file into an ObsPy Catalog
object:
>>> from obspy import read_events
>>> cat = read_events("/path/to/nlloc.hyp")
>>> print(cat)
1 Event(s) in Catalog:
2006-07-15T17:21:20.195670Z | +51.658, +7.737
>>> event = cat[0]
>>> print(event)
Event: 2006-07-15T17:21:20.195670Z | +51.658, +7.737
resource_id: ResourceIdentifier(id="smi:local/...")
creation_info: CreationInfo(author='Claudio Satriano',
creation_time=UTCDateTime(2013, 6, 21, ...),
version='NLLoc:v6.02.07')
preferred_origin_id: ResourceIdentifier(id="smi:local/...")
---------
comments: 2 Elements
picks: 5 Elements
origins: 1 Elements
>>> origin = event.origins[0]
>>> print(origin)
Origin
resource_id: ResourceIdentifier(id="smi:local/...")
time: UTCDateTime(2006, 7, 15, 17, 21, 20, 1956...)
longitude: 7.736781...
latitude: 51.657659...
depth: 1433.5... [confidence_level=68, uncertainty=...]
depth_type: 'from location'
quality: OriginQuality(...)
origin_uncertainty: OriginUncertainty(...)
creation_info: CreationInfo(author='Claudio Satriano',
creation_time=UTCDateTime(2013, 6, 21, ...),
version='NLLoc:v6.02.07')
---------
comments: 2 Elements
arrivals: 5 Elements
If, instead, NonLinLoc location run was performed in some custom coordinate system (as opposed to WGS84 with depth in meters down), we need to set up a coordinate conversion function to convert from the NonLinLoc location coordinates x, y, z to longitude, latitude and depth in kilometers. In the example, the location run was done in Gauß-Krüger zone 4 (EPSG:31468, but in kilometers for coordinates) and depth in kilometers. So we have to convert x and y (of NonLinLoc location run) to meters (as defined in EPSG:31468) and then we convert to WGS84 (EPSG:4326). The z coordinate is already in kilometers downwards and can be left as is. For the conversion we use pyproj.
>>> import pyproj
>>> proj_wgs84 = pyproj.Proj("epsg:4326")
>>> proj_gk4 = pyproj.Proj("epsg:31468")
>>> def my_conversion(x, y, z):
... x *= 1e3
... y *= 1e3
... x, y = pyproj.transform(proj_gk4, proj_wgs84, x, y)
... return x, y, z
Then, we can load the NonLinLoc Hypocenter-Phase file into an ObsPy
Catalog
object using
read_events()
, supplying our coordinate mapping
function as coordinate_converter kwarg, which will be passed down to the
low-level routine read_nlloc_hyp()
.
>>> from obspy import read_events
>>> cat = read_events("/path/to/nlloc_custom.hyp",
... coordinate_converter=my_conversion)
>>> print(cat)
1 Event(s) in Catalog:
2010-05-27T16:56:24.612600Z | +48.047, +11.646
>>> event = cat[0]
>>> print(event)
Event: 2010-05-27T16:56:24.612600Z | +48.047, +11.646
resource_id: ResourceIdentifier(id="smi:local/...")
creation_info: CreationInfo(creation_time=..., version='NLLoc:v6.00.0')
---------
picks: 8 Elements
origins: 1 Elements
>>> origin = event.origins[0]
>>> print(origin)
Origin
resource_id: ResourceIdentifier(id="smi:local/...")
time: UTCDateTime(2010, 5, 27, 16, 56, 24, 612600)
longitude: 11.64553754...
latitude: 48.04707051...
depth: 4579.4... [confidence_level=68, uncertainty=191.6063...]
...
creation_info: CreationInfo(creation_time=UTCDateTime(2014, 10, 17,
16, 30, 8), version='NLLoc:v6.00.0')
---------
comments: 2 Elements
arrivals: 8 Elements
If NonLinLoc reports the location run as “ABORTED”, “IGNORED” or “REJECTED”,
the evaluation status of the origin will be set to “rejected” (which otherwise
is unset, i.e. None
). Further information might be found in the “NLLOC”
info header line of the hyp file that gets stored in event and origin comments:
>>> cat = read_events("/path/to/nlloc_rejected.hyp", format="NLLOC_HYP")
>>> print(cat[0].origins[0].evaluation_status)
rejected
>>> print(cat[0].comments[1].text)
NLLOC ... "REJECTED" ... max prob location on grid boundary 10, rejecting ...
Modules
NonLinLoc file format support for ObsPy |
|
NonLinLoc file format support for ObsPy |