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(creation_time=UTCDateTime(2013, 6, 21, ...),
                                 version='NLLoc:v6.02.07')
    ---------
             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=...]
                ...
     creation_info: CreationInfo(creation_time=UTCDateTime(2013, 6, 21, ...),
                                 version='NLLoc:v6.02.07')
    ---------
          comments: 1 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(init="epsg:4326")  
>>> proj_gk4 = pyproj.Proj(init="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: 1 Elements
          arrivals: 8 Elements

Modules

core NonLinLoc file format support for ObsPy
util NonLinLoc file format support for ObsPy