Update to 1.0.2
1.0.2: (doi: 10.5281/zenodo.49636)
* Added workaround for numpy issue where many FFTs of various lengths fill
a cache that never gets cleared, effectively creating a memory leak
* Trace.filter and Stream.filter don't work on masked arrays anymore because
it produced unpredictable results due to the un-initialized data-chunk.
The uninitialized masked gap is now also initialized to np.nan in case
of floating point data which and a consistent fill value in case of
integer data. (see #1363)
* Fixing issue with location codes potentially resulting in unwanted data
to be requested. (see #1422)
* Included low-gain seismometers in default channel filters in
mass-downloader, also included non-oriented channels by default
* Fixed a bug in obspy-indexer command line script (see #1369,
command line script was not working, probably since 0.10.0)
* Fixed a bug that leads to pressure/tension color blending when plotting
semi-transparent DC beachball patches (i.e. with "alpha" not \
equal to 1,
* Fixed a bug when plotting non-DC beachball patches without fill colors
(i.e. with "nofill=True", see #1464)
* Fix arbitrary units in waveform section plot's offset axis, making it
possible to add customizations to the plot afterwards (see #1382, see
* Fixed a bug that lead to wrong header information in output files when
writing non-integer sampling rate data to SLIST or TSPAIR formats
* Make sure newer CMTSOLUTION files can also be read (see #1479).
* Fixed a bug that could lead to network code not present in GSE2 output
* Fixed a bug in obspy-mseed-recordanalyzer (see #1386)
* Use geographic coordinates from the NonLinLoc Hypocenter-Phase file if
no custom coordinate converter is provided. (see #1390)
* Fix reading NonLinLoc Hypocenter-Phase files with more than one
hypocenter in it. (see #1480)
* Fix reading NonLinLoc Hypocenter-Phase files with unicode characters in
them. (see #1483)
* Fixed issue with improperly raised warnings when the same file is read
* Fix writing empty network/station/channel codes in WaveformStreamID
objects to QuakeML. (see #1483)
* Try to set SAC distances (dist, az, baz, gcarc) on read, if \
true. If "dist" header is found, distances aren't calculated.
* SACTrace class returns header values as native Python types instead of
* SACTrace.iqual is no longer accepts enumerated string values, but
arbitrary integer values. (see #1472)
* SACTrace.read now replaces non-ASCII and null-termination characters in
string headers with whitespace unless the "debug_strings=True" flag is
used. (see #1432)
* Always set the number attribute for poles and zeros. (see #1481)
* PPSD.plot(): fix plotting of percentiles, mode and mean and setting
period limits when using "xaxis_frequency=True" (see #1406, #1416)
* Work around a bug in SciPy that results in wrong results for bandpass
filter when using Nyquist frequency (or higher) as high corner of the
passband (see #1451)
* Fixing path for Pn. (see #1392)
Update to 1.0.1
1.0.1: (doi: 10.5281/zenodo.48254)
* Some methods might have unnecessarily upcasted float32 arrays to float64.
Now methods for which it makes sense and which don't lose accuracy don't
upcast float32 arrays. Integers are still upcasted. Trace.resample() will
also no longer return the original dtype which might have resulted in a
large loss of accuracy but it now always returns float64 arrays.
* Trace.normalize() does no longer divide by zero in case an all-zeros
data trace is being used. (see #1343)
* Inventory.select() and consorts now behave as expected even with empty
child elements. (see #1126, #1348)
* Code formatting is no longer checked for clean release versions. Thus
updates to the linters no longer break the tests for releases.
* remove_response(..., pre_file=None, plot=True) works again. (see #1320)
* Restored ArcLink encryption support. (see #1352, #1347)
* Local URLs are now recognized as valid URLs. (see #1309)
* Some bug fixes for the mass downloader. (see #1293, #1304)
* The NOA node has been added to the list of known nodes.
* More automatic merging of SAC and ObsPy headers. The new `obspy.io.sac`
modules thus behaves more like the old one and more in line with
expectations of users. (see #1285)
* No more out of bounds errors when assigning coordinates. (see #1300)
* The evdp header can be set again. (see #1345)
* Correctly propagating sampling rate changes to the SAC headers.
* Always set nvhdr, leven, lovrok, iftype to ensure valid SAC files.
* The Parser.get_paz() method now works with multiple blockette 53s.
* Fixed wrong azimuth direction for paths > 180 degrees distance (see #1289)
* Azimuth is appended to arrivals as well (see #1289)
* Fixed issue with taup cache function on Python 2.7. (see #1308)
* Requirements have been increased to reflect latest distributions:
* Removed support for Python 2.6.
* Added support for Python 3.5.
* matplotlib >= 1.1.0 is now required.
* numpy >= 1.6.1 is now required
* scipy >= 0.9.0 is now required
* Reorganized the submodule structure. We provide a deprecation path so the
old imports will continue to work for one ObsPy version.
* Consistent naming scheme across the code base. This results in some
functions having different names. Most things that worked with ObsPy 0.10
will continue to work with this version, but starting with the next
version they will fail. Pay attention to the deprecation warnings.
* Support for additional waveform data formats:
- Read support for the ASCII format for waveforms from the K-NET and
KiK-net strong-motion seismograph networks.
* Support for additional event data formats:
- CMTSOLUTION files used by many waveform solvers.
- ESRI shapefile write support, useful in GIS applications (see #1066)
- Google Earth KML output.
* Support for additional station data format:
- The FDSN web service station text format can now be read.
- Read support for the NIED's moment tensor TEXT format (see #1125)
- Google Earth KML output.
- Read support for SeisComP3 inventory files.
* New method for generating sliding windows from Stream/Trace windows.
* Stream/Trace.slice() now has the optional `nearest_sample` argument from
* Trace.remove_response() now has `plot` option to show/output a plot of all
individual steps of instrument response removal in frequency domain
* New method Stream/Trace.remove_sensitivity() to remove instrument
* Fix incorrect parsing of some non-ISO8601 date/time strings. (see #1215)
* Added plotting method to Event (customizable subplots from a selection
of map, beachball and farfield radiation plots, see #1192)
* Replace FDSN webservice shortcut `NERIES` with `EMSC` and deprecate the
`NERIES` shortcut, will be removed in a future release (see #1146).
* Now requests gzipped data for the XML files. Much smaller files!
* The station service can now also be used to download files in the text
format. This has limited information but is much faster.
* New mass downloader to assist in downloading data across a large number
of FDSN web services.
* Catch invalid URLs when initialising Client and avoid confusing error
messages (see #1162)
* New client to read data from local SDS directory structure (see #1135).
* Command line script `obspy-sds-report` to generate html page with
information on latency, data availability percentage and number of gaps
for a local SDS archive (see #1202)
* Removed the dedicated client. Data can still be accessed by using the FDSN
* New client for the IRIS Syngine service to retrieve custom synthetic
* Experimental support for Cartopy when plotting maps. Use the `method`
argument to functions that plot maps to select between Basemap or Cartopy.
* New default colormap for all plots. A backport of the new viridis colormap
from matplotlib is available for those using older matplotlib releases.
* Added plotting routines for farfield radiation patterns of moment tensors
* New module for Google KML output of Inventory and Catalog objects
(e.g. for use in Google Earth)
* Upgrade to libmseed 2.16
* New module reading SeisComP3 inventory files to ObsPy inventory objects
* New module for ESRI shapefile write support (see #1066)
* New module reading the FDSN station files.
* Switch to second-order sections for filters; backported from SciPy 0.16.0
* New Lanczos interpolation/resampling (see #1101)
* Higher order detrending methods (see #1173)
* PPSD (see #931, #1108, #1130, #1187):
- Algorithm for PSD computation was improved, especially affecting results
at long periods (for detailed discussion see #931 and #1108).
- Keywords `paz` and `parser` were removed in favor of new keyword
`metadata`. PPSD now accepts `metadata` in a much wider range
* Inventory objects (e.g. from StationXML or from FDSN webservice)
* obspy.io.xseed Parser objects (e.g. from dataless SEED file)
* filename of a RESP file
* dictionary with poles and zeros information (like in
Most old codes should still work, issuing a deprecation warning, but
old code that specifies *both* `paz` and `parser` keywords will raise
- Whenever possible (i.e. when using for `metadata` an Inventory,
a Parser or a RESP file), response calculation now takes into account
the full response (all stages) as opposed to only using the poles and
zeros response stage (as was done in previous versions when using a
Parser object). When using a poles and zeros dictionary response
calculation is unchanged (as no information on other stages is
available, of course).
- PPSD now stores the psd for each time segment that gets processed,
instead of only storing the stacked histogram. That way, differing
custom stacks with various selection criteria (e.g. time of day, by
weekday, etc.) can now be made from the same processed data
- New save/load mechanism using numpy .npz binary format that circumvents
some problems with the old pickle mechanism:
`PPSD.save_npz()` and `PPSD.load_npz()` (and `PPSD.add_npz()` to add
data from additional npz files)
- Change default colormap to new obspy default sequential colormap
(matplotlibs new viridis colormap). The old PQLX colormap is provided by
`obspy.imaging.cm.pqlx` and can be used with
- new option `PPSD.plot(..., cumulative=True)` for a cumulative plot of
the histogram, i.e. a non-exceedence percentage visualization, similar
to the `percentile` option.
- x axis in `PPSD.plot()` can be switched to frequency in Hz with
`PPSD.plot(..., xaxis_frequency=True)` (see #1130)
- changes to special handling of rotational: now handled by kwarg
`special_handling="ringlaser"` (kwarg `is_rotational_data` is
deprecated, see #916)
- special handling option for hydrophone data (no differentiation, see
- bin width on frequency axis can now be controlled using
`PPSD(..., frequency_bin_width_octaves=...)` (in fractions of octaves,
default is the old fixed setting of 1/8 octaves as in PQLX)
* Added support for nd file format for input velocity models. Allows for
named discontinuities at arbitrary depths allowing for less Earth like
models (see #1147).
* Added three methods (`get_travel_times_geo()`, `get_pierce_points_geo()`
and `get_ray_paths_geo()`) to `TauPyModel` to handle station and
event location data as latitude and longitude, instead of the source to
station distance in degrees. In addition `get_ray_paths_geo()` and
`get_pierce_points_geo()` decorate the returned pierce points and ray
paths with the latitude and longitude of each point. Some functionality
needs the `geographiclib` module to be installed. (See #1164.)
* ObsPy now ships with a bunch of new velocity models in addition to the
existing ones: `prem`, `sp6`, `1066a,b`, `herrin` (See #1196).
* Add support for buried receivers (see #1103.)
* Port more accurate calculation of ray parameter from Java. The effect is
stronger for longer phases, but also corrects issues with shorter body and
surface waves (see #986.)
* Fix incorrect branch splitting which also caused issues for extremely
shallow phases (see #1057.)
* Proper cache for model splits resulting in much faster calculations if
the source depth is repeatedly the same (see #1248).
* Fix reading of multiple catalog files using globs (see #1065).
* Fixed a bug when using
With that setting that is supposed to not use any water level
stabilization in the inversion of the instrument response
spectrum actually the instrument response was never inverted and
thus instead of a deconvolution a convolution was performed
* Fixing floating point precision/rounding issue with UTCDateTime when
initializing with floating point seconds, i.e. with microseconds,
that could lead to microseconds being off by 1 microsecond
* Correct gap/overlap time returned by Stream.get_gaps() and printed
by Stream.print_gaps() which was incorrect by one time the sampling
interval (see #1151)
* Stream.get_gaps(): return overlaps specified in units of samples
as negative integers (see #1151)
* More detailed error messages on failing requests (see #1079)
* Follows redirects for POST requests (see #1143)
* fix some bugs in `obspy-scan` (see #1138)
* Blockette 100 is now only written for Traces that need it. Previously
it was written or not for all Traces, depending on whether the last
Trace needed it or not. (see #1069)
* Fixed a bug that prevented microsecond accuracy for times before 1970
* Updated to libmseed 2.17.
* Bug fixed within rotate.rotate2zne(). Additionally it can now also
perform the inverse rotation (see #1061).
* Bug fixed in triggering. When using option `max_len_delete` and a trigger
occurred right before the end of data, one trigger was potentially lost
(see #1145 for details).
* Plotting responses across multiple channels is more robust now in
presence of some strange channels (e.g. with zero sampling rate,
happens e.g. for state of health channels, see #1115)
* ObsPy no longer assumes that the StationXML namespace is the default
namespace (see #1060).
* Checking if a file is a StationXML file is less rigorous (and much
faster) now (not checking strict validity against xsd schema but
only looking for a FDSNStationXML root element, see #1114).
This means that `read_inventory()` without explicitly specified
format will correctly detect more files as StationXML that have very
slight breaches of the schema but still can be interpreted as
* fix saving `xcorrPickCorrection()` results to an image file (see #1154)
* Calculating arrival times for surface waves now works (see #1055)
* Calculating arrivals for underside reflections now works (see #1089)
* correct misspelled name of a Y specific header field (see #1127)
* Add support for time values with sub-second precision (see #1093)