ObsPy: A Python Toolbox for seismology/seismological observatories.

Overview

ObsPy: A Python Toolbox for seismology/seismological observatories.

NumFOCUS affiliated project

Github Action Status Coverage Status Supported Python versions

License LGPLv3

PyPI Version DOI Conda

Discourse status Gitter Announcements Mailing List Twitter Follow

ObsPy is an open-source project dedicated to provide a Python framework for processing seismological data. It provides parsers for common file formats, clients to access data centers and seismological signal processing routines which allow the manipulation of seismological time series (see Beyreuther et al. 2010, Megies et al. 2011, Krischer et al. 2015).

The goal of the ObsPy project is to facilitate rapid application development for seismology.

ObsPy is licensed under the GNU Lesser General Public License (LGPL) v3.0.

A one-hour introduction to ObsPy is available at YouTube.

Read more in our GitHub wiki

Installation

Installation instructions can be found in the wiki.

Getting started

Read about how to get started in the wiki and in our Tutorial section in the documentation.

ObsPy Tutorial notebooks -- and much more on specific seismology topics -- can also be found on Seismo-Live, both as a static preview and as interactively runnable version.

Link to Seismo-Live

from obspy import read
st = read()  # load example seismogram
st.filter(type='highpass', freq=3.0)
st = st.select(component='Z')
st.plot()

Example waveform Plot

Documentation and Changelog

The detailed changelog is available here, our docs can be found at docs.obspy.org.

Contributing

Please see details on how to contribute to the project here.

References

Impact

ObsPy impact statistics

