QuakeMigrate v1.0.0 Article Swipe
YOU?
·
· 2021
· Open Access
·
· DOI: https://doi.org/10.5281/zenodo.4442749
· OA: W3212290295
QuakeMigrate 1.0.0 Release Notes QuakeMigrate <code>1.0.0</code> is the culmination of almost 18 months of hard work, and is the first major, stable release of the package. The codebase has been largely re-written, delivering dramatic improvements in run-time and memory usage, many new features and far greater flexibility to the user. There have also been a large number of bug fixes relating to the stability and performance of the package. All users are encouraged to update to this release. We anticipate releasing <code>v1.1.0</code> soon, with a significant expansion of tutorials and related documentation, and some further improvements to user-flexbility. (And maybe a couple more bug-fixes!) So please give us your feedback!! Thank you to everyone who has been part of the journey so far! With your help, we have tested the code thoroughly, but it is inevitable that we won't have covered every possible use-case and combination of parameters – so please continue to provide feedback. And please let us know when it works well, too! It is our favourite source of motivation. Highlights <strong>Cross-platform support:</strong> QuakeMigrate has now been successfully built and run on Linux, Mac and Windows! The core development of the code continues to be carried out largely on Linux, so additional feedback & testing from Windows and Mac users will continue to be appreciated. <strong>Documentation:</strong> We now have comprehensive documentation automatically built from the source code, plus installation instructions (for Linux, Mac and Windows) and a limited set of tutorials. More coming soon! <strong>Local magnitude calculation:</strong> support for built-in local magnitude calculation (and output of cut raw, real and Wood-Anderson simulated waveforms for each event). <strong>Single-phase support:</strong> QuakeMigrate now supports flexible multiple-phase stacking. For example, users processing Z-only nodal data may wish to only stack P-wave onset functions. The flexible implementation allows users to design onset functions for any phase of their choosing (with P and S the default for the time being). But if you want to design an onset function to identify and migrate/stack Vsh, Vsv etc. it is now easy to do! <strong>Publication-ready plots:</strong> significant improvements to the information content, clarity and aesthetics of automatic plots (including from the trigger, locate, local-magnitude calculation and auto-picking modules & sub-modules). <strong>Examples:</strong> Two new examples; another demonstration of using QuakeMigrate to detect and locate high-frequency basal icequakes (amongst crevassing noise!), plus detecting dike-induced earthquakes during the 2014 Bárðarbunga-Holuhraun dike intrusion - featuring an event rate of more than 150 earthquakes per hour (~ 4000 per day!). <strong>Tests:</strong> we have made our first steps on the journey to including a comprehensive suite of tests, to verify correct operation after installation. These are based on the included <code>icequake_iceland</code> and <code>dike_intrusion</code> example use-cases. More to come soon. <strong>Logging:</strong> flexible log output – currently split mainly between "info", "warning" and "debug" levels. We recommend sticking with the default – "debug" returns a lot of additional info!! <strong>Modularity:</strong> the picker and onset sub-modules are now built on an abstract base class, making it straightforward to build and share new alternatives that integrate with the core migration machinery of the package. <strong>License:</strong> QuakeMigrate 1.0.0 is released under the GPL v3 license. Users who have been using the <code>development</code> branch <code>v1.0.0</code> serves as a citable release of the version of the code that has been available on the <code>development</code> branch since January 2020 – however note there have been a significant number of further enhancements and bug fixes over this period, particularly since May 2020. We intend to maintain a far more granular series of releases in future – thank you for your patience! Users upgrading from the <code>0.x.x</code> series Users upgrading from the <code>0.x.x</code> series will notice differences in the absolute value of the coalescence functions calculated, due to bug-fixes affecting the core migration and stacking functions. However, the relative values of the coalescence functions through time should remain largely unchanged, meaning trigger results and relative uncertainty estimates are still valid. Absolute uncertainty estimates, however, were previously being over-estimated, and trigger thresholds will need to be updated. To re-emphasise: there have been major bug-fixes and improvements reaching throughout the entire package. To benefit from these improvements we highly recommend re-processing the data through all stages (detect, trigger & locate), though we have tried to incorporate backwards-compatibility for all old output file formats wherever possible, for example to allow you to solely re-run locate(). Changelog This provides a limited summary of the major changes to the code since the previous release. For full details please see the linked pull requests, and commit messages therein. Change to top-level package name - <code>QMigrate</code> → <code>quakemigrate</code> See #85 <code>quakemigrate.core</code> C libraries now build automatically when installing the package. C functions have been cleaned up and documented properly. See #21. <code>quakemigrate.export</code> – new! Add some export utilities to a new module (<code>export</code>). Currently includes functions to take the outputs of QuakeMigrate to: ObsPy catalogue; ObsPy catalogue to NLLoc OBS file; ObsPy catalogue to MFAST SAC input; QuakeMigrate to pyrocko Snuffler input. <code>quakemigrate.io</code> Refactor the I/O system entirely. This was in response to Issue #66. See 68c13f7 for full details. The re-write of the <code>quakemigrate.io.data</code> sub-module includes fixing bugs and making breaking changes related to the detrending and upsampling/decimation of waveform data. See c1ff447 and #103. Add support for reading response information (via a light wrapper of the obspy function) and functions for response removal & Wood-Anderson seismogram simulation, for use with the new <code>quakemigrate.signal.local_mag</code> module. Add a new, more comprehensive, transparent & flexible <code>check_availability()</code> function, to check what data is available given a set of provided quality criteria. Added functions for removing response and simulating WA response here, allowing for this functionality to be accessed from anywhere across the package. This includes the ability to output real and/or WA cut waveforms (as velocity or displacement seismograms), for example for spectral analysis. Response removal parameters are specified (along with the instrument response inventory) when creating the <code>Archive</code> object. The format of triggered event files, event files, pick files and station-availabiity files have been heavily overhauled. See #76. Fix to allow for numerical station names. <code>quakemigate.lut</code> – significant rewrite (see #54, #65) Significant changes to API – see examples. Users from the 0.x series will need to update their look-up table files (using an included utility function) or re-compute them. Fully-documented, including a tutorial in the documentation. Handling of a possible bug/ambiguity in the scipy RegularGridInterpolator API. The default for the fill_value parameter does not appear to be consistent with documentation. The traveltime lookup tables are now stored in a dictionary structure <code>maps[station][phase]</code> to enable migration of a flexible combination of seismic phases, and to make it possible to migrate onsets for a subset of the phases and stations contained in the LUT. See #75, #103. The 3-D grid on which the lookup tables are defined is now more intuitive to build. The user simply chooses the positions of a pair of opposite corners (the lower-left and upper-right) in geographic coordinates, the geographic and cartesian projections (using pyproj), and a node spacing along each axis. The number of grid nodes will be calculated automatically to span the volume of interest. User-specified units: the user must specify when making an LUT whether to use units of metres or kilometres; this will then be used consistently throughout the package. See #79. <code>quakemigrate.plot</code> – new! See #83. Extracted all base plotting methods to individual modules within the <code>quakemigrate.plot</code> module. No longer using a class to pass the information around. Revamp all of the figures produced by QuakeMigrate to include more useful information and to make better use of the available space. See 72b1c47 for details. <code>quakemigrate.signal</code> Refactor to be more flexible with the input data. QuakeMigrate now allows for single-component data to be used, or stacking to be performed on just one phase (e.g. just P or just S). The required changes reached quite deep into the package and have changed how Onset objects are created, but is ultimately very straightforward to use. See #103. Channel names can now be specified by the user, by default they are "Z" for vertical component, and "[N,1]" and ["E,2"] for horizontal components. Internally use <code>obspy.Trace</code> objects to store data up to the point of passing it to the C functions; this adds greater flexibility and more built-in methods for quality checking, filtering, re-sampling etc. than the previous framework using arrays. <code>quakemigate.signal.onsets</code> – significant re-write Extracted the embedded onset function generation from the core QuakeScan class to a new submodule, <code>quakemigrate.signal.onsets</code>. Various changes to parameter names – see examples. Created an Abstract Base Class – Onset. This class can be used as a base class for a class imple