ObsPy: A Python Toolbox for seismology/seismological observatories.
Changes:
keep_sac_header
flag to the write
plugin, which allows users
to write a "fresh" SAC header, instead of attempting to merge information
from an old SAC header, if one exists. (see #2760)Changes:
window
to "hann" following a name
change in scipy, "hanning" is not recognized anymore in newest scipy
(see #3117)Trace.remove_response()
docs, regarding using water
level mechanism with instrument response non-flat with the requested
output units (see #3172, #3136)get_stations_bulk
regarding parameter "includerestricted"
(see #3158)Changes:
apply_calib
argument to the read_evt
method to allow
obtaining the raw data bits stored in the evt file (see #2582), note this
changes the default (wrong!) behaviour, by default the data returned will
be the NOT corrected ones. When passing apply_calib=True
, the
calibration factor will be used.Changes:
Changes:
axes=...
with a numpy array of Axes
instances (see #2579)Work on this release was in parts and among others supported by the following institutions/companies and grants (in alphabetical order):
Changes:
Response.plot()
because a float was being passed down to numpy.linspace as length of array
(see #2533)_discover_services
boolean flag to the Client, which allows the
Client to skip the initial services query at instantiation. This can
reduce the load on service providers, but skips checks against unsupported
query parameters.inside_geobounds()
to check whether an object is
inside a geographic bound (see #2515)high_accuracy
has been added to turn this off. (see #2351 and #2348).extra
(see #2466)correlate_template()
function with 'full' normalization option,
required for correlations in template-matching
(see #2035 and #2042).correlate_stream_template()
and correlation_detector()
functions to detect events based on template matching (see #2315)period_lim
option when xaxis_frequency=True
(see #2246).allow_pickle
parameter to PPSD.add_npz
and PPSD.load_npz
and
set its default to False
(see #2457).This is the first and only bug fix release in the 1.1.x series.
Full changelog:
1.1.1: (doi: 10.5281/zenodo.1040770)
channel
and/or location
are set (see #1810, #2031, #2047).obspy.read()
function (see #2285, #2292).This is a major release with a lot of new features, bug fixes, and general improvements and we strongly recommend all users to update. Follow this link to learn more:
Full Changelog
1.1.0: (doi: 10.5281/zenodo.165135)
- General:
* Read support for Guralp Compressed Format (GCF) waveform data,
obspy.io.gcf (see #1449)
* Read support for Reftek 130 (rt130) waveform data,
obspy.io.reftek (see #1433)
* Add Nordic format (s-file) read/write (see #1517)
* Read and write support for events in the SCARDEC catlogue format
(see #1391).
* Read support for IASPEI ISF ISM 1.0 Bulletin event data,
(see #1946)
* Write support for AH (Ad Hoc version 1) format (see #1754)
* Client to access the Nominal Response Library (NRL) (see #1185).
* `obspy.read_inventory()` can now read dataless SEED and RESP files
(see #1185).
* change version number scheme for scenarios when no official version number
can be determined (see #1889 and #1916)
* Support for the IRIS Federator and EIDAWS FDSNWS web routing services
(see #1779 and #1919).
- obspy.core:
* UTCDateTime is now based on nanoseconds (long) instead of a unix
timestamp in microseconds (float) - resulting in higher precision and
support for years 1-9999 (see #1325)
* Ensure that Trace.data is always C-contiguous in memory (see #1732)
* Event/ResourceIdentifier is now object aware, meaning even if two
objects share a resource_id the distinct objects will be returned with
the get_referred_object method provided both are still in scope. If one
of the objects gets garbage collected, however, a warning will be issued
and the behavior will be the same as before (see #1644).
* Better error message when attempting to write invalid QuakeML resource
ids (see #1699).
* Stream/Trace.write() can now autodetect file format from file extension
(see #1321).
* New convenience property `.matplotlib_date` for `UTCDateTime` objects to
get matplotlib datetime float representation (which can be used in
time-based matplotlib axes, e.g. by Stream.plot(); see #1339).
* Trace.times() has new options `type` and `reftime` to support fetching an
array of sampletimes in various different timing varieties ("relative":
the old default, float relative to trace starttime or `reftime` in
seconds; "utcdatetime": absolute times as UTCDateTime objects;
"timestamp": array of float POSIX timestamps, compare
`UTCDateTime.timestamp`; "matplotlib": array of float matplotlib dates,
useful for plotting on matplotlib time axes; see #1307)
* A trace's stats.network/station/location/channel can now also be set in
one line using a SEED ID string (e.g. `trace.id = "GR.FUR..HHZ"`,
see #1439).
* Instrument correction for response list stages originating from inventory
objects (see #1514).
* `Stream.rotate(...)` can now also be used to rotate unaligned channels to
Z-N-E, given an Inventory (see #1310)
* Non finite floats (NaN, inf, -inf) can now no longer be set for all
event objects (see #1597).
* Instrument responses can now also be calculated for a given list of
frequencies (see #1598).
* Order of extra tags for event type classes serialized to QuakeML can now
be controlled by using an OrderedDict (see #1617)
* Bode plots can now optionally plot the phase in degrees (see #1763).
* `Stream.select()` now also works on the component level if channels only
have one letter (see #1847).
* Now strips all invalid characters from the temporary filenames used for
downloading data using the `read_X()` methods (see #1958).
- obspy.clients.earthworm:
* Much faster trace unpacking (see #1762).
- obspy.clients.fdsn:
* empty SEED codes (e.g. ``network=''``) will now be properly sent to the
server as options and not omitted, which led to wildcard matching (for
details see #1578)
* The mass downloader now has `exclude_networks` and `exclude_stations`
arguments to not download certain pieces of data. (see #1305)
* The mass downloader can now download stations that are part of a given
inventory object.
* The mass downloader now also works with restricted data. (See #1350)
* No data (HTTP 204) responses now raise `FDSNNoDataException` rather than
the more general `FDSNException`.
* Fixing cross implementation of bulk waveform and station requests (see
#1685).
* Adding mappings for the TEXNET (see #1852) and the ICGC (see #1902)
services.
* Support for the non-standard EIDA token authentication (see #1928).
- obspy.imaging:
* The functionality behind the `obspy-scan` command line script has been
refactored into a `Scanner` class so that it can be reused in custom
workflows. (see #1444)
- obspy.imaging.cm:
* new colormap: viridis_white. This is a modification of viridis that
goes to white instead of yellow but remains perceptually uniform. It
is especially useful for printing when an image should merge with the
white background.
- obspy.imaging.waveform:
* Support for filling the wiggles when plotting sections (horizontal and
vertical, see #1445).
- obspy.io.arclink:
* Read support for Arclink Inventory XML (see #1539)
* default for `route` parameter in metadata requests is changed to `False`
(see #1756)
- obspy.io.ascii:
* Custom formatting of sample values when writing SLIST and TSPAIR.
- obspy.io.datamark:
* Renamed without deprectation to obspy.io.win to match its original name.
Datamark is a datalogger, saving the WIN format.
- obspy.io.gse2:
* Read support for GSE2.0 bulletin (see #1528)
- obspy.io.nlloc:
* Also parse author information and COMMENT line (see #1484)
* Fix reading hypocenter files created by NonLinLoc versions of the 6.0.x
beta branch (see #1760 and #1783)
- obspy.io.quakeml:
* Read and write support for nested custom tags (see #1463)
* Fix some minor bugs that could lead to empty stub elements, e.g. like
empty MomentTensor when reading and later writing again a QuakeML file
with a FocalMechanism but no MomentTensor, potentially resulting in
QuakeML files that breach the QuakeML schema (see #1896)
- obspy.io.seiscomp:
* Read and write support for SC3ML event (see #1638 and #1848)
* Fix bug where files with arbitrary publicIDs and files with missing
depth, latitude, longitude, or elevation tags could not be read
(see #1817)
- obspy.io.stationtxt:
* Write support for stationtxt format (see #1466)
- obspy.io.stationxml:
* Read and write support for custom tags (see #1024)
* No longer add the (unused) time zone field to StationXML datetimes to
follow the example of big data centers. (see #1572)
* Level of detail can be specified during inventory write (see #1830)
using the level keyword (one of: network, station, channel, response).
* Skip empty and incomplete channels during reading (see #1839, #1840).
- obspy.io.segy:
* Fixing an issue when comparing two still packed SEG-Y trace headers
(see #1735).
* Iterative reading of large SEG-Y and SU files with
`obspy.io.segy.segy.iread_segy` and `obspy.io.segy.segy.iread_su`.
(see #1400).
* Write correct revision number (see #1737).
* Textual headers will now always contain the file revision number and the
end header mark if nothing else exists at these positions (see #1738).
* The SEG-Y format detection now also checks the format version number
(see #1781).
* Enable reading SEG-Y files that have day of year 0 in trace header
(see #1722).
* Write textual file headers also if given as a text string
(see #1811, #1813).
- obspy.io.css:
* Read support for NNSA KB Core format waveform data. (see #1332)
- obspy.io.mseed:
* New generic get_flags() utility function able to retrieve statistics
about all fixed header flags and the timing quality. This makes the
get_timing_and_data_quality() function obsolete which is thus
deprecated and will be removed with the next release. The get_flags()
function is also much faster. (see #1141)
* Always hook up the libmseed logging to its Python counterpart to avoid
some rare segfaults. (see #1658)
* Update to libmseed v2.19.5 (see #1703, #1780, #1939).
* Correctly read MiniSEED files with a data offset of 48 bytes (see #1540).
* InternalMSEEDReadingError now called InternalMSEEDError and
InternalMSEEDReadingWarning now called InternalMSEEDWarning as both
can now also be raised in non-reading contexts (see #1658).
* Should no-longer segfault with arbitrarily truncated files (see #1728).
* Will now raise an exception when attempting to directly read mini-SEED
files larger than 2048 MiB (#1746).
* `.stats.mseed` attributes are no longer per-file but per-trace where
applicable (see #1782).
* `get_record_information()` - Don't fail if the word order is invalid.
- obspy.io.nlloc:
* Set preferred origin of event (see #1570)
- obspy.io.nordic:
* Add Nordic format (s-file) read/write (see #1517)
- obspy.io.win:
* see obspy.io.datamark.
- obspy.io.xseed:
* Added azimuth and dip to the get_coordinates() function. (see #1315)
* Fixing some issues with the get_resp() output on Python 3 (see #1748).
* Can now also parse RESP files (see #1185).
* Can transform responses in the Parser object to ObsPy Inventory objects
(see #1185).
- obspy.scripts:
* obspy-scan command line script now also plots and prints overlaps
alongside gaps (see #1366)
* obspy-plot now has option to disable min/max plot (see #1583)
- obspy.signal:
* fixed a bug in calibration.rel_calib_stack (resulting amplitude response
had wrong scaling if using non-default "overlap_fraction", see #1821)
* fixed a bug in coincidence_trigger() with event templates. when a template
with mismatching SEED ID was encountered all following (potentially valid)
templates were skipped as well (see #1850)
* New obspy.signal.quality_control module to compute quality metrics from
MiniSEED files. (see #1141)
* New correlate function for calculating the cross-correlation function
(new implementation based on Scipy).
To calculate the shift of the maximum of the cross correlation use
xcorr_max. The old xcorr function is deprecated but currently still
exists (see #1585).
* New obspy.signal.regression module to compute linear regressions, with or
without weights, with or without allowing for an intercept. (see #1716,
#1747)
* add new plotting capabilities to PPSD (temporal variations per frequency
and spectrogram-like plot) and also make underlying processed PSDs
available via `PPSD.psd_values` property (see #1327)
* Fixed bug in `rotate2zne()` for non-orthogonal configurations
(see #1913, #1927).
* Fixed build warnings in evalresp, partially backported from evalresp
4.0.6 (see #1939).
- obspy.taup:
* Add obspy.taup.taup_geo.calc_dist_azi, a function to return the distance,
azimuth and backazimuth for a source - receiver pair. (see #1538)
* Fixing calculations through very small regional models. (see #1761)
* Updated ray path plot method, added travel time plot method, and wrapper
functions for both ray path and travel time plotting. (see #1501, #1877)
This is the third (and planned to be last) bug fix release in the 1.0.x series.
Full changelog:
1.0.3: (doi: 10.5281/zenodo.165134)
- obspy.core:
* properly pass through kwargs specified for Trace.plot() down to the
low-level plotting routines (e.g. events were not shown properly in
dayplot of a trace, see #1566)
* properly pass through kwargs from Stream.detrend() to Trace.detrend()
(see #1607)
* Correctly splitting masked arrays in Trace objects for a couple of corner
cases (see #1650, #1653).
- obspy.core.event.source:
* Fix `farfield` if input `points` is a 2D array. (see #1499, #1553)
- obspy.clients.earthworm:
* Better end of stream detection. (see #1605)
* More efficient unpacking of server response. (see #1680)
- obspy.clients.neic:
* Better end of stream detection. (see #1563)
- obspy.clients.seedlink:
* Better end of stream detection. (see #1605)
- obspy.clients.seishub:
* Fix wrong kwargs `first_pick` and `last_pick` in
`Client.event.get_list()`. (see #1661)
- obspy.io.mseed:
* ObsPy can now also read (Mini)SEED files with noise records. (see #1495)
* ObsPy can now read records with a data-offset of zero. (see #1509, #1525)
* ObsPy can now read MiniSEED files with micro-second wrap arounds.
(see #1531)
* ObsPy can now read MiniSEED files with no blockette 1000. (see #1544)
* ObsPy now always writes Blockette 100 if sampling rate accuracy is
otherwise lost. (see #1550)
* obspy.io.mseed.util.set_flags_in_fixed_header() now works with Python 3
and also for files with Blockette 100 (see #1648).
- obspy.io.quakeml:
* write StationMagnitude.residual even when it is zero (see #1625)
* read & write Event.region
- obspy.io.sac:
* `SACTrace.lpspol` and `lcalda` are `True` and `False` by default, when
created via `SACTrace.from_obspy_trace` with a `Trace` that has no SAC
inheritance. (see #1507)
* Reference time not written to SAC file when made from scratch
(see #1575)
- obspy.io.sh:
* Fix writing of long headers for python3
* Whitespace in header fields is not ignored anymore (see #1552)
- obspy.io.stationxml:
* Datetime fields are written with microseconds to StationXML if
microseconds are present. (see #1511)
- obspy.io.zmap:
* Use first origin/magnitude when writing to zmap if no origin/magnitude is
set as preferred. (see #1569)
* Parse origin time seconds as a float to avoid losing accuracy (see #1573)
- obspy.signal:
* PPSD: fix warning message on Python 3 that gets shown when waveforms and
metadata mismatch (see #1506)
- obspy.taup:
* Allow for more than 10 phases with identical names (can happen for certain
custom models, see #1593).
This is the second bug fix release in the 1.0.x series.
Full changelog:
1.0.2: (doi: 10.5281/zenodo.49636)
- obspy.core:
* Added workaround for numpy issue where many FFTs of various lengths fill
a cache that never gets cleared, effectively creating a memory leak
(see #1424).
* 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)
- obspy.clients.fdsn:
* 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
(see #1373).
- obspy.db:
* Fixed a bug in obspy-indexer command line script (see #1369,
command line script was not working, probably since 0.10.0)
- obspy.imaging:
* 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,
see #1464)
* 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
#1383)
- obspy.io.ascii:
* Fixed a bug that lead to wrong header information in output files when
writing non-integer sampling rate data to SLIST or TSPAIR formats
(see #1447)
- obspy.io.cmtsolution:
* Make sure newer CMTSOLUTION files can also be read (see #1479).
- obspy.io.gse2:
* Fixed a bug that could lead to network code not present in GSE2 output
(see #1448)
- obspy.io.mseed:
* Fixed a bug in obspy-mseed-recordanalyzer (see #1386)
- obspy.io.nlloc:
* 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)
- obspy.io.quakeml:
* Fixed issue with improperly raised warnings when the same file is read
twice. (#1376)
* Fix writing empty network/station/channel codes in WaveformStreamID
objects to QuakeML. (see #1483)
- obspy.io.sac:
* Try to set SAC distances (dist, az, baz, gcarc) on read, if "lcalda" is
true. If "dist" header is found, distances aren't calculated.
* SACTrace class returns header values as native Python types instead of
NumPy types.
* 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)
- obspy.io.stationxml:
* Always set the number attribute for poles and zeros. (see #1481)
- obspy.signal:
* 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)
- obspy.taup:
* Fixing path for Pn. (see #1392)