Comments
  • SEED -> Inventory read support + NRL client

    SEED -> Inventory read support + NRL client

    I'm developing a tool for temporary network operators to create metadata for their deployments. I had started with the intent of creating Dataless SEED, but am considering using the modern StationXML and converting to Dataless for downstream processing, or updating the downstream processes to handle StationXML. The idea is to scan the mseed recorded, use that data to create net, sta, chan and other info in those headers to populate. The user points to the correct datalogger and sensor from the NRL, and fills in the remaining info such as lat long.

    +TESTS:clients.nrl

    enhancement .core.inventory .io.xseed clients.nrl 
    opened by dsentinel 176
  • Including QC module

    Including QC module

    As some of you might know in EIDA we are working on a module to compute QC parameters and extract features from seismic waveforms. Would you be interested in including such a module in obspy?

    enhancement .io.mseed .signal 
    opened by ltrani 155
  • ray path plotting routine

    ray path plotting routine

    This is probably another longer duration pull request. It adds functions for greatcircle path plotting in 2D and 3D to obspy, based on geographiclib and taup. It is already working but needs to be structured nicely. Here is an example, plotted again with mayavi (green = P, blue = Pdiff, red = PKP), but plotting could be done with matplotlib and vtk file output again. Right now it works for one event and and inventory, but I think now it is easy to expand it to a catalog and an inventory together.

    3d_paths

    +DOCS

    enhancement .taup .imaging 
    opened by MMesch 116
  • Release 1.2.0

    Release 1.2.0

    Milestone https://github.com/obspy/obspy/milestone/16

    Just reserved a DOI on zenodo for next release: 10.5281/zenodo.3674646

    Things to do, when release candidates and final release are done:

    • [x] Run docker tests (@krischer / @megies -- ~~are done routinely now, but double-checking can't hurt~~)
    • [x] source distribution to pypi
    • [x] conda packages via conda-forge: conda-forge/obspy-feedstock#6
    • [ ] ~~conda packages for Linux 32bit via https://github.com/obspy/obspy/tree/master/misc/installer/anaconda and distributed at https://anaconda.org/obspy/obspy/files~~ do we still need this?? (@krischer / @megies)
    • [ ] maxiconda bundled installer via recipes in https://github.com/obspy/anaconda-installers but built locally on win+nix and attached to release: https://github.com/obspy/obspy/releases/tag/1.1.0 (@megies and @barsch)
    • [ ] wheels for Linux+OSX (@krischer)
    • [x] Windows pypi packages (@barsch / appveyor)
    • [ ] debian packages (@megies)
    • [x] redhat/centos packages (@qulogic)
    • [ ] macports packages (@petrrr)
    • [x] zenodo: reserve a DOI pre-release (@megies) 10.5281/zenodo.3674646
    • [x] zenodo: upload sdist zipball and finalize release (@megies)
    • [x] Update docs once released (@megies)
    • [x] News entry in the wiki
    • [x] "What's new?" page in the wiki
    • [x] Email to the users and announcements mailing lists
    • [x] Tweet
    • [ ] update base branches for all issues bumped to 1.2.1 to a new branch maintenance_1.2.x
    • [x] check dependency versions, some old distros we used to support might have gone EOL since release of 1.0, so we might be able to bump minimum dependency versions of e.g. numpy, scipy, matplotlib, ...

    • [ ] Party :tada: (don't tick before all other checkboxes are ticked!)
    packaging 
    opened by megies 86
  • @vcr decorator for unit/doctests - recording/playback of network traffic via python sockets

    @vcr decorator for unit/doctests - recording/playback of network traffic via python sockets

    What does this PR do?

    Any Python socket communication in unittests (decorated with the @vcr function) and/or doctests (containing a # doctest: +VCR) will be recorded on the first run and saved into a special 'vcrtapes' directory as single pickled file for each test case. Future test runs will reuse those recorded network session allowing for faster tests without any network connection. In order to create a new recording one just needs to remove/rename the pickled session file(s).

    So pretty similar to VCRPy but on socket level instead of HTTP (request, urllib3, etc.) - so therefore it should be more powerful ...

    Why was it initiated? Any relevant issues?

    Network tests tend to fail sporadically, need usually a very long time (compared to other tests) and (surprise!) require a network connection (if not mocked).

    This PR tackles all three issues mentioned above. Here some performance tests (network connection had been disabled during tests of the vcr branch):

    (Python36) d:\Workspace\obspy>git checkout master
    Already on 'master'
    Your branch is up-to-date with 'origin/master'.
    
    (Python36) d:\Workspace\obspy>obspy-runtests -d obspy.clients.syngine.tests.test_client
    Running d:\workspace\obspy\obspy\scripts\runtests.py, ObsPy version '1.0.2.post0+902.gbfe6b3c90a.obspy.master'
    ..............
    ----------------------------------------------------------------------
    Ran 14 tests in 9.743s
    OK
    
    (Python36) d:\Workspace\obspy>git checkout vcr
    Switched to branch 'vcr'
    Your branch is up-to-date with 'origin/vcr'.
    
    (Python36) d:\Workspace\obspy>obspy-runtests -d obspy.clients.syngine.tests.test_client
    Running d:\workspace\obspy\obspy\scripts\runtests.py, ObsPy version '1.0.2.post0+903.g151e12679f.obspy.vcr'
    ..............
    ----------------------------------------------------------------------
    Ran 14 tests in 0.432s
    OK
    

    ToDo

    • [X] ensure platform compatibility
      • [X] Win (https://ci.appveyor.com/project/obspy/vcr/build/1.0.31)
      • [X] Linux (https://travis-ci.org/obspy/vcr/builds/210161304)
      • [X] Mac (https://travis-ci.org/obspy/vcr/builds/210161304)
    • [x] clients.arclink: issues on Linux with current telnet implementation - I may have to rewrite that :/
    • [x] clients.seishub: needs vcrtapes for client doctests (@megies)
    • [x] clients.seedlink: needs reworking - current tests don't work - can't add @vcr therefore ...
    • [x] clients.fdsn: could cover more tests - currently the service discovery thread (which is using sockets too) is intercepting occasionally the test case itself (@krischer)
    • [x] ensure the whole test suite works without network connection
    • [x] remove (non-)network tests options from obspy-runtests - all tests should be run as default setting
    • [X] SSLSocket support (HTTPS)
    • [X] no arclink specific hacks anymore -> more general option for recv_timeout and recv_endmarker
    • [X] needs documentation
    • [X] needs CHANGELOG.txt entry
    • [x] move it into an extra Python package as its highly reusable - also to increase test coverage by using all appveyor env instead only selected ones due to huge number of tests we have in obspy -> see https://github.com/obspy/vcr/ - you need to pip install -U vcr on your local env
    • [ ] include vcr as a git submodule in core/util/testing ?
    • [ ] squash old vcr tapes in the git history
    release blocker testing .clients 
    opened by barsch 85
  • Variable string encoding for SAC files

    Variable string encoding for SAC files

    This is an attempt to add "encoding" flag to obspy.io.sac.satrace.read() function in order to read some SAC that has encoding other than "ASCII".

    PR Checklist

    • [x] All tests still pass.
    • [x] Any new features or fixed regressions are be covered via new tests.
    • [x] Any new or changed features have are fully documented.
    • [x] Significant changes have been added to CHANGELOG.txt .
    • [x] First time contributors have added your name to CONTRIBUTORS.txt .

    Closes #1768.

    .io.sac ready for review 
    opened by lijunzh 76
  • Plot Event far-field radiation pattern / refactor core/event.py into folder structure

    Plot Event far-field radiation pattern / refactor core/event.py into folder structure

    This addition to obspy allows to compute and plot P/S-wave farfield radiation patterns for (hopefully) arbitray moment tensors. You can run the test or try:

    from obspy.imaging.radpattern import plot_3drpattern
    mt = [0.91, -0.89, -0.02, 1.78, -1.55, 0.47]
    plot_3drpattern(mt,kind='p_sphere')
    

    it is neither well tested nor optimized. Some improvements could be:

    • add colour and other things to quiver plots
    • making sure that axes are well aligned
    • plotting beachball projections on the sides of the matplotlib 3d plot
    • compute radiation pattern for different a set of taup phases and stations
    • add nearfield radiation
    • add single force

    p_radpattern

    p_quiver

    enhancement .core.event .imaging 
    opened by MMesch 72
  • Release 1.1.0

    Release 1.1.0

    https://pypi.io/packages/source/o/obspy/obspy-1.1.0.zip

    SHA256: ef48b4e52a8166c35c46775b523899ffaa00658018822103e1ad9f5008050d61

    Issues left to handle:

    • milestone 1.1.0
    • other issues with no action or lower priority were bumped to 1.2.0 milestone
    • feel free to still get issues ready that were bumped to 1.2.0

    Things to do, when release candidates and final release are done:

    • [x] Run docker tests (@krischer / @megies -- are done routinely now, but double-checking can't hurt)
    • [x] source distribution to pypi
    • [x] conda packages via conda-forge: conda-forge/obspy-feedstock#6
    • [x] conda packages for Linux 32bit via https://github.com/obspy/obspy/tree/master/misc/installer/anaconda and distributed at https://anaconda.org/obspy/obspy/files (@krischer / @megies)
    • [x] maxiconda bundled installer via recipes in https://github.com/obspy/anaconda-installers but built locally on win+nix and attached to release: https://github.com/obspy/obspy/releases/tag/1.1.0 (@megies and @barsch)
    • [x] wheels for Linux+OSX (@krischer)
    • [x] Windows pypi packages (@barsch / appveyor)
    • [x] debian packages (@megies)
    • [x] redhat/centos packages (@qulogic)
    • [x] macports packages (@petrrr)
    • [x] zenodo: reserve a DOI pre-release (@megies)
    • [x] zenodo: upload sdist zipball and finalize release (@megies)
    • [x] Update docs once released (@megies)
    • [x] News entry in the wiki
    • [x] "What's new?" page in the wiki
    • [x] Email to the users and announcements mailing lists
    • [x] Tweet
    • [x] update base branches for all issues bumped to 1.1.1 to a new branch maintenance_1.1.x
    • [x] check dependency versions, some old distros we used to support might have gone EOL since release of 1.0, so we might be able to bump minimum dependency versions of e.g. numpy, scipy, matplotlib, ...

    • [ ] Party :tada: (don't tick before all other checkboxes are ticked!)
    packaging 
    opened by megies 68
  • Stop using 'jet' colour map by default

    Stop using 'jet' colour map by default

    I've been meaning to post this before, and this post just reminded me of it. Matplotlib has been taking its time, but they have to come up with a default colour map for a wide variety of cases. Since we have so few plots, I don't see why we can't choose a sane default for them ourselves. (And waiting for matplotlib will leave out all the users with older versions anyway.)

    So far, I have found the following plots that could use fixing:

    • [x] Tutorial:
    • [x] Basemaps:
      • [x] Catalog plots
      • The examples use depth-colouring red-yellow-green, which is not good for colour-blindness.
      • Colouring by date will use the default colour map according to docs, though I don't think this is true.
      • [x] Inventory plots
      • Uses jet by default, though it tries to turn it into categories.
      • Changed to use the "Paired" colour map from ColorBrewer. This makes more sense since it's really a categorical designation. Additionally, the single colouring uses the colour from Paired with lut=1, instead of blue.
      • [x] Network plots
      • Might not be needed for anything.
      • The default colour is changed like the previous one. No colour map involved.

    This PR is not nearly done, so suggestions are welcome.

    enhancement .imaging 
    opened by QuLogic 62
  • Updating doc building to Sphinx 4.3.2 (python 3)

    Updating doc building to Sphinx 4.3.2 (python 3)

    This PR updates the docs build process to Sphinx 3.1.1. After unsucessfully trying to fix the old doc builder I decided to restart the whole process from scratch and reimplement existing features afterwards.

    • Bootstrap theme got replaced by more lightweight "Read the Docs" theme - however I didn't spend to much time on styling yet as this is something which should be tackled after the build process is running smooth
    • stylesheet/javascript/image optimization is done via gulp
    • played a bit with sphinx-gallery but didn't like it, so its again a modified version of matplotlib.sphinxext.plot_directive, which work good enough for me
    • all plots using basemap or mlpy are failing -> segmentation fault on ubuntu as well on win10 for basemap 1.2.1 on py38
    • docs were in pretty bad shape - a lot of warnings have been fixed - there are still many left
    • currently only the html builder has been tested - latex/docset etc need work
    • the structure of the start page probably needs some tweak - I suggest to remove all help/mailing list options from there and link to a github page instead - we should focus on documentation only IMHO

    A preview of the current results can be seen here: https://docs.obspy.org/sphinx3/

    Feel free to participate - running the doc building takes unfortunatly ages ... If someone could rewrite all examples using basemap to cartopy would be a big help.

    docs build_docs 
    opened by barsch 61
  • taup: added a time plot -- analogue to the existing ray path plot

    taup: added a time plot -- analogue to the existing ray path plot

    What does this PR do?

    create a method on the arrivals object for a travel time plot, analogue to the ray path plot method. It replaces the old (and removed travelTimePlot function, see https://docs.obspy.org/archive/1.0.3/tutorial/code_snippets/travel_time.html#travel-time-plot)

    Why was it initiated? Any relevant Issues?

    Fixes #1501, fixes #1330

    PR Checklist

    • [x] This PR is not directly related to an existing issue (which has no PR yet).
    • [x] All tests still pass.
    • [x] Any new features or fixed regressions are be covered via new tests.
    • [x] Any new or changed features have are fully documented.
    • [x] Significant changes have been added to CHANGELOG.txt .
    • [x] First time contributors have added your name to CONTRIBUTORS.txt .

    Todos

    • [x] add convenience wrapper function
    • [x] add example usage to convenience wrapper function docstring (with example plot)
    • [x] add image test
    • [x] add example plot to gallery
    import numpy as np
    import matplotlib.pyplot as plt
    from obspy.taup import TauPyModel
    
    # set the velocity model you want to use:
    model = TauPyModel(model='iasp91')
    
    # set epicentral distances, the phases you want, and a source depth:
    DISTANCES=range(0,100,1)
    PHASES = ['S','P']
    sourcedepth=5
    
    plt.figure(figsize=(10, 10))
    ax = plt.subplot(111)
    
    # plot arrival times for all arrivals in arrivals object:
    for distance in DISTANCES:
        arrivals = model.get_ray_paths(sourcedepth, distance, phase_list=PHASES)
        if not len(arrivals):
            print('No arrival time for:', PHASES, distance)
            continue
        arrivals.timeplot(PHASES,show=False,ax=ax)
    ax.set_xlim(DISTANCES[0],DISTANCES[-1])
    plt.show()
    
    enhancement .taup .imaging 
    opened by kaspervanwijk 57
  • updated algorithm to split and encode data into blocks and addded test

    updated algorithm to split and encode data into blocks and addded test

    What does this PR do?

    Fixes a BUG in the algorithm to split and encode last few data points into GCF blocks

    Why was it initiated? Any relevant Issues?

    Issue were brought up in post "MiniSEED to GCF" in discourse.obspy.org forum (https://discourse.obspy.org/t/miniseed-to-gcf/1598)

    PR Checklist

    • [x] Correct base branch selected? master for new features, maintenance_... for bug fixes
    • [x] This PR is not directly related to an existing issue (which has no PR yet).
    • [x] While the PR is still work-in-progress, the no_ci label can be added to skip CI builds
    • [x] If the PR is making changes to documentation, docs pages can be built automatically. Just add the build_docs tag to this PR. Docs will be served at docs.obspy.org/pr/{branch_name} (do not use master branch). Please post a link to the relevant piece of documentation.
    • [x] If all tests including network modules (e.g. clients.fdsn) should be tested for the PR, just add the test_network tag to this PR.
    • [x] All tests still pass.
    • [x] Any new features or fixed regressions are covered via new tests.
    • [x] Any new or changed features are fully documented.
    • [x] Significant changes have been added to CHANGELOG.txt .
    • [x] First time contributors have added your name to CONTRIBUTORS.txt .
    • [x] If the changes affect any plotting functions you have checked that the plots from all the CI builds look correct. Add the "upload_plots" tag so that plotting outputs are attached as artifacts.
    • [x] New modules, add the module to CODEOWNERS with your github handle
    • [x] Add the ready for review tag when you are ready for the PR to be reviewed.
    ready for review io.gcf 
    opened by paitor 0
  • TauP: 4 Layers .nd model. No PKIKP phase calculated at 180 degrees unless Vs in Outer Core is zero

    TauP: 4 Layers .nd model. No PKIKP phase calculated at 180 degrees unless Vs in Outer Core is zero

    Avoid duplicates

    • [X] I searched existing issues

    Bug Summary

    Hi Again,

    this bug/feature I discussed a few months ago with Philip Crotwell @crotwell , and thought of reporting it here as well.

    The issue: No PKIKP phase was calculated at 180 degrees for my model (outer core Vs >0) [see .nd model below].

    Philip Crotwell kindly identified that a workaround was setting the Vs for the outer core as zero (liquid). I was interested in knowing the direct transmission time of the P wave through all the layers using a solid outer core (Vs>0); since I am interested only in P waves I set my outer core Vs to zero and the PKIKP phase worked. I leave it here so that a solution is implemented in the future or someone dealing with a similar problem has this workaround in mind.

    Model with solid outer core:

    0.000 60.000 42.426 1.300 225.000 60.000 42.426 1.300 450.000 60.000 42.426 1.300 675.000 60.000 42.426 1.300 900.000 60.000 42.426 1.300 mantle 900.000 70.001 49.497 1.300 1050.000 70.001 49.497 1.300 1200.000 70.001 49.497 1.300 1350.000 70.001 49.497 1.300 1500.000 70.001 49.497 1.300 outer-core 1500.000 80.001 56.569 1.300 1625.000 80.001 56.569 1.300 1750.000 80.001 56.569 1.300 1875.000 80.001 56.569 1.300 2000.000 80.001 56.569 1.300 inner-core 2000.000 99.999 70.711 1.300 2125.000 99.999 70.711 1.300 2250.000 99.999 70.711 1.300 2375.000 99.999 70.711 1.300 2500.000 99.999 70.711 1.300

    Result in Obspy 1.4.0 for phase 'PKIKP' :

    model.get_travel_times: 0 arrivals

    model.get_ray_paths: 0 arrivals

    Result in TauP 2.6.0 for phase 'PKIKP' :

    '''Model: 4Layer_model Distance Depth Phase Travel Ray Param Takeoff Incident Purist Purist (deg) (km) Name Time (s) p (s/deg) (deg) (deg) Distance Name -----------------------------------------------------------------------------------'''

    Obspy 1.4.0 produces the right answer for phase 'PKP' though:

    model.get_travel_times: 1 arrivals PKP phase arrival at 69.643 seconds model.get_ray_paths: 1 arrivals PKP phase arrival at 69.643 seconds

    Obspy_Raypaths_4Layer_model_PKP

    Now, if you set the outer core Vs to zero, the results are as follow:

    Result in Obspy 1.4.0 for phase 'PKIKP' (Vs = 0 in outer core) :

    model.get_travel_times: 1 arrivals PKIKP phase arrival at 69.643 seconds model.get_ray_paths: 1 arrivals PKIKP phase arrival at 69.643 seconds

    Obspy_Raypaths_4Layer_model_OC_VS0_PKIKP

    And no 'PKP' for this model:

    model.get_travel_times: 0 arrivals

    model.get_ray_paths: 0 arrivals

    Result in TauP 2.6.0 for phase 'PKIKP' (Vs = 0 in outer core) :

    TauP_ZeroVS_OuterCore

    '''Model: 4Layer_model_OC_VS0 Distance Depth Phase Travel Ray Param Takeoff Incident Purist Purist (deg) (km) Name Time (s) p (s/deg) (deg) (deg) Distance Name -----------------------------------------------------------------------------------''' 180.00 0.0 PKIKP 69.64 0.000 0.00 0.00 180.00 = PKIKP'''

    Thank you all for your wonderful efforts to improve these tools for seismology and beyond,

    Regards, Evert

    Code to Reproduce

    # Folder where .nd file (velocity model) is stored
    filename = ndfolder+'/'+name+'.nd'
    
    # Create the .npz model file from the *.nd file
    build_taup_model(filename,output_folder=ndfolder,verbose=True) 
    
    # Load the model into TauP    
    model = TauPyModel(model=f"{ndfolder}/{name}.npz") #
    
    sourcedepth = 0.0 # Source depth
    angle_test = 180 # Epicentral distance to check
    
    phaselist = ['PKIKP']
    
    arrivals2 = model.get_travel_times(sourcedepth, angle_test, phase_list=phaselist)
    print('model.get_travel_times: ',arrivals2)
    arrivals = model.get_ray_paths(sourcedepth, angle_test, phase_list=phaselist)
    # See all the arrivals.
    print('model.get_ray_paths: ',arrivals)
    
    fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
    ax = arrivals.plot_rays(plot_type='spherical', phase_list=phaselist,
                       legend=True, fig = fig, ax = ax)
    fig.savefig('Obspy_Raypaths_'+name+'_'+phaselist[0]+'.png', dpi=200)
    plt.show()
    

    Error Traceback

    Building obspy.taup model for '/home/leo/Documents/Obspy_BUG/nd_models/4Layer_model.nd' ...
    filename = /home/leo/Documents/Obspy_BUG/nd_models/4Layer_model.nd
    Done reading velocity model.
    Radius of model . is 2500.0
    Using parameters provided in TauP_config.ini (or defaults if not) to call SlownessModel...
    Parameters are:
    taup.create.min_delta_p = 0.1 sec / radian
    taup.create.max_delta_p = 11.0 sec / radian
    taup.create.max_depth_interval = 115.0 kilometers
    taup.create.max_range_interval = 0.04363323129985824 degrees
    taup.create.max_interp_error = 0.05 seconds
    taup.create.allow_inner_core_s = True
    Slow model  235 P layers,280 S layers
    Done calculating Tau branches.
    Done Saving /home/leo/Documents/Obspy_BUG/nd_models/4Layer_model.npz
    Method run is done, but not necessarily successful.
    model.get_travel_times:  0 arrivals
    	
    model.get_ray_paths:  0 arrivals
    	
    
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    Cell In[103], line 23
         20 print('model.get_ray_paths: ',arrivals)
         22 fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
    ---> 23 ax = arrivals.plot_rays(plot_type='spherical', phase_list=phaselist,
         24                    legend=True, fig = fig, ax = ax)
         25 fig.savefig('Obspy_Raypaths_'+name+'_'+phaselist[0]+'.png', dpi=200)
         26 plt.show()
    
    File ~/anaconda3/envs/obspy2/lib/python3.10/site-packages/obspy/taup/tau.py:331, in Arrivals.plot_rays(self, phase_list, plot_type, plot_all, legend, label_arrivals, show, fig, ax, indicate_wave_type)
        328     arrivals.append(arrival)
        330 if not arrivals:
    --> 331     raise ValueError("Can only plot arrivals with calculated ray "
        332                      "paths.")
        334 # get the velocity discontinuities in your model, for plotting:
        335 discons = self.model.s_mod.v_mod.get_discontinuity_depths()
    
    ValueError: Can only plot arrivals with calculated ray paths.
    

    ObsPy Version?

    1.4.0

    Operating System?

    Ubuntu

    Python Version?

    3.10.8

    Installation Method?

    conda

    bug-unconfirmed 
    opened by edur409 0
  • Wrong ray paths and arrival time using TauP on custom .nd model. Bug in TauPyModel.get_ray_paths and arrivals.plot_rays

    Wrong ray paths and arrival time using TauP on custom .nd model. Bug in TauPyModel.get_ray_paths and arrivals.plot_rays

    Avoid duplicates

    • [X] I searched existing issues

    Bug Summary

    Hi All,

    The folowing .nd model was created to do ray tracing on a fruit, therefore the unusual values for P and S velocities.

    0.00 200.00 141.42 1.30 298.38 200.00 141.42 1.30 596.75 200.00 141.42 1.30 895.12 200.00 141.42 1.30 1193.50 200.00 141.42 1.30 mantle 1193.50 150.00 106.07 1.30 1491.82 150.00 106.07 1.30 1790.13 150.00 106.07 1.30 2088.45 150.00 106.07 1.30 2386.76 150.00 106.07 1.30 outer-core 2386.76 150.15 106.17 1.30 2386.82 150.15 106.17 1.30 2386.87 150.15 106.17 1.30 2386.92 150.15 106.17 1.30 2386.98 150.15 106.17 1.30 inner-core 2386.98 150.30 106.28 1.30 2386.98 150.30 106.28 1.30 2386.99 150.30 106.28 1.30 2386.99 150.30 106.28 1.30 2387.00 150.30 106.28 1.30

    The ray tracing produces this result at epicentral distance 120.0 degrees and a P arrival time of 20.672 seconds is produced by the get_ray_paths function:

    Obspy_Raypaths_outfile_model_P

    The TauP software in Java correctly reports no arrivals for that epicentral distance:

    TauP_120

    Hope this information is enough to reproduce the results. Thank you so much for keeping TauP as part of the Obspy package.

    Regards, Evert

    Code to Reproduce

    import numpy as np
    import matplotlib.pyplot as plt
    from obspy.taup import TauPyModel
    from obspy.taup.taup_create import build_taup_model
    
    # Folder where .nd file (velocity model) is stored
    filename = ndfolder+'/'+name+'.nd'
    
    # Create the .npz model file from the *.nd file
    build_taup_model(filename,output_folder=ndfolder,verbose=True) 
    
    # Load the model into TauP    
    model = TauPyModel(model=f"{ndfolder}/{name}.npz") #
    
    sourcedepth = 0.0 # Source depth
    angle_test = 120.0 # Epicentral distance to check
    
    phaselist = ['P','PKP','PKIKP']
    
    arrivals = model.get_ray_paths(sourcedepth, angle_test, phase_list=phaselist)
    
    fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
    ax = arrivals.plot_rays(plot_type='spherical', phase_list=phaselist,
                       legend=True, fig = fig, ax = ax)
    fig.savefig('Obspy_Raypaths_'+name+'_'+phaselist[0]+'.png', dpi=200)
    plt.show()
    
    # See all the arrivals.
    print(arrivals)
    

    Error Traceback

    No response

    ObsPy Version?

    1.4.0

    Operating System?

    Ubuntu

    Python Version?

    3.10.8

    Installation Method?

    conda

    .taup bug-unconfirmed 
    opened by edur409 3
  • Remove unittest

    Remove unittest

    What does this PR do?

    Get rid of unittest from the whole test code base and replace with pytest. (Except for mock module which comes in unittest)

    Generally this would belong into master but if we do it there we end up with a massive diff between maintenance and master branch and will end up in merge hell most likely a lot of times when merging things back into master from maintenance.

    Why was it initiated? Any relevant Issues?

    Make testing code base more consistent.

    PR Checklist

    • [ ] Correct base branch selected? master for new features, maintenance_... for bug fixes
    • [ ] This PR is not directly related to an existing issue (which has no PR yet).
    • [ ] While the PR is still work-in-progress, the no_ci label can be added to skip CI builds
    • [ ] If the PR is making changes to documentation, docs pages can be built automatically. Just add the build_docs tag to this PR. Docs will be served at docs.obspy.org/pr/{branch_name} (do not use master branch). Please post a link to the relevant piece of documentation.
    • [ ] If all tests including network modules (e.g. clients.fdsn) should be tested for the PR, just add the test_network tag to this PR.
    • [ ] All tests still pass.
    • [ ] Any new features or fixed regressions are covered via new tests.
    • [ ] Any new or changed features are fully documented.
    • [ ] Significant changes have been added to CHANGELOG.txt .
    • [ ] First time contributors have added your name to CONTRIBUTORS.txt .
    • [ ] If the changes affect any plotting functions you have checked that the plots from all the CI builds look correct. Add the "upload_plots" tag so that plotting outputs are attached as artifacts.
    • [ ] New modules, add the module to CODEOWNERS with your github handle
    • [ ] Add the ready for review tag when you are ready for the PR to be reviewed.
    testing test_network 
    opened by megies 10
  • Taup fix for models with no discontinuities

    Taup fix for models with no discontinuities

    What does this PR do?

    This PR fixes the issue described by @dylanmikesell and @kaspervanwijk in the comments of #3070, namely the failure to build a tau model when there are no discontinuities present. With this PR, the one layer model example now works:

    from obspy.taup import TauPyModel
    from obspy.taup.taup_create import build_taup_model
    build_taup_model('1_layer_model.tvel')
    model = TauPyModel("1_layer_model")
    arrivals = model.get_ray_paths(distance_in_degree=160.0, source_depth_in_km=0.0)
    print(arrivals)
    
    Building obspy.taup model for '1_layer_model.tvel' ...
    filename = 1_layer_model.tvel
    Done reading velocity model.
    Radius of model  is 6371.0
    Using parameters provided in TauP_config.ini (or defaults if not) to call SlownessModel...
    Parameters are:
    taup.create.min_delta_p = 0.1 sec / radian
    taup.create.max_delta_p = 11.0 sec / radian
    taup.create.max_depth_interval = 115.0 kilometers
    taup.create.max_range_interval = 0.04363323129985824 degrees
    taup.create.max_interp_error = 0.05 seconds
    taup.create.allow_inner_core_s = True
    Slow model  224 P layers,382 S layers
    Done calculating Tau branches.
    Done Saving /home/john/Documents/students/stuart/obspy/obspy/taup/data/1_layer_model.npz
    Method run is done, but not necessarily successful.
    10 arrivals
    	P phase arrival at 2023.939 seconds
    	PP phase arrival at 2642.064 seconds
    	PP phase arrival at 3148.690 seconds
    	S phase arrival at 3514.964 seconds
    	PS phase arrival at 3796.746 seconds
    	SP phase arrival at 3796.746 seconds
    	PS phase arrival at 4417.046 seconds
    	SP phase arrival at 4417.046 seconds
    	SS phase arrival at 4588.459 seconds
    	SS phase arrival at 5468.313 seconds
    

    These arrivals agree with the java version.

    Why was it initiated? Any relevant Issues?

    See #3070.

    PR Checklist

    • [x] Correct base branch selected? master for new features, maintenance_... for bug fixes
    • [x] This PR is not directly related to an existing issue (which has no PR yet).
    • [ ] While the PR is still work-in-progress, the no_ci label can be added to skip CI builds
    • [ ] If the PR is making changes to documentation, docs pages can be built automatically. Just add the build_docs tag to this PR. Docs will be served at docs.obspy.org/pr/{branch_name} (do not use master branch). Please post a link to the relevant piece of documentation.
    • [ ] If all tests including network modules (e.g. clients.fdsn) should be tested for the PR, just add the test_network tag to this PR.
    • [x] All tests still pass.
    • [ ] Any new features or fixed regressions are covered via new tests.
    • [ ] Any new or changed features are fully documented.
    • [ ] Significant changes have been added to CHANGELOG.txt .
    • [ ] First time contributors have added your name to CONTRIBUTORS.txt .
    • [ ] If the changes affect any plotting functions you have checked that the plots from all the CI builds look correct. Add the "upload_plots" tag so that plotting outputs are attached as artifacts.
    • [ ] New modules, add the module to CODEOWNERS with your github handle
    • [x] Add the ready for review tag when you are ready for the PR to be reviewed.
    .taup ready for review 
    opened by johnrudge 0
  • Drop TemporaryFiles usage while reading data

    Drop TemporaryFiles usage while reading data

    Problem

    Regardless of legacy code or specific requirements which I might not be aware of, the use of Temporary files when reading data in ObsPy looks to me very inefficient and convoluted, and often forced us to implement wrapper code in order to make big to massive reads of data more efficient:

    1. When reading from file like objects like BytesIO, in case of errors the data is saved to a temporary file and tried to be read from there: it is unclear which would be the benefit here
    2. More importantly, when reading from URL, the bytes received are saved to another Temporary file, whereas they could simply put in a BytesIO object in memory and read with no overhead

    Proposed solution

    1. When reading from file like objects like BytesIO, if the attempt fails, simply raise, as it should be
    2. When reading from URL, put the received bytes in a BytesIO, and fall back to point 1 above

    Incidentally, this might cause also the removal of the NamedTemporaryFile class, though it could be needed in other parts of the code

    enhancement 
    opened by rizac 2
Releases(1.4.0)
  • 1.4.0(Nov 21, 2022)

    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)
    Source code(tar.gz)
    Source code(zip)
    obspy-1.4.0-documentation.tgz(52.64 MB)
  • 1.3.1(Oct 14, 2022)

    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)
    Source code(tar.gz)
    Source code(zip)
    obspy-1.3.1-documentation.tgz(53.38 MB)
  • 1.3.0(Mar 10, 2022)

    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)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.2(Jun 29, 2020)

    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)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.1(Mar 11, 2020)

    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)
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Mar 6, 2020)

    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 #2520)
    • obspy.io.reftek:
      • Implement reading reftek encodings '16' and '32' (uncompressed data, 16/32bit integers, see #2058 and #2059)
    • obspy.io.rg16:
      • Implement module to read waveforms and headers from fcnt format (see #2265).
      • Fix reading when start+endtime are inside one data packet (see #2485).
    • obspy.io.sac:
      • Fix bug writing inventory with SOH channels to SACPZ (see #2200).
      • Blank-pad character header variables, as opposed to NUL-padding them, to comply with SAC behavior (see #2543).
    • obspy.io.segy:
      • Raise nicer error messages when header packing fails (see #2194, #2196).
      • Show nice error message when trying to write a trace with too many samples in it (see #2358, #1393)
    • obspy.io.seg2:
      • Handle data format code 3 trace data (#2022, #2385).
      • Improve parsing of free-form entries (#2385).
      • Fix non-native endian data loading (#2385).
    • obspy.io.seiscomp:
      • Adding support for SC3ML 0.10 (see #2024).
      • Update xsl to allow conversion of amplitude picks not associated with origins (see #2273).
      • Very large performance improvement reading large sc3ml inventory files by pre-indexing sensors, dataloggers and responses and reducing lxml calls (see #2296).
      • When reading StationXML/SC3ML, make sure to properly read empty string fields as empty strings instead of "None" (see #2519 and #2527)
    • obspy.io.sh:
      • Add read support for SeismicHandler EVT event files (see #2109)
    • obspy.io.shapefile:
      • Add possibility to add custom database columns when writing catalog or inventory objects to shapefile (see #2012 and #2305)
    • obspy.io.stationxml:
      • When reading StationXML/SC3ML, make sure to properly read empty string fields as empty strings instead of "None" (see #2519 and #2527)
      • 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
    • obspy.io.quakeml:
      • Allow writing invalid ids but raise a warning (see #2104, #2090, #2093, #1872).
      • Skip invalid enumeration values during reading but raise a warning. (see #2106, #2098, #2095)
      • Catalogs with empty event description objects can be round-tripped (see #2339, #2340).
      • Correctly handle QuakeML native namespaces (if they are not matching the document root's namespace) as custom namespaces and parse them into .extra (see #2466)
    • obspy.io.xseed:
      • Ability to parse SEED files with extra newlines between blockettes (see #2383)
    • obspy.signal.cross_correlation:
      • Add new correlate_template() function with 'full' normalization option, required for correlations in template-matching (see #2035 and #2042).
      • 'domain' parameter in correlate function is deprecated in favour of new 'method' parameter to be consistent with recent SciPy versions (see #2042).
      • Add correlate_stream_template() and correlation_detector() functions to detect events based on template matching (see #2315)
    • obspy.signal.PPSD:
      • Changed numpy-based serialization as to not require pickling (see #2424).
      • Fixed exact trace cutting for PSD segments (see #2040).
      • Timestamp representations internally and in npz I/O were changed to use integer nanosecond POSIX timestamps to avoid any potential floating point inaccuracies and since this is also what UTCDateTime is based on nowadays (see #2045).
      • Fixed the check for new PSD slices whether they should be added or whether they would add unwanted duplicated data (see #2229).
      • Fix period_lim option when xaxis_frequency=True (see #2246).
      • Added allow_pickle parameter to PPSD.add_npz and PPSD.load_npz and set its default to False (see #2457).
      • Added representation of earthquake models from Clinton & Heaton (2002) in 'plot()' method using option 'show_earthquakes' (see #2455).
    • obspy.signal.polarization:
      • Fix an issue with covariance matrix in vidale algorithm and make adaptive windowing opt-out (see #2565)
      • Fix an issue in selecting Z/N/E traces from given stream (see #2365)
    • obspy.signal.trigger:
      • Fix a bug in AR picker (see #2157)
      • Option to return Baer-Kradolfer characteristic function from pk_mbaer function added (see #2341)
    • obspy.taup:
      • Fix cycling through colors in ray path plots (see #2470, #2478)
      • Fix a floating point issue on IBM machines (see #2559, #2560)
    Source code(tar.gz)
    Source code(zip)
    obspy-1.2.0-documentation.tgz(73.73 MB)
    obspy-1.2.0.zip(23.53 MB)
  • 1.1.1(Feb 17, 2019)

    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).
    Source code(tar.gz)
    Source code(zip)
    obspy-1.1.1-documentation.tgz(71.63 MB)
    obspy-1.1.1.zip(22.79 MB)
  • 1.1.0(Oct 27, 2017)

    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:

    What's New in ObsPy 1.1

    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)
    
    Source code(tar.gz)
    Source code(zip)
    obspy-1.1.0-documentation.tgz(70.18 MB)
    ObsPy-1.1.0-py27_0-Linux-x86.sh(373.93 MB)
    ObsPy-1.1.0-py27_0-Linux-x86_64.sh(495.81 MB)
    ObsPy-1.1.0-py27_0-MacOSX-x86_64.sh(409.38 MB)
    ObsPy-1.1.0-py27_0-Windows-x86.exe(389.04 MB)
    ObsPy-1.1.0-py27_0-Windows-x86_64.exe(438.95 MB)
    ObsPy-1.1.0-py35_0-Linux-x86.sh(379.23 MB)
    ObsPy-1.1.0-py35_0-Windows-x86.exe(411.01 MB)
    ObsPy-1.1.0-py35_0-Windows-x86_64.exe(482.45 MB)
    ObsPy-1.1.0-py36_0-Linux-x86_64.sh(497.10 MB)
    ObsPy-1.1.0-py36_0-MacOSX-x86_64.sh(412.96 MB)
  • 1.0.3(Feb 28, 2017)

    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).
    
    Source code(tar.gz)
    Source code(zip)
    obspy-1.0.3-documentation.tgz(72.12 MB)
    ObsPy-1.0.3-py27_7-Linux-x86.sh(349.00 MB)
    ObsPy-1.0.3-py27_7-Linux-x86_64.sh(546.05 MB)
    ObsPy-1.0.3-py27_7-MacOSX-x86_64.sh(382.96 MB)
    ObsPy-1.0.3-py27_7-Windows-x86.exe(422.28 MB)
    ObsPy-1.0.3-py27_7-Windows-x86_64.exe(498.69 MB)
    ObsPy-1.0.3-py35_7-Linux-x86.sh(354.32 MB)
    ObsPy-1.0.3-py35_7-Linux-x86_64.sh(560.46 MB)
    ObsPy-1.0.3-py35_7-MacOSX-x86_64.sh(392.04 MB)
    ObsPy-1.0.3-py35_7-Windows-x86.exe(429.27 MB)
    ObsPy-1.0.3-py35_7-Windows-x86_64.exe(504.02 MB)
  • 1.0.2(Aug 3, 2016)

    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)
    
    Source code(tar.gz)
    Source code(zip)
    obspy-1.0.2-documentation.tgz(71.31 MB)
  • 1.0.1(Mar 24, 2016)

    This is the first bug fix release in the 1.0.x series.

    Full changelog:

    1.0.1: (doi: 10.5281/zenodo.48254)
     - General:
       * 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.
         (see #1302)
     - obspy.core:
       * 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.
         (see #1312)
       * remove_response(..., pre_file=None, plot=True) works again. (see #1320)
     - obspy.clients.arclink:
       * Restored ArcLink encryption support. (see #1352, #1347)
     - obspy.clients.fdsn:
       * 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.
         (see 2347a25714bc3e16068031f4b6138fafd627d34e)
     - obspy.io.sac:
       * 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.
         (see #1317)
       * Always set nvhdr, leven, lovrok, iftype to ensure valid SAC files.
         (see #1204)
     - obspy.io.xseed:
       * The Parser.get_paz() method now works with multiple blockette 53s.
         (see #1281)
     - obspy.taup
       * 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)
    
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Feb 19, 2016)

    This is a big release with significant internal changes, new features, stability improvements, and much more to prepare ObsPy for future challenges and get rid of accumulated technical debt. It is now stable enough to officially declare it version 1.0. Changes are broad and numerous - follow this link to learn more:

    Full Changelog

    1.0.0: 
     - General:
       * 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.
     - obspy.core:
       * New method for generating sliding windows from Stream/Trace windows.
         (see #860)
       * Stream/Trace.slice() now has the optional `nearest_sample` argument from
         Stream/Trace.trim().
       * Trace.remove_response() now has `plot` option to show/output a plot of all
         individual steps of instrument response removal in frequency domain
         (see #1116).
       * New method Stream/Trace.remove_sensitivity() to remove instrument
         sensitivity
       * 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)
     - obspy.clients.fdsn:
       * 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)
     - obspy.clients.filesystem.sds:
       * 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)
     - obspy.clients.neries:
       * Removed the dedicated client. Data can still be accessed by using the FDSN
         client.
     - obspy.clients.syngine:
       * New client for the IRIS Syngine service to retrieve custom synthetic
         seismograms.
     - obspy.imaging:
       * 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
     - obspy.io.kml:
       * New module for Google KML output of Inventory and Catalog objects
         (e.g. for use in Google Earth)
     - obspy.io.mseed:
       * Upgrade to libmseed 2.16
     - obspy.io.seiscomp.sc3ml:
       * New module reading SeisComP3 inventory files to ObsPy inventory objects
         (see #1182).
     - obspy.io.shapefile:
       * New module for ESRI shapefile write support (see #1066)
     - obspy.io.stationtxt:
       * New module reading the FDSN station files.
     - obspy.signal:
       * Switch to second-order sections for filters; backported from SciPy 0.16.0
         (see #1028)
       * 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
           of formats:
              * 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
                prior versions)
           Most old codes should still work, issuing a deprecation warning, but
           old code that specifies *both* `paz` and `parser` keywords will raise
           an exception.
         - 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
           (see #1130).
         - 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
           `PPSD.plot(..., cmap=...)`.
         - 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
           #916)
         - 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)
     - obspy.taup
       * 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).
    
    0.10.3: 
      - obspy.core:
        * Fix reading of multiple catalog files using globs (see #1065).
        * Fixed a bug when using
          `Trace.remove_response(..., water_level=None)`.
          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
          (see #1104).
        * 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
          (see #1096)
        * 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)
      - obspy.fdsn:
        * More detailed error messages on failing requests (see #1079)
        * Follows redirects for POST requests (see #1143)
      - obspy.imaging:
        * fix some bugs in `obspy-scan` (see #1138)
      - obspy.mseed:
        * 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
          (see #1102).
        * Updated to libmseed 2.17.
      - obspy.signal:
        * 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).
      - obspy.station:
        * 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
          StationXML.
        * fix saving `xcorrPickCorrection()` results to an image file (see #1154)
      - obspy.taup:
        * Calculating arrival times for surface waves now works (see #1055)
        * Calculating arrivals for underside reflections now works (see #1089)
      - obspy.y:
        * correct misspelled name of a Y specific header field (see #1127)
      - obspy.zmap
        * Add support for time values with sub-second precision (see #1093)
    
    Source code(tar.gz)
    Source code(zip)
    obspy-1.0.0-documentation.tgz(70.52 MB)
  • 0.10.2(May 27, 2015)

    This is a maintenance release containing several bug fixes:

    • obspy.core:
      • Fix catalog plot with events that have no origin depth or origin time (see #1021)
    • obspy.datamark:
      • Fix datawide=3 and datawide=0.5 block reading (see #1016)
    • obspy.earthworm:
      • Fix Python3 compatibility problem
    • obspy.imaging:
      • Fix flipped maps due to bug in Basemap
      • Fix handling of velocity reduction in section plots with degree offsets (see #1029)
      • Allow section plots over existing figures by not modifying existing lines
      • Don't prematurely close waveform figure if returning its handle
    • obspy.seedlink:
      • Fix Python3 compatibility for seedlink.easyseedlink
      • Basic seedlink client: Properly timeout requests with valid station selection but no data available in selected time window (see #1045)
    • obspy.signal:
      • Fix return data types/values of polarization routines (see #1026)
    • obspy.station:
      • Fix URL to FDSN StationXML schema in StationXML output (see #1023)
    Source code(tar.gz)
    Source code(zip)
    obspy-0.10.2-documentation.tgz(53.34 MB)
    obspy-0.10.2-documentation.zip(68.06 MB)
  • 0.10.1(Mar 20, 2015)

    After over 2200 commits from 25 contributors ObsPy 0.10.1 is finished and has been released.

    The key new features are support for Python 3, a slew of new file formats, and a new TauP implementation.

    What's New in ObsPy 0.10.1

    ObsPy 0.10.1 fixes some installation issues with ObsPy 0.10.0 thus ObsPy 0.10.0 is not a recommended release.

    Full changelog:

    • Highlights:
      • Python3 support
      • anaconda support
      • New formats: AH, CNV, Kinemetrics EVT, NDK, NLLOC, PDAS, ZMAP
      • ObsPy licensed under LGPL v3.0 now as a whole.
    • General:
      • Support for Python 3.3 and 3.4 in addition to 2.6 and 2.7
      • ObsPy licensed under LGPL v3.0 now as a whole.
      • More generic processing history for most Stream and Trace methods.
      • Now requires NumPy >= 1.4.0
      • Now requires SciPy >= 0.7.2
      • Tested compatibility with most major Linux distributions still receiving updates.
      • The next major obspy release (0.11) will drop support for:
        • Python < 2.7
        • matplotlib < 1.1
        • numpy < 1.6
        • scipy < 0.10
    • obspy.ah
      • New submodule for reading the AH (Ad Hoc) waveform format
    • obspy.arclink:
      • add support for Poles and Zeros type "B" (Analog, Hz), see #899
    • obspy.core:
      • Preview waveform plot improved: interactive updating of ticks and ticklabels, correct ticklabels for sub-minute zoom level (#657)
      • fixed a problem with UTCDateTime with timestamps of far future dates (larger than 2038, often seen in StationXML end dates, see #805)
      • Support for basic custom namespace tags in QuakeML I/O (see #454)
      • interpolate() method for Stream/Trace objects.
      • Dictionary values added to an AttribDict will now be converted to an AttribDict.
      • Removed custom OrderedDict backport for Python 2.6. Now relies on the one provided by the future package.
      • Renamed 'type' argument to 'method' in the Trace.differentiate() method.
      • Renamed 'type' argument to 'method' in the Trace.integrate() method. Additionally, several broken alternate methods have been removed.
      • new plugins for NonLinLoc formats for readEvents() and Catalog/Event.write() (see obspy.nlloc and #900)
      • The wrap_long_string utility function is deprecated. Users may use the textwrap module which provides similar functionality.
      • new plugin for CNV event format (used by VELEST) for Catalog/Event.write() (see obspy.cnv and #905)
      • better customizable control during merging traces with sub-sample shift of sampling points (see #980)
    • obspy.cnv:
      • new plugin to write CNV event files (used by VELEST) from Catalog/Event objects. (see #905)
    • obspy.css:
      • Support for little-endian binary and ASCII files (see #881).
      • Support exporting Inventory objects to CSS relations.
    • obspy.fdsn:
      • WADL files are cached per Python process.
      • Bulk station downloading using POST requests.
      • Support for FDSNWS 1.1, e.g. the matchtimeseries parameter for the station service.
    • obspy.imaging:
      • Maintain beach ball aspect ratio through optional axes argument (see #734)
      • Refactored Catalog.plot() into helper routine obspy.imaging.maps.plot_basemap() (see #753).
      • The projections of Catalog.plot() have been modified slightly to provide equal-area projections:
        • The "cyl" projection is now named "global". It is now the Mollweide projection.
        • The '"local"` projection now uses the Albers Equal Area projection.
    • obspy.kinemetrics
      • New submodule for reading the Kinemetrics EVT waveform format
    • obspy.mseed:
      • Support for reading and writing all encodings supported by libmseed.
      • proper error reporting while reading
      • details=True when reading will now write to Trace.stats.mseed.blkt1001.timing_quality instead of Trace.stats.mseed.timing_quality.
      • The timing quality will now also be written to a file if it is set.
      • Non-existing values when reading with details=True will now be set to False instead of -1.
      • New utility function obspy.mseed.util.set_flags_in_fixed_header() giving the ability to overwrite flags in the fixed header of existing MiniSEED files.
      • The sequence number of the first record of each Trace can now be specified when writing MiniSEED files.
      • obspy-mseed-recordanalyzer:
        • Bugfix: when specifying an out-of-bounds record number, information about the last record in the file was displayed (see #957). Now a proper error message is shown and the command line script exits with non-zero exit code.
        • Faster reading of a single record header
        • Added option "-a" to print information of all records
      • upgrade to libmseed 2.15
    • obspy.ndk:
      • New submodule able to read NDK files from the Global CMT project.
    • obspy.neries:
      • The whole module is deprecated and will be removed with the next major release. To access EMSC event data please use the obspy.fdsn client (use Client(base_url='NERIES', ...)), for access to ORFEUS waveform data please use the obspy.fdsn client (use Client(base_url='ORFEUS', ...)) and for travel times please use obspy.taup.
    • obspy.nlloc:
      • new plugins to write NonLinLoc Phase observations files from Catalog/Event objects and to read NonLinLoc Hypocenter-Phase file into Catalog/Event objects. (see #900)
    • obspy.pdas:
      • read support for PDAS waveform files
    • obspy.sac:
      • New byteorder option for writing sac files to disk.
      • Can now read/write from/to file-like objects like io.BytesIO and open files.
    • obspy.seedlink:
      • bugfix: INFO responses from the IRIS ringserver are now parsed correctly (see #807)
      • New submodule easyseedlink providing an easier way to create SeedLink clients
      • New Client class providing a basic seedlink client for individual requests of finite time windows (i.e. non-continuous programs)
      • Fix memory leak in SLClient (MiniSEED record leak in packet parser, see #918)
    • obspy.seisan:
      • bugfix the actual data were misaligned by one
    • obspy.seishub:
      • use specified timeout in all requests to server (see #786)
      • Helper method Client.event.getEvents() to fetch a Catalog object from a seishub server of version 1.4.0 or higher.
    • obspy.signal:
      • Increased performance of PPSD plotting.
      • Interpolating methods. Wrappers around routines from scipy and a custom weighted average slopes method from Wiggins 1976.
      • PPSD has new methods to extract mean and mode of the histogram by frequency (see #804)
      • PPSD: water level in instrument correction can now be specified by user on PPSD initialization
      • New polarization analysis methods: flinn, vidale, pm
    • obspy.station:
      • add plotting methods (response/bode, location maps) to Inventory/Station/Channel/Response objects (see #750)
      • add get_coordinates method to inventory and network objects (see #740)
      • read/write support for DataAvailability tags in StationXML files.
      • write support for SACPZ ASCII representation of channel responses.
    • obspy.taup:
      • Replaced Fortran implementation with much more powerful Python port of Java TauP. This enabled us to drop all Fortran code, which simplifies releases and builds tremendously.
    • obspy.xseed:
      • add support for Poles and Zeros type "B" (Analog, Hz), see #899
    • obspy.zmap:
      • New module which adds ZMAP read/write support
    • scripts:
      • All scripts now require argparse instead of optparse.
      • All scripts now accept -V or --version to print version information.
      • obspy-dataless2xseed: -v and --version options are renamed to -x and --xml-version to not conflict with above option.
      • obspy-indexer: Options have been modified or amended slightly:
        • --data is a new alias to -d.
        • --db-uri is a new alias to -u.
        • --log is a new alias to -l.
        • --poll-interval is a new alias to -i.
        • --recent is a new alias to -r.
        • -a is a new alias to --all-files.
        • -f is a new alias to --force-reindex.
        • -H is a new alias to --host.
        • -p is a new alias to --port.
        • --check_duplicates is renamed to --check-duplicates.
        • --drop_database is renamed to --drop-database.
        • --mapping_file is renamed to --mapping-file.
        • --run_once is renamed to --run-once.
      • obspy-mopad: Options have been modified or amended slightly:
        • convert subcommand:
          • No changes.
        • decompose subcommand:
          • --input_system is renamed to --input-system.
        • --output_system is renamed to --output-system.
        • gmt subcommand:
          • --show_1fp is renamed to --show-1fp.
        • --show_isotropic_part is renamed to --show-isotropic-part.
        • plot subcommand:
          • --basis_vectors is renamed to --basis-vectors.
        • --full_sphere is renamed to --full-sphere.
        • --input_system is renamed to --input-system.
        • --lines_only is renamed to --lines-only.
        • --output_file is renamed to --output-file.
        • --pa_system is renamed to --pa-system.
        • --pressure_colour is renamed to --pressure-colour.
        • --show1fp is renamed to --show-1fp.
        • --show_isotropic_part is renamed to --show-isotropic-part.
        • --tension_colour is renamed to --tension-colour.
      • obspy-plot: --format option is accepted as an alias of -f.
      • obspy-print: Options have been modified or amended slightly:
        • --format is a new alias of -f.
        • --nomerge is renamed to --no-merge.
      • obspy-runtests: -a option is accepted as an alias of --all.
      • obspy-scan: Options have been modified or amended slightly:
        • --endtime is renamed to --end-time.
        • --event-times is renamed to --event-time. --event-time may be specified multiple times.
        • --ids is renamed to --id. --id may be specified multiple times.
        • --nox is renamed to --no-x.
        • --nogaps is renamed to --no-gaps.
        • --starttime is renamed to --start-time.
    Source code(tar.gz)
    Source code(zip)
    obspy-0.10.1-documentation.tgz(53.39 MB)
  • 0.10.0(Mar 19, 2015)

    After over 2200 commits from 25 contributors ObsPy 0.10.0 is finished and has been released.

    The key new features are support for Python 3, a slew of new file formats, and a new TauP implementation.

    Migration Guide from older ObsPy Versions

    Full changelog:

    • Highlights:
      • Python3 support
      • anaconda support
      • New formats: AH, CNV, Kinemetrics EVT, NDK, NLLOC, PDAS, ZMAP
      • ObsPy licensed under LGPL v3.0 now as a whole.
    • General:
      • Support for Python 3.3 and 3.4 in addition to 2.6 and 2.7
      • ObsPy licensed under LGPL v3.0 now as a whole.
      • More generic processing history for most Stream and Trace methods.
      • Now requires NumPy >= 1.4.0
      • Now requires SciPy >= 0.7.2
      • Tested compatibility with most major Linux distributions still receiving updates.
      • The next major obspy release (0.11) will drop support for:
        • Python < 2.7
        • matplotlib < 1.1
        • numpy < 1.6
        • scipy < 0.10
    • obspy.ah
      • New submodule for reading the AH (Ad Hoc) waveform format
    • obspy.arclink:
      • add support for Poles and Zeros type "B" (Analog, Hz), see #899
    • obspy.core:
      • Preview waveform plot improved: interactive updating of ticks and ticklabels, correct ticklabels for sub-minute zoom level (#657)
      • fixed a problem with UTCDateTime with timestamps of far future dates (larger than 2038, often seen in StationXML end dates, see #805)
      • Support for basic custom namespace tags in QuakeML I/O (see #454)
      • interpolate() method for Stream/Trace objects.
      • Dictionary values added to an AttribDict will now be converted to an AttribDict.
      • Removed custom OrderedDict backport for Python 2.6. Now relies on the one provided by the future package.
      • Renamed 'type' argument to 'method' in the Trace.differentiate() method.
      • Renamed 'type' argument to 'method' in the Trace.integrate() method. Additionally, several broken alternate methods have been removed.
      • new plugins for NonLinLoc formats for readEvents() and Catalog/Event.write() (see obspy.nlloc and #900)
      • The wrap_long_string utility function is deprecated. Users may use the textwrap module which provides similar functionality.
      • new plugin for CNV event format (used by VELEST) for Catalog/Event.write() (see obspy.cnv and #905)
      • better customizable control during merging traces with sub-sample shift of sampling points (see #980)
    • obspy.cnv:
      • new plugin to write CNV event files (used by VELEST) from Catalog/Event objects. (see #905)
    • obspy.css:
      • Support for little-endian binary and ASCII files (see #881).
      • Support exporting Inventory objects to CSS relations.
    • obspy.fdsn:
      • WADL files are cached per Python process.
      • Bulk station downloading using POST requests.
      • Support for FDSNWS 1.1, e.g. the matchtimeseries parameter for the station service.
    • obspy.imaging:
      • Maintain beach ball aspect ratio through optional axes argument (see #734)
      • Refactored Catalog.plot() into helper routine obspy.imaging.maps.plot_basemap() (see #753).
      • The projections of Catalog.plot() have been modified slightly to provide equal-area projections:
        • The "cyl" projection is now named "global". It is now the Mollweide projection.
        • The '"local"` projection now uses the Albers Equal Area projection.
    • obspy.kinemetrics
      • New submodule for reading the Kinemetrics EVT waveform format
    • obspy.mseed:
      • Support for reading and writing all encodings supported by libmseed.
      • proper error reporting while reading
      • details=True when reading will now write to Trace.stats.mseed.blkt1001.timing_quality instead of Trace.stats.mseed.timing_quality.
      • The timing quality will now also be written to a file if it is set.
      • Non-existing values when reading with details=True will now be set to False instead of -1.
      • New utility function obspy.mseed.util.set_flags_in_fixed_header() giving the ability to overwrite flags in the fixed header of existing MiniSEED files.
      • The sequence number of the first record of each Trace can now be specified when writing MiniSEED files.
      • obspy-mseed-recordanalyzer:
        • Bugfix: when specifying an out-of-bounds record number, information about the last record in the file was displayed (see #957). Now a proper error message is shown and the command line script exits with non-zero exit code.
        • Faster reading of a single record header
        • Added option "-a" to print information of all records
      • upgrade to libmseed 2.15
    • obspy.ndk:
      • New submodule able to read NDK files from the Global CMT project.
    • obspy.neries:
      • The whole module is deprecated and will be removed with the next major release. To access EMSC event data please use the obspy.fdsn client (use Client(base_url='NERIES', ...)), for access to ORFEUS waveform data please use the obspy.fdsn client (use Client(base_url='ORFEUS', ...)) and for travel times please use obspy.taup.
    • obspy.nlloc:
      • new plugins to write NonLinLoc Phase observations files from Catalog/Event objects and to read NonLinLoc Hypocenter-Phase file into Catalog/Event objects. (see #900)
    • obspy.pdas:
      • read support for PDAS waveform files
    • obspy.sac:
      • New byteorder option for writing sac files to disk.
      • Can now read/write from/to file-like objects like io.BytesIO and open files.
    • obspy.seedlink:
      • bugfix: INFO responses from the IRIS ringserver are now parsed correctly (see #807)
      • New submodule easyseedlink providing an easier way to create SeedLink clients
      • New Client class providing a basic seedlink client for individual requests of finite time windows (i.e. non-continuous programs)
      • Fix memory leak in SLClient (MiniSEED record leak in packet parser, see #918)
    • obspy.seisan:
      • bugfix the actual data were misaligned by one
    • obspy.seishub:
      • use specified timeout in all requests to server (see #786)
      • Helper method Client.event.getEvents() to fetch a Catalog object from a seishub server of version 1.4.0 or higher.
    • obspy.signal:
      • Increased performance of PPSD plotting.
      • Interpolating methods. Wrappers around routines from scipy and a custom weighted average slopes method from Wiggins 1976.
      • PPSD has new methods to extract mean and mode of the histogram by frequency (see #804)
      • PPSD: water level in instrument correction can now be specified by user on PPSD initialization
      • New polarization analysis methods: flinn, vidale, pm
    • obspy.station:
      • add plotting methods (response/bode, location maps) to Inventory/Station/Channel/Response objects (see #750)
      • add get_coordinates method to inventory and network objects (see #740)
      • read/write support for DataAvailability tags in StationXML files.
      • write support for SACPZ ASCII representation of channel responses.
    • obspy.taup:
      • Replaced Fortran implementation with much more powerful Python port of Java TauP. This enabled us to drop all Fortran code, which simplifies releases and builds tremendously.
    • obspy.xseed:
      • add support for Poles and Zeros type "B" (Analog, Hz), see #899
    • obspy.zmap:
      • New module which adds ZMAP read/write support
    • scripts:
      • All scripts now require argparse instead of optparse.
      • All scripts now accept -V or --version to print version information.
      • obspy-dataless2xseed: -v and --version options are renamed to -x and --xml-version to not conflict with above option.
      • obspy-indexer: Options have been modified or amended slightly:
        • --data is a new alias to -d.
        • --db-uri is a new alias to -u.
        • --log is a new alias to -l.
        • --poll-interval is a new alias to -i.
        • --recent is a new alias to -r.
        • -a is a new alias to --all-files.
        • -f is a new alias to --force-reindex.
        • -H is a new alias to --host.
        • -p is a new alias to --port.
        • --check_duplicates is renamed to --check-duplicates.
        • --drop_database is renamed to --drop-database.
        • --mapping_file is renamed to --mapping-file.
        • --run_once is renamed to --run-once.
      • obspy-mopad: Options have been modified or amended slightly:
        • convert subcommand:
          • No changes.
        • decompose subcommand:
          • --input_system is renamed to --input-system.
        • --output_system is renamed to --output-system.
        • gmt subcommand:
          • --show_1fp is renamed to --show-1fp.
        • --show_isotropic_part is renamed to --show-isotropic-part.
        • plot subcommand:
          • --basis_vectors is renamed to --basis-vectors.
        • --full_sphere is renamed to --full-sphere.
        • --input_system is renamed to --input-system.
        • --lines_only is renamed to --lines-only.
        • --output_file is renamed to --output-file.
        • --pa_system is renamed to --pa-system.
        • --pressure_colour is renamed to --pressure-colour.
        • --show1fp is renamed to --show-1fp.
        • --show_isotropic_part is renamed to --show-isotropic-part.
        • --tension_colour is renamed to --tension-colour.
      • obspy-plot: --format option is accepted as an alias of -f.
      • obspy-print: Options have been modified or amended slightly:
        • --format is a new alias of -f.
        • --nomerge is renamed to --no-merge.
      • obspy-runtests: -a option is accepted as an alias of --all.
      • obspy-scan: Options have been modified or amended slightly:
        • --endtime is renamed to --end-time.
        • --event-times is renamed to --event-time. --event-time may be specified multiple times.
        • --ids is renamed to --id. --id may be specified multiple times.
        • --nox is renamed to --no-x.
        • --nogaps is renamed to --no-gaps.
        • --starttime is renamed to --start-time.
    Source code(tar.gz)
    Source code(zip)
    obspy-0.10.0-documentation.tgz(53.50 MB)
  • 0.9.2(Apr 30, 2014)

    This is a maintenance release and contains the collective bug fixes and minor feature improvements of around 150 commits so we advise all users to upgrade.

    Changelog:

    • general:
      • fix installation on CygWin (see #755)
    • obspy.core:
      • bugfix: Input/Output to/from QuakeML was missing Amplitude elements (see #763)
      • fixing very slow response removal for some magic bad values of npts (see #715)
      • extend remove_response for polynomial responses (thanks to Sebastien/bonaime, see #566)
    • obspy.datamark:
      • bugfix: channel code now correctly read (4 hex char)
      • bugfix: channels can have different sampling rate
      • improvement: datawide 0.5 (4 bits) encoding now supported
      • century of data can now be specified
    • obspy.fdsn:
      • time out errors get raised properly now. timeout can be specified at Client initialization now. (see #717)
      • for advanced users: endpoints of any particular service can now be specified explicitly (see #754)
      • new known FDSN providers: 'ORFEUS', 'GFZ', 'NERIES'
      • more robust WADL parser
      • the attach_response=True argument now uses a faster approach to download the station data
    • obspy.imaging:
      • Fixing waveform plotting.
    • obspy.sac:
      • SAC files with two digit year header field are now interpreted as "19xx", same as done by SAC (see #779)
    • obspy.seedlink:
      • bugfix: different instances of a SeedLink connection had a shared state (see #561)
      • multiple smaller bugfixes (see #777)
      • trailing null characters are now stripped from INFO responses (see #778)
    • obspy.seg2:
      • numbers are now also recognized as months
      • now filters non-printable chars from the header enabling it to read some more files
    • obspy.signal:
      • the TF misfits now correctly use logarithmic axes instead of scaling an image
    • obspy.station:
      • some bugfixes in the obspy.station object classes (see #710)
      • more robust writing of StationXML in case of missing elements
    • obspy.taup:
      • bugfix: avoid a bug that caused multiple calls to taup to result in spurious unexpected results (see #728)
    Source code(tar.gz)
    Source code(zip)
    obspy-0.9.2-documentation.tgz(118.04 MB)
    obspy-0.9.2.docset.tgz(118.17 MB)
  • 0.9.0(Jan 9, 2014)

    This release contains 1423 commits from 20 contributors. Thanks a bunch to everyone!

    The new key features are full support for the FDSN web services (waveform, event, and station data) and the FDSN StationXML format including the calculation of instrument responses directly from StationXML files. Other notable changes are the support for the Nanometrics Y file format, the CSS (Center for Seismic Studies) waveform data format, the NEIC PDE bulletin event catalog files, a new client to access data from the NEIC CWB QueryServer, and numerous smaller enhancements and bug fixes.

    Migration Guide from older ObsPy Versions

    Full Changelog:

    • general:
      • Added mock testing library.
    • obspy.arclink:
      • user keyword is now required during client initialization
    • obspy.core:
      • Stream/Trace.attach_response(): convenience method to attach response to traces from inventories.
      • new method Stream/Trace.remove_response() to remove instrument response from Response object attached to trace(s), e.g. after parsing a StationXML file. Similar to Stream/Trace.simulate(seedresp=...) for using a Parser object (from dataless or xseed) or RESP file, but less cluttered parameters and without the simulating a different instrument part.
      • Updated event classes to QuakeML 1.2 final.
      • Moved obspy.core.event.validate() to obspy.core.quakeml.validate()
      • The writeQuakeML() function, also accessible through Catalog.write(..., format="quakeml"), now has an optional keyword argument 'validate'. If True, the resulting QuakeML file will be validated against the QuakeML schema before being written. An AssertionError will be raised in case the validation fails.
      • validation of QuakeML against official schema working now
      • renamed obspy.core.util.types into obspy.core.util.obspy_types (#595)
      • new parameter replace for Enums which allows definition of replaceable keywords (fixes #531)
      • Trace.split() will return a stream object containing traces with unmasked arrays
      • trim(pad=True, fill_value=xxx) will return a NumPy ndarray as stated in the API documentation (#540)
      • read() supports now tar und zip archives and variants (tar.gz, tar.bz2)
      • new options for Stream/Trace.taper() to control the length of the tapering for all windowing functions and perform one-sided tapering
      • Many Stream and Trace methods are now chainable, e.g. st.taper().plot()
      • when using Stream/Trace.simulate(seedresp={...})) parameter "date" can now be omitted, start time of each trace is used for response lookup then
      • when using Stream/Trace.simulate(seedresp={...})) for parameter "filename" instead of the path to a local file now also can be provided either a file-like object with RESP information or an obspy.xseed.Parser object (e.g. created reading a dataless SEED file).
      • fix Stream.select() when using values like "" or 0, e.g. Stream.select(location="") or when filtering by component with a channel code less than 3 characters long (now these traces will be omitted from the result when filtering by component).
      • fix a bug when merging valid data into a masked trace (see #638)
      • event.ResourceIdentifier objects are now initialized with a QuakeML conform string by default, i.e. if no custom prefix is provided during initialization.
      • event.ResourceIdentifier.resource_id attribute was renamed to event.ResourceIdentifier.id
      • event.ResourceIdentifier now was has a method regenerate_uuid() that allows the random hash part to be regenerated for resource identifiers with no fixed id string (can be useful to generate a new hash if the referred object changes).
      • added a new test that asserts that the whole codebase is valid according to the flake8 tool.
      • inverse filtering of catalogs.
      • bugfix: Trace.simulate() now passes the SEED network, station, location, and channel identifiers to evalresp.
      • added command line script "obspy-print" to print information on local waveform files
      • check if ndim == 1 when setting Trace.data and raise if necessary, see #695
      • change waveform_id parameter in obspy.core.event.FocalMechanism to list of WaveformStreamID as specified in QuakeML docs (#633)
    • obspy.css:
      • new module for CSS (Center for Seismic Studies) format
      • currently read support for waveform data
    • obspy.db:
      • obspy-indexer script uses from now on hash symbols (#) instead of pipe (|) for features because pipe has a special meaning on most operating systems
    • obspy.fdsn:
      • new client module to access servers based on the FDSN web service definition (http://www.fdsn.org/webservices/)
    • obspy.gse2:
      • read/write STA2 header line which is officialy mandatory but in pratice often not used
    • obspy.imaging:
      • more options to customize day plots
      • dayplot now plots matching picks (station, network, location) if a list of event objects is provided using the events kwarg.
      • obspy-scan: new option --print-gaps
      • added plotting of record sections
      • automatic merging can be disabled for obspy-plot
    • obspy.pde:
      • new module for reading NEIC PDE bulletin files into an obspy catalog object. Only the "mchedr" format (file format revision of February 24,
        1. is supported.
    • obspy.realtime:
      • two new processing plugins (offset, kurtosis)
    • obspy.seg2:
      • adding read support for SEG2 data format code 1 and 2 (signed 16bit/32bit integer)
    • obspy.segy:
      • fix a bug in plotting (see #689)
    • obspy.signal:
      • adding cross correlation single-station similarity checking with master event templates to coincidence trigger
      • add PPSD support for segments of arbitrary length
      • default bin width of PPSD is changed to 1dB. This is the value used by McNamara and Buland 2004.
      • fix a bug when using evalresp with RESP files with very short epochs. see #631.
      • for seisSim(seedresp={...})) for parameter "filename" instead of the path to a local file now also can be provided either a file-like object with RESP information or an obspy.xseed.Parser object (e.g. created reading a dataless SEED file).
      • seisSim(seedresp={...}): the seedresp dictionary now requires network, station, location, and channel keys.
      • removed deprecated psd module - use spectral_estimation module instead
      • removed deprecated sonic function - use array_processing function instead
      • corrected function signature of c_sac_taper
    • obspy.station:
      • adding support for FDSN StationXML
    • obspy.mseed:
      • new kwarg arguments for reading mseed files: header_byteorder and verbose
      • libmseed v2.12
    • obspy.neic:
      • new module to access data from CWB QueryServer run at the National Earthquake Information Center (NEIC) in Golden, CO USA.
    • obspy.y:
      • adding read support for Nanometrics Y file format
    • scripts:
      • obspy-plot: new option "-o" to output plot to file instead of opening a window
    Source code(tar.gz)
    Source code(zip)
    obspy-0.9.0-documentation.tgz(48.20 MB)
  • 0.9.0rc1(Dec 9, 2013)

    • general:
    • Added mock testing library.
    • obspy.arclink:
      • user keyword is now required during client initialization
    • obspy.core:
      • Updated event classes to QuakeML 1.2 final.
      • Moved obspy.core.event.validate() to obspy.core.quakeml.validate()
      • The writeQuakeML() function, also accessible through Catalog.write(..., format="quakeml"), now has an optional keyword argument 'validate'. If True, the resulting QuakeML file will be validated against the QuakeML schema before being written. An AssertionError will be raised in case the validation fails.
      • validation of QuakeML against official schema working now
      • renamed obspy.core.util.types into obspy.core.util.obspy_types (#595)
      • new parameter replace for Enums which allows definition of replaceable keywords (fixes #531)
      • Trace.split() will return a stream object containing traces with unmasked arrays
      • trim(pad=True, fill_value=xxx) will return a NumPy ndarray as stated in the API documentation (#540)
      • read() supports now tar und zip archives and variants (tar.gz, tar.bz2)
      • new options for Stream/Trace.taper() to control the length of the tapering for all windowing functions and perform one-sided tapering
      • Many Stream and Trace methods are now chainable, e.g. st.taper().plot()
      • when using Stream/Trace.simulate(seedresp={...})) parameter "date" can now be omitted, start time of each trace is used for response lookup then
      • when using Stream/Trace.simulate(seedresp={...})) for parameter "filename" instead of the path to a local file now also can be provided either a file-like object with RESP information or an obspy.xseed.Parser object (e.g. created reading a dataless SEED file).
      • fix Stream.select() when using values like "" or 0, e.g. Stream.select(location="") or when filtering by component with a channel code less than 3 characters long (now these traces will be omitted from the result when filtering by component).
      • fix a bug when merging valid data into a masked trace (see #638)
      • event.ResourceIdentifier objects are now initialized with a QuakeML conform string by default, i.e. if no custom prefix is provided during initialization.
      • event.ResourceIdentifier.resource_id attribute was renamed to event.ResourceIdentifier.id
      • event.ResourceIdentifier now was has a method regenerate_uuid() that allows the random hash part to be regenerated for resource identifiers with no fixed id string (can be useful to generate a new hash if the referred object changes).
      • added a new test that asserts that the whole codebase is valid according to the flake8 tool.
      • inverse filtering of catalogs.
      • bugfix: Trace.simulate() now passes the SEED network, station, location, and channel identifiers to evalresp.
      • Stream/Trace.attach_response(): convenience method to attach response to traces from inventories.
      • added command line script "obspy-print" to print information on local waveform files
    • obspy.css:
      • new module for CSS (Center for Seismic Studies) format
      • currently read support for waveform data
    • obspy.db:
      • obspy-indexer script uses from now on hash symbols (#) instead of pipe (|) for features because pipe has a special meaning on most operating systems
    • obspy.fdsn:
      • new client module to access servers based on the FDSN web service definition (http://www.fdsn.org/webservices/)
    • obspy.gse2:
      • read/write STA2 header line which is officialy mandatory but in pratice often not used
    • obspy.imaging:
      • more options to customize day plots
      • dayplot now plots matching picks (station, network, location) if a list of event objects is provided using the events kwarg.
      • obspy-scan: new option --print-gaps
      • added plotting of record sections
      • automatic merging can be disabled for obspy-plot
    • obspy.pde:
      • new module for reading NEIC PDE bulletin files into an obspy catalog object. Only the "mchedr" format (file format revision of February 24,
        1. is supported.
    • obspy.realtime:
      • two new processing plugins (offset, kurtosis)
    • obspy.seg2:
      • adding read support for SEG2 data format code 1 and 2 (signed 16bit/32bit integer)
    • obspy.segy:
      • fix a bug in plotting (see #689)
    • obspy.signal:
      • adding cross correlation single-station similarity checking with master event templates to coincidence trigger
      • add PPSD support for segments of arbitrary length
      • default bin width of PPSD is changed to 1dB. This is the value used by McNamara and Buland 2004.
      • fix a bug when using evalresp with RESP files with very short epochs. see #631.
      • for seisSim(seedresp={...})) for parameter "filename" instead of the path to a local file now also can be provided either a file-like object with RESP information or an obspy.xseed.Parser object (e.g. created reading a dataless SEED file).
      • seisSim(seedresp={...}): the seedresp dictionary now requires network, station, location, and channel keys.
      • removed deprecated psd module - use spectral_estimation module instead
      • removed deprecated sonic function - use array_processing function instead
    • obspy.station:
      • adding support for FDSN StationXML
    • obspy.mseed:
      • new kwarg arguments for reading mseed files: header_byteorder and verbose
    • obspy.neic:
      • new module to access data from CWB QueryServer run at the National Earthquake Information Center (NEIC) in Golden, CO USA.
    • obspy.y:
      • adding read support for Nanometrics Y file format
    • scripts:
      • obspy-plot: new option "-o" to output plot to file instead of opening a window
    Source code(tar.gz)
    Source code(zip)
  • 0.8.4(Jul 3, 2013)

  • 0.8.3(Jul 3, 2013)

  • 0.8.2(Jul 3, 2013)

  • 0.8.1(Jul 3, 2013)

  • 0.8.0(Jul 3, 2013)

    • general:
      • version numbering: one single, common version number for ObsPy now. Use "import obspy; print obspy.version"
      • discontinuing Python 2.5 support
      • most important classes/functions can be imported like "from obspy import ...", currently: read, Trace, Stream, UTCDateTime and readEvents
    • obspy.arclink:
      • refactored attributes in getPAZ to stick better with the SEED standard
    • obspy.core:
      • fixing preview generation for sampling rates containing floats
      • fixing deprecated_keywords decorator for the case of removed keywords
      • fixing SLIST and TSPAIR reading/writing of empty traces or traces containing only one or two data points
      • adding taper() method to Trace/Stream using cosTaper of ObsPy and also all scipy windowing functions
      • adding cutout() method to Stream
      • removed all deprecated UTCDateTime methods
      • adding a class and script to determine flinn-engdahl regions for given longitude and latitude
      • adding rotate() method to Stream wrapping rotate functions in obspy.signal
    • obspy.imaging:
      • obspy-scan: adding options to control start/endtime and channels, adding options to not plot gaps and reducing file size for plots considerably.
    • obspy.iris:
      • output format 'bulk' for Client.availability has been deprecated, use 'bulkdataselect' instead (#419)
    • obspy.mseed:
      • Bugfix writing traces containing one or two samples only
      • writeMSEED emits an UserWarning while writing an empty trace
    • obspy.sac:
      • fixing SAC and SACXY reading/writing of empty traces or traces containing only one or two data points
      • new debug_headers flag for reading SAC files in order to extract all header variables (issue #390)
    • obspy.segy:
      • unpack SEGYTrace.data on-the-fly patch contributed Nathaniel Miller
      • fixing a bug related to negative values in trace header
    • obspy.seishub:
      • adding kwarg to control number of retries for failing requests
      • adding obspy.xseed as dependency (in setup.py and debian/control)
      • changing obspy.client.station.getPAZ() call syntax to use seed_id (args/kwargs)
      • adding local caching of requests for PAZ and coordinates to avoid repeated requests to server
    • obspy.sh:
      • file extension 'QBN' not added twice anymore if data_directory was set
      • fixing SH_ASC and Q reading/writing of empty traces or traces containing only one or two data points
    • obspy.signal:
      • module psd has been refactored to spectral_estimation
      • adding function for cross correlation pick correction
      • removing pitsa-compatibility in response function calculation (no complex conjugate)
      • preventing a possible duplicated overall sensitivity removal in seisSim when using the option seedresp
      • adding optimized C-code for classic STALTA. Runs approximately, 1000x faster than pure python code. It has now the same order of speed as the recursive STALTA
      • new CAPON method for array_analysis / array_processing
      • sonic was renamed to array_processing, sonic is now deprecated
    • obspy.xseed:
      • fixed a bug with Dataless to XSEED conversion using split_stations=True
      • fixed a bug affecting getPAZ() and getCoordinates() when selecting specific channels from complex dataless files (see: https://github.com/obspy/obspy/issues/412)
      • added getInventory() method to the Parser object. Returns a dictionary about the contents of the Parser object. This is also integrated in the string representation and makes it more informative.
    • obspy.mseed:
      • adding experimental details option, which extracts timing quality and info on the calibration
    Source code(tar.gz)
    Source code(zip)
Denoising Diffusion Implicit Models

Denoising Diffusion Implicit Models (DDIM) Jiaming Song, Chenlin Meng and Stefano Ermon, Stanford Implements sampling from an implicit model that is t

465 Jan 05, 2023
Heart Arrhythmia Classification

This program takes and input of an ECG in European Data Format (EDF) and outputs the classification for heartbeats into normal vs different types of arrhythmia . It uses a deep learning model for cla

4 Nov 02, 2022
Unofficial pytorch implementation of 'Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization'

pytorch-AdaIN This is an unofficial pytorch implementation of a paper, Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization [Hua

Naoto Inoue 873 Jan 06, 2023
CondNet: Conditional Classifier for Scene Segmentation

CondNet: Conditional Classifier for Scene Segmentation Introduction The fully convolutional network (FCN) has achieved tremendous success in dense vis

ycszen 31 Jul 22, 2022
PURE: End-to-End Relation Extraction

PURE: End-to-End Relation Extraction This repository contains (PyTorch) code and pre-trained models for PURE (the Princeton University Relation Extrac

Princeton Natural Language Processing 657 Jan 09, 2023
scAR (single-cell Ambient Remover) is a package for data denoising in single-cell omics.

scAR scAR (single cell Ambient Remover) is a package for denoising multiple single cell omics data. It can be used for multiple tasks, such as, sgRNA

19 Nov 28, 2022
Tensorflow implementation for "Improved Transformer for High-Resolution GANs" (NeurIPS 2021).

HiT-GAN Official TensorFlow Implementation HiT-GAN presents a Transformer-based generator that is trained based on Generative Adversarial Networks (GA

Google Research 78 Oct 31, 2022
[CVPR 2021] VirTex: Learning Visual Representations from Textual Annotations

VirTex: Learning Visual Representations from Textual Annotations Karan Desai and Justin Johnson University of Michigan CVPR 2021 arxiv.org/abs/2006.06

Karan Desai 533 Dec 24, 2022
Code for "The Box Size Confidence Bias Harms Your Object Detector"

The Box Size Confidence Bias Harms Your Object Detector - Code Disclaimer: This repository is for research purposes only. It is designed to maintain r

Johannes G. 24 Dec 07, 2022
Train Scene Graph Generation for Visual Genome and GQA in PyTorch >= 1.2 with improved zero and few-shot generalization.

Scene Graph Generation Object Detections Ground truth Scene Graph Generated Scene Graph In this visualization, woman sitting on rock is a zero-shot tr

Boris Knyazev 93 Dec 28, 2022
dualFace: Two-Stage Drawing Guidance for Freehand Portrait Sketching (CVMJ)

dualFace dualFace: Two-Stage Drawing Guidance for Freehand Portrait Sketching (CVMJ) We provide python implementations for our CVM 2021 paper "dualFac

Haoran XIE 46 Nov 10, 2022
Data and code for the paper "Importance of Kernel Bandwidth in Quantum Machine Learning"

Reproducibility materials for "Importance of Kernel Bandwidth in Quantum Machine Learning" Repo structure: code contains Python scripts used to genera

Ruslan Shaydulin 3 Oct 23, 2022
A clean implementation based on AlphaZero for any game in any framework + tutorial + Othello/Gobang/TicTacToe/Connect4 and more

Alpha Zero General (any game, any framework!) A simplified, highly flexible, commented and (hopefully) easy to understand implementation of self-play

Surag Nair 3.1k Jan 05, 2023
Piotr - IoT firmware emulation instrumentation for training and research

Piotr: Pythonic IoT exploitation and Research Introduction to Piotr Piotr is an emulation helper for Qemu that provides a convenient way to create, sh

Damien Cauquil 51 Nov 09, 2022
[NeurIPS 2019] Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss

Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss Kaidi Cao, Colin Wei, Adrien Gaidon, Nikos Arechiga, Tengyu Ma This is the offi

Kaidi Cao 528 Jan 01, 2023
Code accompanying the paper "ProxyFL: Decentralized Federated Learning through Proxy Model Sharing"

ProxyFL Code accompanying the paper "ProxyFL: Decentralized Federated Learning through Proxy Model Sharing" Authors: Shivam Kalra*, Junfeng Wen*, Jess

Layer6 Labs 14 Dec 06, 2022
Perturb-and-max-product: Sampling and learning in discrete energy-based models

Perturb-and-max-product: Sampling and learning in discrete energy-based models This repo contains code for reproducing the results in the paper Pertur

Vicarious 2 Mar 14, 2022
[ACMMM 2021, Oral] Code release for "Elastic Tactile Simulation Towards Tactile-Visual Perception"

EIP: Elastic Interaction of Particles Code release for "Elastic Tactile Simulation Towards Tactile-Visual Perception", in ACMMM (Oral) 2021. By Yikai

Yikai Wang 37 Dec 20, 2022
Learning Domain Invariant Representations in Goal-conditioned Block MDPs

Learning Domain Invariant Representations in Goal-conditioned Block MDPs Beining Han, Chongyi Zheng, Harris Chan, Keiran Paster, Michael R. Zhang, Jim

Chongyi Zheng 3 Apr 12, 2022
Hierarchical Motion Encoder-Decoder Network for Trajectory Forecasting (HMNet)

Hierarchical Motion Encoder-Decoder Network for Trajectory Forecasting (HMNet) Our paper: https://arxiv.org/abs/2111.13324 We will release the complet

15 Oct 17, 2022