Skip to content

Releases: obspy/obspy

ObsPy 1.5.0 (doi: 10.5281/zenodo.19005357)

13 Mar 18:15
0fd195e

Choose a tag to compare

Changes:

  • General
    • Fix documentation for the command line scripts (see #1208 #3569)
    • Fix code coverage reporting (see #3646)
    • Github CI: update min numpy version to 1.21 (see #3639)
    • Github CI: pin cartopy < 0.22, pyproj < 3.5 for ubuntu 3.8
      mindepversion tests
    • Minimum Dependencies: numpy 1.21 (was 1.20) (see #3639)
  • obspy.core:
    • response: tweaks to allow sane processing of PolynomialResponseStage
      responses if they have 2 coefficients or less (see #3632)
    • response: allow recalculating overall sensitivity even if unit type is not
      one of VEL/ACC/DISP (see #3235), add method for calculating the normalization
      factor for pole–zero response stages (see #3580)
    • deprecate Trace.attach_response() and Stream.attach_response() in
      favor of passing metadata directly to response-removal methods
      (see #2026)
    • trace: additional catch to remove_response for PolynomialResponseStage
      responses with 2 coefficients (see #3632)
    • trace: 5x quicker retrieval of seed-id with trace.id / trace.get_id()
      (see #3251)
    • inventory: additional formatting tweaks to expanded channel information
      (see #3261)
    • replace pkg_resources with importlib for internal entry point and plugin
      handling, add compatibility code for py 3.8 and 3.9 (should not affect
      users, see #3333)
    • read(): better support for reading from file-like objects in many plugins
      (see #3346)
    • allow to specify Trace and Stream filter frequencies as arguments
      (see #3294)
    • improve error messages when traces fail to get merged due to differing
      data type, sampling rate etc (see #3418)
    • add helper methods to change/unify byteorder on trace/stream (see #3418)
    • window 'slepian' was removed in Trace/Stream.taper() as it was removed
      from scipy with version 1.6, add new window 'dpss' that scipy promotes as
      replacement but might need other parameters passed in (see #3331)
    • UTCDateTime: Using __slots__, faster comparisons and initialisation (see #3653)
    • Trace: faster initialisation and stats updates (see #3653)
    • util: fix logic bug in _generic_reader to properly catch byte objects
      (see #3643)
    • Ensure UTCDateTime can unpickle old UTCDateTime instances by adding
      setstate method (see #3684)
  • obspy.clients.fdsn
    • Natural Resources Canada (NRCAN) added to list of known clients
    • Spanish National Geographic Institute (IGN) added to known clients
    • GFZ FDSN url updated to https://geofon.gfz.de
    • EARTHSCOPE & IRIS updated to https://service.earthscope.org (#3700)
    • RESIFPH5 removed (service deprecated)
    • EPOSFR defined, will replace RESIF
    • Various FDSNWS URL mappings updated to https
    • A FDSNNoServiceException is now raised instead of a ValueError when
      querying a webservice not present in Client.services (see #3483)
    • make it possible to opt out of server side gzip compression (see #3469)
    • fix a regression introduced by #3306 which lead to some network errors not
      getting raised as an FDSNException but some low-level exceptions like
      AttributeError, which in turn caused problems in Mass Downloader (see
      #3513)
    • mass downloader: Use the download(threads_per_client) value for
      StationXML downloads. (see #3678)
  • obspy.clients.filesystem:
    • tsindex: update syntax for SQLAlchemy 2.0 compatibility (see #3269)
    • tsindex: leap second handling was deactivated as it is not needed with
      current msindex (see #3403)
  • obspy.clients.neic
    • Update the default CWB QueryServer IP address from the old IP to the
      new USGS server address (see #3592)
  • obspy.clients.seedlink:
    • fix a bug in basic client get_info() which leaded to exceptions when
      querying with level="channel" in presence of stations with no current
      data available. Also, stations without data are now excluded from the
      results. See docs for get_info() for information how to see the excluded
      stations (see #2808)
  • obspy.imaging.beachball:
    • allow isotropic component to be plotted. Ensure explosions and
      implosions plot fully colored/uncolored, and that the correct
      "dominant" eigenvalue is chosen. Bug fix to fully implement
      check to see if a new segment is needed for the matplotlib patches.
      (see #3583)
    • add tutorial to code_snippets to showcase isotropic plotting.
      (see #3583)
  • obspy.imaging.waveform
    • Adapt the code to match the documentation of the section plots, make use
      of metres everywhere instead of kilometres (see #3371)
  • obspy.io:
    • add read and write support for CSV, EVENTTXT and CSZ formats (see #3285)
  • obspy.io.ascii:
    • add support for more dtypes (INT32, INT64, FLOAT32 etc) (see #3611)
  • obspy.io.cybershake:
    • add read support for CyberShake seismogram format (see #3370)
  • obspy.io.iaspei:
    • read the origin-specific data from the ISF phase block (see #3515)
  • obspy.io.kinemetrics:
    • extract all headers from EVT files (see #3606)
    • fix reading non-UTF8 character in the comment (see #3688)
  • obspy.io.mseed:
    • _read_mseed can use interpolation search optionally to find start
      and end time in O(log(log(N))) for linearly ordered data with
      "use_bisection=True" (see #3622)
    • _read_mseed: 2GB limitation lifted (see #3622)
    • _read_mseed: use of numpy.memmap to improve efficiency (see #3622)
    • _read_mseed: Can now handle numpy.ndarray(dtype=numpy.int8), and
      and anything that can be read into numpy.ndarray(dtype=numpy.int8) with
      np.frombuffer to increase efficiency when data is already in memory. (see
      #3622)
    • new routine to spread a time interval progressively across all mseed
      blockettes in a file (see #3271)
  • obspy.io.nlloc:
    • set origin evaluation status to "rejected" if nonlinloc reports the
      location run as "ABORTED", "IGNORED" or "REJECTED" (see #3230)
    • store "NLLOC" info header line in event and origin comments (see #3230)
    • add reading of confidence ellipsoids (see #3350)
    • add support for reading and writing "PUBLIC_ID" line in NonLinLoc
      hypocenter and observation files (see #3701)
  • obspy.io.nordic:
    • Parse ID-lines (type I) into event.extra['nordic_event_id] (see #3287)
    • Support reading of compact Nordic files (only containing header lines)
    • Write amplitude with highest possible precision
    • Fix writing / reading of high-frequency IAMLHF amplitudes
    • Fix parsing of BAZ when they precede the associated phase pick in file
    • Fix bug where check for nordic format version crashed on long phase names
  • obspy.io.sac:
    • fix floating point accuracy issues in sampling rate when reading some SAC
      files. when reading SAC files, the sample spacing interval read from file
      will now by default be rounded to microseconds before taking the
      reciprocal to set the sampling rate. This can be deactivated using
      "read(..., round_sampling_interval=False)" (see #3408)
    • fix writing SACPZ END tag when empty (open ended) (see #3696)
  • obspy.io.seg2:
    • Less strict date/time parsing (#3283).
  • obspy.io.seisan:
    • Fix parsing of files written in int16 (see #3287)
  • obspy.io.seiscomp:
    • overhaul codebase towards "SCML" label instead of SC3ML
      but SC3ML still works as a FORMAT kwarg (for now)
    • add option to write different SCML catalog versions
    • update/refresh XSL files to latest (2025)
      Fixes origin/confidenceEllipsoid conversion. The unit for
      'semiMajorAxisLength', 'semiMinorAxisLength' and
      'semiIntermediateAxisLength' is already meter and does not need a
      conversion.
    • convert negative azimuth or |dip|>90 to 0-360/-90-90 for fdsnXML (#3689)
    • add seiscomp scml 0.14 support, drop 0.6
    • add seiscomp scxml 0.13 support (see #3345)
  • obspy.io.shapefile:
    • add support for pyshp v3 (see #3599)
  • obspy.io.stationxml:
    • Fix a bug writing the informational "description" field of instrument
      sensitivity input/output units (see #3572).
  • obspy.io.win:
    • Fix reading sampling rate larger than 1 bytes (see #3641)
    • Fix reading of 24 bit data (see #3661)
  • obspy.io.xseed:
    • Improve error message when trying to read a local path to a file that does
      not exist with XSEED Parser (see #2686)
  • obspy.signal:
    • PPSD: performance improvement in init: faster frequency array
      calculation (see #3644)
    • PPSD: Changed the moment instrument responses are calculated by evalresp:
      they are now preloaded at PPSD instantiation time, and no longer
      calculated for each time window (see #3589)
    • all butterworth filters: correct zero-phase filtering of 2-d arrays and
      filtering along non-default axis of 2-d arrays (see #3291)
    • fix naming of input args in function "rotate_rt_ne()" (see #3383)
    • add support for Chebyshev I/II, elliptic and Bessel filters alongside
      the default Butterworth filters (see #3294)
    • fix potential out of bounds array access in AR picker (see #1801)
    • fix a small issue in evalresp linked to picky new gcc (see #3578)
    • array analysis: minor docstring fix in "get_geometry()" (see #3516, #3606)
    • MSEEDMetadata: Computation of sample metrics replaced with vectorised
      numpy code. Speedup of roughly factor 10 for integer data and 1.5 for
      floating point data. (see #3621)
    • Fix filter construction (_filter) where freqs has len 1, linked to
      numpy 2.4.0 deprecation expiration. (see #3668)
    • Add warnings.catch_warnings for spectral_estimation tests, linked to
      a new numpy 2.4.0 deprecation. (see #3668)
    • Prep SciPy dropping ODR for polarization.partical_motion_odr, prompt user
      to install odrpack if they have SciPy >= 1.19.0 (see #3676, #3662)

ObsPy 1.4.2 (doi: 10.5281/zenodo.15309143)

30 Apr 12:37
a629e8c

Choose a tag to compare

Changes:

  • General:
    • add support for numpy v2.0 (see #3461)
  • obspy.core:
    • util: removed old and outdated 'CatchWarnings' context manager in favor of
      the better 'CatchAndAssertWarnings' context manager (see #3452)
  • obspy.clients.fdsn
    • make sure to use a copy of DEFAULT_SERVICES when initializing a client
      instance while skipping service discovery, to avoid accidental changes to
      DEFAULT_SERVICES (see #3493)

ObsPy 1.4.1 (doi: 10.5281/zenodo.11093256)

03 May 07:49
1be221b

Choose a tag to compare

Changes:

  • obspy.core:
    • fix a bug in response calculation with non-SI input units. With e.g.
      "nm/s" as first stage input units (which is unusual, though), the
      amplitude of the frequency response was calculated wrongly, not taking
      into account the scaling factor needed to get from "nm/s" to "m/s". In
      general if this bug would have been encountered before it should have led
      to quite obviously wrong results, since it would lead to values that would
      have been off by at least two orders of magnitude (e.g. in case of "cm/s")
      or even up to nine orders of magnitude (e.g. in case of "nm/s").
      (see #3369)
    • fix a bug in Stream.select(inventory=...) (see #3282)
    • fix a problem in Stream.plot() failing to remove the "min-max-plot zoom
      warning" when interactively zooming into and then again out of a plot with
      reduced number of points plotted with matplotlib >=3.6 (see #3318)
    • fix an issue with Stream.rotate() when there are dots in e.g. station code
      (see #3373)
  • obspy.clients.fdsn:
    • update URLs for FDSN web services raspberryshake, ISC and LMU (see #3264,
      and #3413)
    • properly include server response in error messages on bad requests (see
      #3306)
    • IRIS/Earthscope: fix all "catalogs" and "contributors" being suffixed with
      '\n ' (see #3438)
  • obspy.clients.nrl:
    • better handling of individual stages units when combining sensor and
      datalogger response from a full downloaded offline version of the new NRL
      v2 (see #3315, #3395)
    • add support to use new categories "integrated" and "soh" in new NRL v2
      (see #3315)
  • obspy.clients.seedlink:
    • avoid unnecessary calls to "get_info()" on waveform requests without
      wildcards (see #3232)
  • obspy.imaging:
    • fix a bug that raised an error when plotting beachball patches with
      routine "beach" with providing an existing axes instance (for proper
      scaling) and saving to vector graphics as pdf/eps (see #2887)
    • fix a problem in Stream.plot() failing to remove the "min-max-plot zoom
      warning" when interactively zooming into and then again out of a plot with
      reduced number of points plotted with matplotlib >=3.6 (see #3318)
    • fix some issues with bad x-tick positioning and labeling in dayplots
      (see #3361)
    • fix a bug in Stream.plot() where the plotting method argument (e.g.,
      'fast', 'full') was ignored for section-type plots
  • obspy.io.gcf:
    • Fixed an issue in algorithm to split and encode last few data into GCF
      blocks (see #3252)
  • obspy.io.sac:
    • Fix writing SACPZ from poles and zeros stages with Hertz transfer function
      type. SAC is expecting the SACPZ data to be in radians/s (see #3334)
  • obspy.io.wav:
    • Fixed reading of stereo wav files (see #3399)
  • obspy.io.win:
    • Fixed three bugs when reading 0.5 byte datawide (see #3310)
  • obspy.io.xseed:
    • Fixed reading SEED frequency-amplitude-phase response lists that are
      spread out over multiple blockettes (see #3277)
    • Fix reading uncertainties of poles/zeros complex numbers (see #3401)
  • obspy.io.zmap:
    • Fix writing events with origins that have no depth or depth errors given
      (see #3343)
  • obspy.signal:
    • PPSD: Fix some time slices getting skipped if sampling rate does not align
      well with the length of one PSD slice. (see #3387)
  • obspy.taup:
    • bugfix to allow calculations for a model with no discontinuities
      (see #3070, #3244)

ObsPy 1.4.0 (doi: 10.5281/zenodo.6645832)

21 Nov 14:02
ea00a7e

Choose a tag to compare

Changes:

  • obspy.core:
    • Minimum supported Python version is now 3.8 (see #3081, #3087)
    • Minimum supported dependency versions are now numpy 1.20, scipy 1.7 and
      matplotlib 3.3 (see #3081, #3087)
    • response: avoid reporting all unkown units (e.g. "RAD/S") to evalresp as
      displacement ("DIS") which with default value for "output" ("VEL") leads
      to evalresp adding a differentiation during response calculation. Instead
      report undefined unit, which makes evalresp use response as is and
      essentially ignoring "output" parameter (see #2945)
    • Improved expanded channel information in string representation of Station,
      e.g. when displaying station in IPython shell (see #3024)
    • limit length of list which records processing info (see #2882)
    • map plots: fix initial map setup, properly pass through user specified
      options, like "projection" etc (see #3191)
  • obspy.clients.fdsn:
    • update URL for NCEDC to https (see #3203)
    • add all valid parameters to get_stations_bulk, e.g. geographical
      constraints (see #3140)
    • do not use autodiscovery of file format in get_stations, unless "format"
      is set to something we do not recognize (see #3138)
    • fix a bug in routing client that made any request made error out when
      "debug=True" was set (see #3214)
    • fix raising FDSNTooManyRequestsException when server rejects request due
      to rate limiting, due to a bug instead a TypeError was raised (see #3219)
  • obspy.clients.seishub:
    • submodule removed completely, since it is outdated and not even test
      servers have been running for years (see #2994)
  • obspy.db:
    • submodule removed completely, since mostly being used in discontinued
      seishub server (see #2994)
  • obspy.imaging:
    • spectrogram: change the computation for default window length if not
      specified to give useful values for sampling rates much higher or lower
      than 100 Hz (see #3093)
    • spectrogram: better exception type and messages when input signal is too
      short (see #3093)
    • map plots: fix initial map setup, properly pass through user specified
      options, like "projection" etc (see #3191)
  • obspy.io.alsep:
    • new module for reading data from the Apollo missions stored in ALSEP
      format (see #3156)
  • obspy.io.nlloc:
    • avoid mangling channel/component code when writing nonlinloc phase file,
      just write full channel code unchanged into nonlinloc's "component" field
      (see #3223)
    • fix reading nonlinloc hypocenter files written by newer nonlinloc
      versions, data parsed into Arrivals was wrong (see #3223)
    • read geometrical station azimuth instead of ray takeoff azimuth from
      hypocenter. This is more robust (ray takeoff values sometimes not accurate
      at all) and also follows more the QuakeML documentation that states
      "Azimuth of station as seen from the epicenter" which implies a simple
      geometrical calculation (see #3224)
    • ignore ray takeoff dip if the stated quality for it is "0 - unreliable".
      our example data show that values can be blatantly wrong when quality is
      reported as "0" (see #3224)
    • write timing error as "0.0" if it is not set on a pick, as recommended by
      nonlinloc's author (see #2371, #3224)
  • obspy.io.nordic:
    • add support for writing multiple amplitudes for one pick (only new format)
      and writes some amplitude lines more compact (see #3075, also #2814)
    • add full support for reading and writing apparent velocity and backazimuth
      with new nordic format (see #3075)
    • fix comments on angle of incidence vs. takeoff angle (What is called
      angle of incidence in Seisan is the same as what is usually referred to as
      takeoff angle, see #3075)
    • add function to check whether phase is valid IASPEI phase in Seisan (#3075)
    • full support for writing high-accuracy origin line (see #3075)
  • obspy.io.sac:
    • expose a 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)
    • fix writing SACPZ when a channel's sensor filed is unset (see #3187)
  • obspy.io.seiscomp:
    • update SeisComP 0.11 and 0.12 schema to potentially speed up sc3ml to qml
      event catalog conversions (see #3216 and SeisComP/common#74)
  • obspy.signal:
    • coincidence trigger: improve speed of template matching and less memory
      usage (see #3104)
    • Baer picker: fix a bug that could cause crashes on certain versions of
      libffi (see #3183)
    • polarization analysis: fix calculation of timestamps of the resulting
      values (see #3211)
  • obspy.taup:
    • add option "indicate_wave_type" to distinguish S waves in ray paths
      plot by using wiggly lines for shear waves (see #3047)
    • improved accuracy of ray paths by change of root-finding algorithm
      in SeismicPhase.refine_arrival (see #3064, #3096)
    • improved accuracy of travel time estimates by using theta function
      (see #3068)
    • add support for models without a core or inner core
      (see #1200, #1423, #2086, #2192, #2390, #3070)
    • add support for a wider range of diffracted phases, like SedPdiffKP
      (see #3085) and PKdiffP (see #3095)
    • allow rapid travel time plotting in plot_travel_times by using
      precalculated travel times (see #3092)
    • return pierce points for any depth (see #1742, #3072)
    • bug fix for rays which cannot turn due to low velocity at bottom
      of layer (see #3080)
    • add some checks for bad phases, so "ScScS" is not allowed
      (see #2774, #3082)
    • bug fix for sources within high slowness regions (see #2976, #3100)

ObsPy 1.3.1 (doi: 10.5281/zenodo.7193374)

14 Oct 09:25
f7be7c6

Choose a tag to compare

Changes:

  • obspy.core:
    • Fix exclusion of magnitude 0 events in Catalog.filter (see #3105)
    • Trace.resample: Changed default for window to "hann" following a name
      change in scipy, "hanning" is not recognized anymore in newest scipy
      (see #3117)
    • Fix different data length for trim/slice methods (see #2608)
    • Add keep_empty_traces option to Stream.trim (see #2608)
    • Fix missing legend and plot artifacts in Inventory map plots at
      intersection of equator and prime meridian (see #3067)
    • Fix a bug in recaculation of overall instrument sensitivity (see #3099)
    • Fix colored IPython output on Windows (see #3148, #3171)
    • Add a warning in Trace.remove_response() docs, regarding using water
      level mechanism with instrument response non-flat with the requested
      output units (see #3172, #3136)
    • Fix reusing Catalog/Inventory map plots, i.e. doing multiple cartopy plots
      with these objects into the same axes (see #3018)
    • Fix Stream.rotate with multiple-station or multiple-event Streams (see
      #2623, 3155)
  • obspy.clients.fdsn:
    • Fix a bug in get_stations_bulk regarding parameter "includerestricted"
      (see #3158)
    • add URL mapping 'EIDA' for http://eida-federator.ethz.ch (see #3050)
    • Fix issue where "https://" URLs were not matched by the IRIS federator
      client, resulting in raspberry shake matches being excluded from results
      (see #3127)
    • Properly set HTTP Content-Type header in POST requests (see #3169)
  • obspy.clients.nrl:
    • deprecate online NRL client as it will stop working in Spring 2023 when
      old NRLv1 gets taken offline (see #3164)
    • enable reading from a downloaded full copy of the NRLv2 at
      http://ds.iris.edu/ds/nrl/ (see #3058)
    • Fix a bug in recaculation of overall instrument sensitivity after
      assembling response from separate sensor and datalogger response parts
      (see #3099)
  • obspy.imaging:
    • Scanner/obspy-scan: skip directories without read permission (see #3115)
  • obspy.io.gse2:
    • bulletin reading: correctly add Mag2 and amplitudes even if Mag1 is not
      present (see #2420)
  • obspy.io.mseed:
    • fix a bug in endtime calculation when writing fixed flags block
      information (see #3165)
  • obspy.io.seg2:
    • fix reading files that have a string header field with an empty value (see
      #3174, #3178)
  • obspy.io.stationxml:
    • fix a bug that resulted in losing decimation information of base type
      response stages (see #3159)
    • enable reading StationXML 1.2 and write new files with schema version
      1.2 (see #3153)
  • obspy.io.wav:
    • fix writing of wav files with rescale=True and default width=None
      (see #3029)
  • obspy.signal:
    • trigger_onset(): fix a bug when trigger off threshold is higher than
      trigger on threshold and a trigger is active at the end of the
      characteristic function (see #2891, #3013)
  • obspy.signal.PPSD:
    • show warning on input of a trace that is too short to be processed (see
      #3073)
    • fix time comparisons in time restrictions when doing custom stacks,
      compare less/greater or equal instead of strict less/greater than (see
      #1477)
  • obspy.taup:
    • Fix cycling through colors in ray path plots, now also fixes cartesian
      plot version (see #2470, #2478, #3041)
    • Fix slowness layer splits to avoid "TauBranch depths not compatible with
      slowness sampling." errors. (see #3062, #2682, #1938)
    • Fix pierce points for 2kmps phases (see #2754)

ObsPy 1.3.0 (doi: 10.5281/zenodo.6327346)

10 Mar 14:28
3e2ef7d

Choose a tag to compare

Changes:

  • obspy.*
    • no more support for Python 2 (see #2577)
    • added python 3.9 and 3.10 tests for all platforms,
      minimal supported python version is 3.7 (#2925, #2489)
    • removed os.path calls with pathlib library calls (see #2751).
    • rewrote CI tests to make use of cache (see #2936)
    • removed individual logging configurations in Obspy, logging can be
      configured by the user, see documentation of Pythons logging module,
      only the FDSN mass downloader automatically configures logging as before,
      but this behavior can be turned off now. The loglevel keywords are
      therefore deprecated and have no effect anymore (see #2720)
    • refactored obspy-runtest to use pytest and modified several command
      line arguments, required to disable image comparisons (see #2489)
    • removed calls to deprecated NumPy functionality (see #2949, #2981)
    • cleaned the documentation, build process, and docstrings (see #2662, #2954)
    • refactored and modernized setup.py (see #2422)
  • scripts:
    • SDS report: try to be faster on slow filesystems (see #3009)
  • obspy.core:
    • speed up import of obspy core functions (see #2758)
    • read_inventory(): add "level" option to read files faster when less level
      of detail is needed. currently only implemented for StationXML reading
      (see #2759)
    • add option to suppress evalresp sensitivity mismatch warning when removing
      instrument response (see #2677)
    • round magnitudes in Catalog/Event string representation to one decimal
      (see #2742)
    • add support for pathlib.Path objects in read(), read_inventory() and
      read_events() functions (see #2743)
    • add a "DEF" option (default units) to Inventory.plot_response() and
      Trace.remove_response() (see #2806)
    • stream.select(): circumvent wildcard-matching when called with a trace-id
      without wildcards for quicker trace selection.
    • Inventory addition now consistently uses shallow copies (#2675, #2694)
    • removed obsolete wrapper around numpy.loadtxt causing import error with
      numpy 1.22 (see #2912, #2913)
    • fix iso8601 regex for issue #2868 to cope with day 360 properly
    • fix crash when resampling very short traces (see #2926)
    • response list stages: do not raise an exception if response calculation
      involves extrapolation outside of frequency range defined by the response
      list stage but rather only show a warning. raising an exception is the
      safe route but it also prevents valid calculations as it is up to the user
      to make sure that signal spectrum is properly suppressed in those
      frequency ranges outside of the valid response information (see #2988)
    • fix a bug while checking for valid URI syntax when setting identifiers on
      inventory type objects (see #2905)
  • obspy.clients.arclink:
    • submodule removed completely, since ArcLink was officially deprecated and
      deactivated on all big datacenters years ago (see #2994)
  • obspy.clients.fdsn:
    • introduce fine-grained FDSN client exceptions (see #2653, #2964)
    • support for "eventtype" parameter in get_events(), as specified in version
      1.2 of the FDSN event web service (see #2780)
    • Hostnames with hyphens and long TLDs are no longer rejected as invalid
      FDSN server URLs (#2878)
    • add URL mapping for IRISPH5, IESDMC, GEOFON (alternative to GFZ)
      (see #2739, #2932)
    • update RESIF URL mapping to use http and add RESIFPH5 (see #2938)
  • obspy.clients.filesystem:
    • add get_waveforms_bulk() method to SDS client (see #2616, #2626)
    • SDS client get_latency(): make one internal check optional which can be a
      massive speedup on slow filesystems (see #3009)
  • obspy.clients.seedlink:
    • basic client: properly terminate after finished get_info() request (see
      #2996)
  • obspy.imaging:
    • fix section plot in case of a single trace only (see #2764)
    • removed basemap, now only cartopy is supported for maps (see #2961)
    • fix day plot when passed a small interval (see #2967)
  • obspy.clients.filesystem.tsindex:
    • improvements to leap second file setup and other small fixes (see #2776)
  • obspy.clients.seedlink:
    • Fix a bug in basic client when printing debug output (see #2734)
  • obspy.clients.seishub:
    • added deprecation message
  • obspy.db:
    • added deprecation message
    • removed from default test suite
  • obspy.io
    • add support to resolve the SEED id of picks for nlloc hyp files and
      nordic files, refactor the same functionality for SeismicHandler evt
      and HypoDD pha files. Some parameter names therefore changed in the
      latter, but former parameter names are still supported (see #2251)
  • obspy.io.css:
    • open CSS waveforms even if gzip-compressed (see #2736)
  • obspy.io.gse2:
    • When reading GSE2 bulletins, station magnitudes now include waveform IDs
      and have associated station magnitude contributions (see #2718)
  • obspy.io.hypodd
    • add PHA write support (see #2687)
    • add read support for horizontal and vertical origin uncertainty (see #2687)
  • obspy.io.kinemetrics:
    • adds the 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.
  • obspy.io.nordic:
    • add read and write support for New Nordic format (see #2814)
    • fix bug where negative magnitudes were not read properly
    • fix bug where empty hours / minutes / seconds were not read as zero
    • fix bug where lat/lon-errors were read as lon/lat
    • fix bug where origin-error was written with RMS rather than time_error
    • for reading picks in Old Nordic format, set network code to None
      (was 'NA' previously)
    • stop writing waveform-file link to a DUMMY-file by default
    • add support for I/O of apparent velocity / horizontal slowness
    • add support for writing of multiple origins
    • add event-type mapping between Nordic and Obspy/Quakeml (do not fully
      match)
    • read pick-weight as pick.extra.nordic_pick_weight (was arrival.time_weight)
      and read finalweight into arrival.time_weight (or backazmiuth_weight)
      instead.
  • obspy.io.reftek:
    • enable reading data with floating point sampling rates like low sampling
      rate state-of-health channels (see #2678)
    • fix reading data in '16' and '32' encodings, when packets do not use
      the fixed maximum amount of available number of samples per data packet
      (see #2678)
    • properly take into account native system byteorder, should fix reading
      rt130 data on big endian systems (see #2678)
  • obspy.io.seiscomp:
    • Add support for SC3ML 0.11 and 0.12, dropped support for SC3ML < 0.6
      (see #2284).
    • Add support for custom tags (see #2284).
  • obspy.io.sh:
    • fix appending traces to existing Q file (see #2870)
  • obspy.io.xseed:
    • fix a bug reading SEED blockettes 48 and 58 which was likely never
      encountered (see #2668)
    • Properly read a given value of 0.0 in station elevation and not replace it
      with bogus value (see #2763)
  • obspy.signal.array_analysis
    • fixed an issue in array_processing function returning wrong times
      for matplotlib versions >= 3.3 due to the epoch change in matplotlib
      (see #2723)
  • obspy.signal.cross_correlation:
    • Remove deprecated xcorr function, remove deprecated domain keyword
      argument in correlate function (see #1979)
  • obspy.signal.spectral_estimation.PPSD:
    • Added special handling option for infrasound data and global infrasound
      noise models for plotting (see #2740)
    • Replaced use of deprecated Matplotlib functionality (see #2951)
  • obspy.signal.trigger:
    • Improved clarity and speed of several STA/LTA triggers methods, namely
      classic_sta_lta_py, z_detector, and recursive_sta_lta_py (see #2892)
    • Added simple AIC method by Maeda (1985)

ObsPy 1.2.2 (doi: 10.5281/zenodo.3921997)

29 Jun 16:31
0f79f55

Choose a tag to compare

Changes:

  • obspy.core:
    • Fix wrong values in Stats object after deepcopy or pickle of Stats object
      for edge cases (see #2601)
  • obspy.clients.fdsn:
    • EIDA routing client: fix an issue that leaded to a request of all EIDA
      data when requesting an invalid, out-of-epochs time window for a valid
      station (see #2611)
    • update RASPISHAKE URL mapping to use https
    • fix a bug of not handling HTTPException in mass_downloader (see #2606)
    • use the client's set timeout in service discovery, too (see #2656)
    • add URL mapping for FDSNWS at UIB-NORSAR (see #2659)
  • obspy.clients.filesystem:
    • sds: continue get_all_stations() even if encountering an invalid channel
      code (see #2636)
  • obspy.clients.neic:
    • Make client socket blocking (see #2617)
  • obspy.io.hypodd:
    • Allow 60.0 seconds in the second field of origin times, allow NaN in
      the magnitude field for pha format (see #2627)
  • obspy.io.nordic:
    • Fixed a bug raising an exception when reading a nordic file with a non
      positive-definite covariance matrix (see #2593)
  • obspy.io.seiscomp:
    • Fixed an issue where a response has zero zeros or poles (see #2633)

1.2.1

11 Mar 10:19
1b154db

Choose a tag to compare

ObsPy 1.2.1 (doi: 10.5281/zenodo.3706479)

Changes:

  • fix an installation issue with pip and setuptools version 46 (see #2578)
  • fix response plots when providing axes=... with a numpy array of Axes
    instances (see #2579)

1.2.0

06 Mar 16:13
4bdbb67

Choose a tag to compare

ObsPy 1.2.0 (doi: 10.5281/zenodo.3674646)

Work on this release was in parts and among others supported by the following
institutions/companies and grants (in alphabetical order):

  • Earthquake Commision of New Zealand (EQC), grant 18/753
  • École et Observatoire des Sciences de la Terre - Université de Strasbourg
  • ETH Zürich
  • Friedrich-Schiller-Universität Jena
  • Geoscience Australia
  • Incorporated Research Institutions for Seismology (IRIS), NSF (SAGE) award
    :: EAR-1851048
  • Institut de Physique du Globe de Strasbourg
  • Institut de Physique du Globe de Paris
  • Institutions for Seismology (IRIS) through the PASSCAL Instrument Center at
    New Mexico Tech. The facilities of the IRIS Consortium are supported by the
    National Science Foundation under Cooperative Agreement EAR-1261681 and the
    DOE National Nuclear Security Administration.
  • Istituto Nazionale di Geofisica e Vulcanologia, Osservatorio Etneo (Italy),
    Allegato B2 DPC-INGV 2012-2021 Task 10
  • Ludwig-Maximilians-Universität München
  • National Institute for Occupational Safety and Health
  • Royal Netherlands Meteorological Institute (KNMI)
  • School of Geography, Environment and Earth Sciences, Victoria University of
    Wellington
  • The European Union’s Horizon 2020 research and innovation programme under
    the ChEESE project, grant agreement No. 823844
  • The Royal Observatory of Belgium
  • U.S. Geological Survey

Changes:

  • obspy.core:
    • Inventory objects have been adapted to StationXML 1.1 for details on
      changes see #2510 and
      https://github.com/FDSN/StationXML/blob/master/Changes.md
    • Fixed import of custom plugins (see #2423)
    • Fixed "==" comparison for Stream and Trace which was very slow in case of
      traces with >1e6 samples (see #2377)
    • Added almost_equal method for Stream and Trace classes (see #2286).
    • Casting FDSN identifiers to strings upon setting in the stats dictionary
      (see #1997).
    • UTCDateTime objects will now always evaluate equal if their string
      representations are equal (see #2049).
    • UTCDateTime objects now issue depreciation warnings when setting any
      attributes outside of init, or comparing UTCDateTime objects with
      different precisions (see #2077).
    • UTCDateTime objects can now accept hour, minute, second, and microsecond
      values greater than their normal limits by setting the strict keyword
      argument to False (see #2232).
    • Fixed UTCDateTime(..., julday=366) for non-leap years. This was returning
      January 1st of the next year in case of non-leap years being used. Now it
      properly raises an out-of-bounds ValueError (see #2369)
    • When reading StationXML/SC3ML, make sure to properly read empty string
      fields as empty strings instead of "None" (see #2519 and #2527)
    • Better ISO8601 detection for UTCDateTime objects and UTCDateTime(...,
      iso8601=False) now completely disables ISO8601 handling (see #2447)
    • Added replace method to UTCDateTime class (see #2077).
    • Added remove method to Inventory class (see #2088).
    • Added id property to WaveformStreamID (see #2131).
    • Added str and repr_pretty method for Comment class (see #2115)
    • Added eq to QuantityError so empty instances equal None (see #2185).
    • Reworked the event scoped resource identifiers for the event classes
      hopefully fixing all edge-cases (see #2091).
    • Added a hook to allow users to customize finding objects for
      resource_ids which are not found via the normal means (see #2279).
    • Calling Stream.write(...) on an empty stream will now raise an
      ObsPyException consistently across all I/O plugins (see #2201)
    • Stream.get_gaps() will now properly report gaps within Traces that
      have masked arrays (i.e. Traces that have been merged without a fill
      value, see #2299 and #2300).
    • Added copy method to Inventory class (see #2322).
    • The Response.recalculate_overall_sensitivity() method now accepts integers
      (see #2338, #2343).
    • Added wildcard and url support to read_inventory (see #2326).
    • Modified stream.get_gaps() to deal with overlaps correctly (see #1403)
    • Added option "label_epoch_dates" to Inventory/Network.plot_response() to
      optionally add channel epoch start/end dates to legend labels (see #2309)
    • Deprecated the convert_id_to_quakeml_uri, regenerate_uuid, and
      get_quakeml_uri methods of the ResourceIdentifier class (see #2303).
    • Added get_quakeml_uri_str and get_quakeml_id methods to the
      ResourceIdentifier class (see #2303).
    • New method to create response objects directly from poles and zeros (see
      #1962).
    • Added Stream.stack method (see #2440).
    • Added a component field to the Stats object which allows to get and set
      the last character of the SEED channel (see #2484).
    • Fixed a bug in Stream.plot(type='section', reftime=..., ...) that caused
      wrong relative start times of traces relative to given reftime (see #2493)
    • Fixed a Windows-specific path case issue in a helper function that returns
      a list of untracked files in the git repository (see #2296)
    • Fix a bug that was causing an exception being raised in Response.plot()
      because a float was being passed down to numpy.linspace as length of array
      (see #2533)
    • Geographic select of inventory/network/station (see #2515)
    • Select traces in Stream based on an Inventory (see #2531)
  • obspy.clients.fdsn:
    • Add new _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.
    • Adding more location codes to the default priority list in the mass
      downloader (see #2155, #2159).
    • The mass downloader now raises a warning if all channels from a station
      have been deselected due to the default location priorities setting. This
      is a pure usability improvement as it has been confusing users
      (see #2159).
    • Make sure that streams fetched via FDSN are properly trimmed to user
      requested times if data center serves additional data around the start/end
      (see #1887, #2298)
    • Fix a problem that could spam subprocesses that were not closed in routed
      clients (see #2342 and #2344)
    • Make it possible to use signed EIDA tokens and also skip token validation
      completely (see #2297)
    • Adding a mapping for RASPISHAKE
  • obspy.clients.filesystem.tsindex:
    • Add new Client & Indexer modules based on IRIS time series index (see
      #2206)
  • obspy.clients.iris:
    • Results of distaz method are now returned as native floats (see #2499)
  • obspy.clients.neic:
    • Properly use specified timeout value (see #2450)
  • obspy.clients.seedlink:
    • Add method "get_info()" to fetch information on what
      networks/stations/locations/channels are served by the seedlink server
      (see #2405)
    • "get_waveforms()" can now be used with '*' and '?' wildcards in any part
      of requested SEED ID, i.e. network, station, location and channel (see
      #2405)
  • obspy.clients.seishub:
    • Properly handle fetching poles and zeros in presence of multiple metadata
      files for a given station (see #2411)
  • obspy.geodetics:
    • New utility function inside_geobounds() to check whether an object is
      inside a geographic bound (see #2515)
  • obspy.imaging:
    • obspy-scan can now be used with wildcarded SEED IDs when specifying what
      to plot after scanning data (see #2227)
    • Fix a problem in Scanner when loading npz on Python3 that was written on
      Python2 (see #2413)
    • Fix an issue that could make small landmasses not get plotted in basemap
      plots (see #2471, #2477)
    • Fixed a bug in Stream.plot(type='section', reftime=..., ...) that caused
      wrong relative start times of traces relative to given reftime (see #2493)
  • obspy.io:
    • Added read support for receiver gather format v. 1.6 (see #2070)
    • Added read support for FOCMEC 'out' and 'lst' files (see #2156)
    • Added read support for HypoDD 'pha' files (see #2378)
  • obspy.io.arclink:
    • Accommodate change in SeisComP3 publicID delimiter from '#' to '/' in
      ArclinkXML (see #2552)
  • obspy.io.dmx:
    • Add read support for INGV's DMX format (see #2452)
  • obspy.io.gcf:
    • Fixes Python 3.8 compatibility of GCF reader. (see #2505)
  • obspy.io.mseed:
    • Fix a bug resulting in an infinite loop when trying to read a FullSEED
      file without any data records (see #2534 and #2535)
    • Add ability to write int64 data to mseed if it can safely be downcast
      to int32 data, otherwise raises ObsPyMSEEDError. (see #2356)
    • The recordanalyzer can now detect calibration blockettes 300, 310,
      and 320 (see #2370).
    • Can now write zero sampling-rate traces. (see #2488, 2509)
  • obspy.io.nordic:
    • Add ability to read and write focal mechanisms and moment tensor
      information. (see #1924)
    • Add explicit warnings regarding unsupported sections of Nordic files.
    • Fix mapping of magnitude-types between MS to S and Ms to s.
    • Output preferred origin when writing to Nordic format instead of using
      the first origin (see #2195)
    • Include high-accuracy phase-pick reading and writing - high-accuracy is
      now the default phase-writing format, a boolean flag high_accuracy
      has been added to turn this off. (see #2351 and #2348)
    • Allow long-phase names (both reading and writing) - longer than 4 char.
      (see #2351)
    • Include AIN as takeoff-angle when reading and writing nordic files
      (see #2404).
    • Add error ellipses and read high-accuracy hypocenter lines (see #2451)
    • Fix the incorrect handling of events missing pick evaluation information
      (see #...
Read more

1.1.1

17 Feb 11:24
9c17283

Choose a tag to compare

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)

  • General:
    • Tests pass with numpy 1.14 (see #2044).
    • Map plots now also work with matplotlib >= 2.2 (see #2089).
  • obspy.core:
    • UTCDateTime now raises a meaningful exceptions when passing invalid or
      out-of-bounds 'julday' during initialization (see #1988)
    • Fix pickling of traces with a sampling rate of 0 (see #1990)
    • read_inventory() used with non-existing file path (e.g. typo in filename)
      now shows a proper "No such file or directory" error message (see #2062)
    • Fix Trace.times(type='matplotlib') being slow (see #2112)
    • read_events() and read_inventory() now trial most common plugins first
      (QuakeML/StationXML, ...) in case of automatic file format detection (i.e.
      when file type was not explicitly specified, see #2113)
    • Event instances with Origin instances that have do not have defined
      latitude/longitude attributes will no longer raise a TypeError when
      creating a string representation (see #2119 and #2127).
    • Fix Stream.get_gaps() when a trace is completely overlapping another trace
      (see #2218).
    • Fix Exception when comparing ComparingObjects (see #2220).
    • Fix UTCDateTime.strftime() when year is <1900 on Python 2 (see #2167)
    • Inventory objects are more convenient to create now. Network, station, and
      channel codes can now be optional. Additionally the source parameter of
      inventories must no longer be specified at init time (see #2307, #2314).
  • obspy.clients.arclink:
    • Raise a warning at import time that the ArcLink protocol will be
      deprecated soon (see #1987).
  • obspy.clients.fdsn:
    • Mass downloader: Priority lists are now correctly overwritten if channel
      and/or location are set (see #1810, #2031, #2047).
    • A few fixes and stability improvements for the mass downloader (see
      #2081).
    • Fixed routing startup error when running under certain locales (see #2147)
    • Update the IPGP mapping (see #2268).
    • Adding a mapping for the KNMI (see #2270) services.
  • obspy.clients.nrl:
    • Set input units of overall sensitivity to input units of first stage in
      NRL.get_response() (see #2248)
  • obspy.geodetics:
    • Fix the vincenty inverse calculation for equatorial lines (see #2282).
  • obspy.imaging:
    • Normalize moment tensors prior to plotting in the mopad wrapper to
      stabilize the algorithm (see #2114, #2125).
    • fix some map plotting issues with cartopy and local projection (see #2193,
      #2204)
  • obspy.io.ascii:
    • Fixes an issue with the time representation (see #2165, #2179).
  • obspy.io.cnv:
    • Bugfix when phase_mapping is passed as argument when writing a Catalog
      object to CNV (see #2001)
  • obspy.io.css:
    • Fix automatic filetype detection (see #2160 and #2162)
  • obspy.io.gcf:
    • Fix reading stream ID for station/channel code in header (see #2289,
      #2311)
    • Fix bitmask in getting compression code (see #2290, #2310)
  • obspy.io.mseed:
    • Ability to read files that have embedded chunks of non SEED data. (see
      #1981, #2057).
    • Fix util.get_start_and_end_time returning sample rate = 0 when sample rate
      = 1 (see #2069)
    • Avoid showing invalid warnings when guessing endian during parsing
      timestamps (see #1988)
    • util.get_record_information() now works correctly for negative sampling
      rate factors and multipliers (see #2030, #2191).
  • obspy.io.nordic
    • Bug-fix for amplitudes without magnitude_hint (see #2021)
    • Bug-fix for wavefiles with full path stripping (see #2021)
    • Bug-fix for longitudes between -100 and -180 (see #2197)
  • obspy.io.reftek:
    • Fix problems reading some Reftek 130 files, presumably due to floating
      point accuracy issues in comparing timestamps. Internal representation of
      time stamps is changed to integer nanosecond POSIX timestamp (see #2036,
      #2038, #2105)
    • Fix a bug that prevents reading files that have no data in first channel
      (see #2101)
  • obspy.io.sac:
    • Allow passing on the byteorder flag from the top-level obspy.read()
      function (see #2285, #2292).
  • obspy.io.seiscomp:
    • Fix inventory read when maxClockDrift is unset in SC3ML (see #1993)
    • Fix the reading of FIR coefficients when multiple whitespaces in SC3ML
      (see #2259)
    • Fix the reading of the poles and zeros when multiple whitespaces in SC3ML
      (see #2260).
    • Fix reading files with zero sampling rates (see #2294 and #2293)
    • Fix divide by zero error when parsing sc3ml files of zero sampling rage
      (see #2294).
  • obspy.io.stationxml
    • Allow writing of dates before 1900 also on Python 2 (see #2013, #2015).
    • Write the UTC time zone specifier to all times (see #2015).
    • Units of first response stage as well as unit response stages are now
      determined with some heuristics (see #2250, #2318).
  • obspy.io.xseed:
    • Third condition to split blockettes when reading RESP files. Now more
      forgiving for slightly different files (see #2170, #2189)
  • obspy.signal:
    • Allow singular COUNT units in evalresp (see #2003, #2011).
    • Fix an evalresp issue in case of an analog PAZ stage zero denominator (see
      #2171 and #2190)
    • PPSD: for safety reasons, raise an ObsPyException if trying to read a PPSD
      npz file that was written with a newer version of the npz representation
      than is used by current ObsPy version (see #2051)
    • The ar_pick() trigger function now raises an error if the three data
      arrays don't have the same length (see #1801, #2148).
    • fix a precision issue in AR picker in case of low amplitude input (see
      #2252 and #2253)
  • obspy.taup:
    • Fallback to linear slowness interpolation for very small and shallow
      layers (see #2126, #2129).
    • Fix bug preventing constant-velocity models with discontinuities at every
      layer boundary from being built (see #2264).
    • More robust resize method so TauPy now works properly on Python 3.7 (see
      #2280, #2319).