requake 0.6__tar.gz → 0.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {requake-0.6 → requake-0.7.2}/CHANGELOG.md +51 -1
- {requake-0.6 → requake-0.7.2}/PKG-INFO +70 -29
- {requake-0.6 → requake-0.7.2}/README.md +55 -18
- requake-0.7.2/pyproject.toml +72 -0
- {requake-0.6 → requake-0.7.2}/requake/__init__.py +3 -4
- {requake-0.6 → requake-0.7.2}/requake/_version.py +4 -4
- {requake-0.6 → requake-0.7.2}/requake/catalog/__init__.py +5 -1
- {requake-0.6 → requake-0.7.2}/requake/catalog/catalog.py +15 -19
- {requake-0.6 → requake-0.7.2}/requake/catalog/print_catalog.py +7 -11
- {requake-0.6 → requake-0.7.2}/requake/catalog/read_catalog.py +13 -17
- {requake-0.6 → requake-0.7.2}/requake/catalog/read_catalog_from_csv.py +48 -42
- {requake-0.6 → requake-0.7.2}/requake/catalog/read_catalog_from_fdsnws.py +9 -8
- {requake-0.6 → requake-0.7.2}/requake/catalog/read_catalog_from_quakeml.py +2 -2
- requake-0.7.2/requake/config/__init__.py +17 -0
- {requake-0.6 → requake-0.7.2}/requake/config/config.py +3 -1
- requake-0.7.2/requake/config/configobj/LICENSE +40 -0
- {requake-0.6 → requake-0.7.2}/requake/config/configobj/__init__.py +27 -32
- {requake-0.6 → requake-0.7.2}/requake/config/configobj/validate.py +28 -44
- {requake-0.6 → requake-0.7.2}/requake/config/configspec.conf +22 -15
- {requake-0.6 → requake-0.7.2}/requake/config/generic_printer.py +3 -4
- {requake-0.6 → requake-0.7.2}/requake/config/parse_arguments.py +225 -76
- {requake-0.6 → requake-0.7.2}/requake/config/rq_setup.py +121 -63
- {requake-0.6 → requake-0.7.2}/requake/config/utils.py +38 -36
- {requake-0.6 → requake-0.7.2}/requake/families/__init__.py +6 -1
- {requake-0.6 → requake-0.7.2}/requake/families/build_families.py +10 -18
- {requake-0.6 → requake-0.7.2}/requake/families/build_templates.py +15 -20
- {requake-0.6 → requake-0.7.2}/requake/families/families.py +148 -47
- {requake-0.6 → requake-0.7.2}/requake/families/flag_family.py +3 -5
- {requake-0.6 → requake-0.7.2}/requake/families/pairs.py +7 -10
- requake-0.7.2/requake/families/print_families.py +120 -0
- {requake-0.6 → requake-0.7.2}/requake/families/print_pairs.py +5 -9
- {requake-0.6 → requake-0.7.2}/requake/formulas/__init__.py +5 -2
- requake-0.7.2/requake/formulas/conversion.py +98 -0
- {requake-0.6 → requake-0.7.2}/requake/formulas/moment.py +1 -1
- {requake-0.6 → requake-0.7.2}/requake/formulas/slip.py +4 -5
- {requake-0.6 → requake-0.7.2}/requake/main.py +32 -32
- {requake-0.6 → requake-0.7.2}/requake/plot/__init__.py +1 -1
- {requake-0.6 → requake-0.7.2}/requake/plot/cached_tiler.py +1 -1
- requake-0.7.2/requake/plot/colormaps.py +53 -0
- {requake-0.6 → requake-0.7.2}/requake/plot/map_families.py +32 -22
- {requake-0.6 → requake-0.7.2}/requake/plot/map_tiles.py +19 -1
- {requake-0.6 → requake-0.7.2}/requake/plot/plot_cumulative.py +39 -36
- {requake-0.6 → requake-0.7.2}/requake/plot/plot_families.py +50 -41
- {requake-0.6 → requake-0.7.2}/requake/plot/plot_pair.py +44 -31
- {requake-0.6 → requake-0.7.2}/requake/plot/plot_timespans.py +29 -21
- requake-0.7.2/requake/plot/plot_utils.py +397 -0
- {requake-0.6 → requake-0.7.2}/requake/scan/__init__.py +1 -1
- requake-0.7.2/requake/scan/scan_catalog.py +134 -0
- {requake-0.6 → requake-0.7.2}/requake/scan/scan_templates.py +60 -48
- requake-0.7.2/requake/waveforms/__init__.py +24 -0
- {requake-0.6 → requake-0.7.2}/requake/waveforms/arrivals.py +1 -1
- requake-0.7.2/requake/waveforms/station_metadata.py +251 -0
- requake-0.7.2/requake/waveforms/waveform_pair.py +168 -0
- requake-0.7.2/requake/waveforms/waveforms.py +460 -0
- {requake-0.6 → requake-0.7.2}/requake.egg-info/PKG-INFO +70 -29
- {requake-0.6 → requake-0.7.2}/requake.egg-info/SOURCES.txt +4 -2
- {requake-0.6 → requake-0.7.2}/requake.egg-info/requires.txt +2 -0
- requake-0.7.2/setup.cfg +4 -0
- requake-0.7.2/setup.py +28 -0
- requake-0.6/requake/config/__init__.py +0 -12
- requake-0.6/requake/families/print_families.py +0 -82
- requake-0.6/requake/formulas/conversion.py +0 -43
- requake-0.6/requake/plot/plot_utils.py +0 -152
- requake-0.6/requake/scan/scan_catalog.py +0 -100
- requake-0.6/requake/waveforms/__init__.py +0 -11
- requake-0.6/requake/waveforms/station_metadata.py +0 -97
- requake-0.6/requake/waveforms/waveforms.py +0 -303
- requake-0.6/setup.cfg +0 -12
- requake-0.6/setup.py +0 -59
- requake-0.6/versioneer.py +0 -1855
- {requake-0.6 → requake-0.7.2}/CONTRIBUTORS.txt +0 -0
- {requake-0.6 → requake-0.7.2}/LICENSE.txt +0 -0
- {requake-0.6 → requake-0.7.2}/MANIFEST.in +0 -0
- {requake-0.6 → requake-0.7.2}/requake/config/configobj/_version.py +0 -0
- {requake-0.6 → requake-0.7.2}/requake.egg-info/dependency_links.txt +0 -0
- {requake-0.6 → requake-0.7.2}/requake.egg-info/entry_points.txt +0 -0
- {requake-0.6 → requake-0.7.2}/requake.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,56 @@
|
|
|
1
1
|
# Requake Changelog
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2021-
|
|
3
|
+
Copyright (c) 2021-2026 Claudio Satriano <satriano@ipgp.fr>
|
|
4
|
+
|
|
5
|
+
## v0.7.2 - 2026-04-13
|
|
6
|
+
|
|
7
|
+
This release is intended to validate the new release workflow.
|
|
8
|
+
It introduces no new features or bug fixes.
|
|
9
|
+
|
|
10
|
+
## v0.7.1 - 2026-04-13
|
|
11
|
+
|
|
12
|
+
This release is intended to validate the new release workflow.
|
|
13
|
+
It introduces no new features or bug fixes.
|
|
14
|
+
|
|
15
|
+
## v0.7 - 2026-04-10
|
|
16
|
+
|
|
17
|
+
This version requires at least Python 3.9.
|
|
18
|
+
|
|
19
|
+
Note: you might want to run `requake update_config` to update your config file
|
|
20
|
+
to the latest version.
|
|
21
|
+
|
|
22
|
+
- New option `--shorterthan` to select families with a duration shorter than a
|
|
23
|
+
given value. For this option and for `--longerthan` it is now possible to
|
|
24
|
+
specify the duration in seconds, minutes, hours, or months, in addition to
|
|
25
|
+
days and years.
|
|
26
|
+
- New option `--colorby` for many plot commands, to color families by a
|
|
27
|
+
specific attribute other than the family number
|
|
28
|
+
- New option `--colormap` for many plot commands, to select a colormap
|
|
29
|
+
for coloring families. If not specified, a default colormap for each
|
|
30
|
+
attribute specified in `--colorby` is used.
|
|
31
|
+
- New option `--range` to manually specify the range of values for the color
|
|
32
|
+
scale
|
|
33
|
+
- New option `--force` for commands that write files, to overwrite existing
|
|
34
|
+
files without asking
|
|
35
|
+
- New option `--freq_band` for trace plotting commands, to override the
|
|
36
|
+
frequency band specified in the config file
|
|
37
|
+
- New option `--detailed` for `print_families`, to print more detailed
|
|
38
|
+
information about each family, including the list of events
|
|
39
|
+
- New option `--output` to save plots to files instead of showing them on
|
|
40
|
+
screen
|
|
41
|
+
- Config option `waveform_data_path` renamed to `sds_data_path`
|
|
42
|
+
- New config option `event_data_path` to specify the path to a local directory
|
|
43
|
+
with waveform files organized per event
|
|
44
|
+
- Add missing `street` map style for `map_families`
|
|
45
|
+
- Catalog scan: when more than a station is provided and the closest station
|
|
46
|
+
to the event is not available, use the next closest station instead.
|
|
47
|
+
- Catalog scan: accurate estimation of the number of event pairs to process
|
|
48
|
+
- Initial support for plotting families found with template scan
|
|
49
|
+
- Improved reading of CSV catalog files:
|
|
50
|
+
- avoid duplicated column guessing
|
|
51
|
+
- ensure that prefectly matching column field names are correctly guessed
|
|
52
|
+
- warn if an invalid time format is found
|
|
53
|
+
- Colored terminal output for warnings and errors
|
|
4
54
|
|
|
5
55
|
## v0.6 - 2024-05-04
|
|
6
56
|
|
|
@@ -1,39 +1,43 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: requake
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.2
|
|
4
4
|
Summary: Repeating earthquakes search and analysis
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Author-email: satriano@ipgp.fr
|
|
8
|
-
License: GNU General Public License v3 or later (GPLv3+)
|
|
5
|
+
Author-email: Claudio Satriano <satriano@ipgp.fr>
|
|
6
|
+
License-Expression: GPL-3.0-or-later
|
|
9
7
|
Project-URL: Homepage, https://requake.seismicsource.org
|
|
10
8
|
Project-URL: Source, https://github.com/SeismicSource/requake
|
|
11
9
|
Project-URL: Documentation, https://requake.readthedocs.io
|
|
12
|
-
Platform: OS
|
|
10
|
+
Platform: OS
|
|
11
|
+
Platform: Independent
|
|
13
12
|
Classifier: Development Status :: 4 - Beta
|
|
14
13
|
Classifier: Environment :: Console
|
|
15
14
|
Classifier: Intended Audience :: Science/Research
|
|
16
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
17
15
|
Classifier: Operating System :: OS Independent
|
|
18
16
|
Classifier: Programming Language :: Python
|
|
19
17
|
Classifier: Programming Language :: Python :: 3
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
22
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
23
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
24
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
24
|
Classifier: Topic :: Scientific/Engineering
|
|
26
25
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
27
|
-
Requires-Python:
|
|
26
|
+
Requires-Python: >=3.9
|
|
28
27
|
Description-Content-Type: text/markdown
|
|
29
28
|
License-File: LICENSE.txt
|
|
30
29
|
Requires-Dist: scipy>=1.5.0
|
|
31
30
|
Requires-Dist: obspy>=1.2.0
|
|
31
|
+
Requires-Dist: cartopy
|
|
32
32
|
Requires-Dist: argcomplete
|
|
33
33
|
Requires-Dist: tqdm
|
|
34
34
|
Requires-Dist: tabulate
|
|
35
|
+
Requires-Dist: pygments
|
|
36
|
+
Dynamic: description
|
|
37
|
+
Dynamic: description-content-type
|
|
38
|
+
Dynamic: license-file
|
|
35
39
|
|
|
36
|
-
<img src="https://cdn.jsdelivr.net/gh/SeismicSource/requake@
|
|
40
|
+
<img src="https://cdn.jsdelivr.net/gh/SeismicSource/requake@b6498527a861637124bae1b49943b83f9ca4a7d2/imgs/Requake_logo.svg" width="400">
|
|
37
41
|
|
|
38
42
|
# Requake
|
|
39
43
|
|
|
@@ -45,7 +49,7 @@ Repeating earthquakes search and analysis.
|
|
|
45
49
|
[![docs-badge]][docs-link]
|
|
46
50
|
[![DOI-badge]][DOI-link]
|
|
47
51
|
|
|
48
|
-
Copyright (c) 2021-
|
|
52
|
+
Copyright (c) 2021-2026 Claudio Satriano <satriano@ipgp.fr>
|
|
49
53
|
|
|
50
54
|
## Description
|
|
51
55
|
|
|
@@ -55,18 +59,43 @@ It can either scan an existing earthquake catalog to search for similar events,
|
|
|
55
59
|
or perform template matching on a continuous waveform stream.
|
|
56
60
|
|
|
57
61
|
Catalogs and waveforms can be read from local files or downloaded using
|
|
58
|
-
standard [FDSN web services]
|
|
62
|
+
standard [FDSN web services].
|
|
59
63
|
|
|
60
|
-
Requake is written in Python and uses [ObsPy]
|
|
64
|
+
Requake is written in Python and uses [ObsPy] as backend.
|
|
61
65
|
|
|
62
66
|
## Installation
|
|
63
67
|
|
|
64
68
|
### Installing the latest release
|
|
65
69
|
|
|
66
|
-
#### Using
|
|
70
|
+
#### Using Anaconda
|
|
67
71
|
|
|
68
|
-
The
|
|
69
|
-
|
|
72
|
+
The following command will automatically create an [Anaconda] environment
|
|
73
|
+
named `requake`, install the required packages and install the latest
|
|
74
|
+
version of SourceSpec via `pip`:
|
|
75
|
+
|
|
76
|
+
conda env create --file https://raw.githubusercontent.com/SeismicSource/requake/main/requake_conda_env.yml
|
|
77
|
+
|
|
78
|
+
If you want a different name for your environment, use:
|
|
79
|
+
|
|
80
|
+
conda env create -n YOUR_ENV_NAME --file https://raw.githubusercontent.com/SeismicSource/requake/main/requake_conda_env.yml
|
|
81
|
+
|
|
82
|
+
Activate the environment with:
|
|
83
|
+
|
|
84
|
+
conda activate requake
|
|
85
|
+
|
|
86
|
+
(or `conda activate YOUR_ENV_NAME`)
|
|
87
|
+
|
|
88
|
+
To keep Requake updated run the following command from within the environment:
|
|
89
|
+
|
|
90
|
+
pip install --upgrade requake
|
|
91
|
+
|
|
92
|
+
Or, to switch to a development snapshot, run:
|
|
93
|
+
|
|
94
|
+
pip install git+https://github.com/SeismicSource/requake.git
|
|
95
|
+
|
|
96
|
+
#### Using pip and PyPI
|
|
97
|
+
|
|
98
|
+
The latest release of Requake is available on the [Python Package Index].
|
|
70
99
|
|
|
71
100
|
You can install it easily through `pip`:
|
|
72
101
|
|
|
@@ -75,9 +104,8 @@ You can install it easily through `pip`:
|
|
|
75
104
|
### Installing a development snapshot
|
|
76
105
|
|
|
77
106
|
If you need a recent feature that is not in the latest release (see the
|
|
78
|
-
`unreleased` section in [CHANGELOG]
|
|
79
|
-
recent development snapshot from the
|
|
80
|
-
[Requake GitHub repository](https://github.com/SeismicSource/requake).
|
|
107
|
+
`unreleased` section in [CHANGELOG][changelog-link]), you want to use the more
|
|
108
|
+
recent development snapshot from the [Requake GitHub repository].
|
|
81
109
|
|
|
82
110
|
#### Using pip
|
|
83
111
|
|
|
@@ -149,9 +177,14 @@ Certain commands (e.g., `plot_pair`) require further arguments (use, e.g.,
|
|
|
149
177
|
`requake plot_pair -h` to get help).
|
|
150
178
|
|
|
151
179
|
Requake supports command line tab completion for commands and arguments, thanks
|
|
152
|
-
to [argcomplete]
|
|
153
|
-
To enable command line tab completion
|
|
154
|
-
|
|
180
|
+
to [argcomplete].
|
|
181
|
+
To enable command line tab completion run:
|
|
182
|
+
|
|
183
|
+
activate-global-python-argcomplete
|
|
184
|
+
|
|
185
|
+
(This is a one-time command that needs to be run only once).
|
|
186
|
+
|
|
187
|
+
Or, alternatively, add the following line to your `.bashrc` or `.zshrc`:
|
|
155
188
|
|
|
156
189
|
eval "$(register-python-argcomplete requake)"
|
|
157
190
|
|
|
@@ -193,8 +226,8 @@ parallelization will be implemented.
|
|
|
193
226
|
|
|
194
227
|
If you used Requake for a scientific paper, please cite it as:
|
|
195
228
|
|
|
196
|
-
> Satriano, C. (
|
|
197
|
-
> [doi: 10.5281/ZENODO.
|
|
229
|
+
> Satriano, C. (2026). Requake: Repeating earthquakes search and analysis (X.Y).
|
|
230
|
+
> [doi: 10.5281/ZENODO.10832203]
|
|
198
231
|
|
|
199
232
|
Please replace `X.Y` with the Requake version number you used.
|
|
200
233
|
|
|
@@ -215,9 +248,17 @@ You can also cite the following abstract presented at the
|
|
|
215
248
|
[docs-link]: https://requake.readthedocs.io/en/latest/?badge=latest
|
|
216
249
|
[changelog-badge]: https://img.shields.io/badge/Changelog-136CB6.svg
|
|
217
250
|
[changelog-link]: https://github.com/SeismicSource/requake/blob/main/CHANGELOG.md
|
|
218
|
-
[DOI-badge]: https://zenodo.org/badge/DOI/10.5281/zenodo.
|
|
219
|
-
[DOI-link]: https://doi.org/10.5281/zenodo.
|
|
251
|
+
[DOI-badge]: https://zenodo.org/badge/DOI/10.5281/zenodo.10832203.svg
|
|
252
|
+
[DOI-link]: https://doi.org/10.5281/zenodo.10832203
|
|
253
|
+
[Requake GitHub repository]: https://github.com/SeismicSource/requake
|
|
254
|
+
|
|
255
|
+
<!-- External links -->
|
|
256
|
+
[FDSN web services]: https://www.fdsn.org/webservices/
|
|
257
|
+
[ObsPy]: https://obspy.org
|
|
258
|
+
[Anaconda]: https://www.anaconda.com/download
|
|
259
|
+
[Python Package Index]: https://pypi.org/project/requake/
|
|
260
|
+
[argcomplete]: https://kislyuk.github.io/argcomplete/
|
|
220
261
|
|
|
221
262
|
<!-- References -->
|
|
222
|
-
[doi: 10.5281/ZENODO.
|
|
263
|
+
[doi: 10.5281/ZENODO.10832203]: https://doi.org/10.5281/ZENODO.10832203
|
|
223
264
|
[bibcode: 2021AGUFM.T25A0167S]: https://ui.adsabs.harvard.edu/abs/2021AGUFM.T25A0167S
|
|
@@ -10,7 +10,7 @@ Repeating earthquakes search and analysis.
|
|
|
10
10
|
[![docs-badge]][docs-link]
|
|
11
11
|
[![DOI-badge]][DOI-link]
|
|
12
12
|
|
|
13
|
-
Copyright (c) 2021-
|
|
13
|
+
Copyright (c) 2021-2026 Claudio Satriano <satriano@ipgp.fr>
|
|
14
14
|
|
|
15
15
|
## Description
|
|
16
16
|
|
|
@@ -20,18 +20,43 @@ It can either scan an existing earthquake catalog to search for similar events,
|
|
|
20
20
|
or perform template matching on a continuous waveform stream.
|
|
21
21
|
|
|
22
22
|
Catalogs and waveforms can be read from local files or downloaded using
|
|
23
|
-
standard [FDSN web services]
|
|
23
|
+
standard [FDSN web services].
|
|
24
24
|
|
|
25
|
-
Requake is written in Python and uses [ObsPy]
|
|
25
|
+
Requake is written in Python and uses [ObsPy] as backend.
|
|
26
26
|
|
|
27
27
|
## Installation
|
|
28
28
|
|
|
29
29
|
### Installing the latest release
|
|
30
30
|
|
|
31
|
-
#### Using
|
|
31
|
+
#### Using Anaconda
|
|
32
32
|
|
|
33
|
-
The
|
|
34
|
-
|
|
33
|
+
The following command will automatically create an [Anaconda] environment
|
|
34
|
+
named `requake`, install the required packages and install the latest
|
|
35
|
+
version of SourceSpec via `pip`:
|
|
36
|
+
|
|
37
|
+
conda env create --file https://raw.githubusercontent.com/SeismicSource/requake/main/requake_conda_env.yml
|
|
38
|
+
|
|
39
|
+
If you want a different name for your environment, use:
|
|
40
|
+
|
|
41
|
+
conda env create -n YOUR_ENV_NAME --file https://raw.githubusercontent.com/SeismicSource/requake/main/requake_conda_env.yml
|
|
42
|
+
|
|
43
|
+
Activate the environment with:
|
|
44
|
+
|
|
45
|
+
conda activate requake
|
|
46
|
+
|
|
47
|
+
(or `conda activate YOUR_ENV_NAME`)
|
|
48
|
+
|
|
49
|
+
To keep Requake updated run the following command from within the environment:
|
|
50
|
+
|
|
51
|
+
pip install --upgrade requake
|
|
52
|
+
|
|
53
|
+
Or, to switch to a development snapshot, run:
|
|
54
|
+
|
|
55
|
+
pip install git+https://github.com/SeismicSource/requake.git
|
|
56
|
+
|
|
57
|
+
#### Using pip and PyPI
|
|
58
|
+
|
|
59
|
+
The latest release of Requake is available on the [Python Package Index].
|
|
35
60
|
|
|
36
61
|
You can install it easily through `pip`:
|
|
37
62
|
|
|
@@ -40,9 +65,8 @@ You can install it easily through `pip`:
|
|
|
40
65
|
### Installing a development snapshot
|
|
41
66
|
|
|
42
67
|
If you need a recent feature that is not in the latest release (see the
|
|
43
|
-
`unreleased` section in [CHANGELOG]
|
|
44
|
-
recent development snapshot from the
|
|
45
|
-
[Requake GitHub repository](https://github.com/SeismicSource/requake).
|
|
68
|
+
`unreleased` section in [CHANGELOG][changelog-link]), you want to use the more
|
|
69
|
+
recent development snapshot from the [Requake GitHub repository].
|
|
46
70
|
|
|
47
71
|
#### Using pip
|
|
48
72
|
|
|
@@ -114,9 +138,14 @@ Certain commands (e.g., `plot_pair`) require further arguments (use, e.g.,
|
|
|
114
138
|
`requake plot_pair -h` to get help).
|
|
115
139
|
|
|
116
140
|
Requake supports command line tab completion for commands and arguments, thanks
|
|
117
|
-
to [argcomplete]
|
|
118
|
-
To enable command line tab completion
|
|
119
|
-
|
|
141
|
+
to [argcomplete].
|
|
142
|
+
To enable command line tab completion run:
|
|
143
|
+
|
|
144
|
+
activate-global-python-argcomplete
|
|
145
|
+
|
|
146
|
+
(This is a one-time command that needs to be run only once).
|
|
147
|
+
|
|
148
|
+
Or, alternatively, add the following line to your `.bashrc` or `.zshrc`:
|
|
120
149
|
|
|
121
150
|
eval "$(register-python-argcomplete requake)"
|
|
122
151
|
|
|
@@ -158,8 +187,8 @@ parallelization will be implemented.
|
|
|
158
187
|
|
|
159
188
|
If you used Requake for a scientific paper, please cite it as:
|
|
160
189
|
|
|
161
|
-
> Satriano, C. (
|
|
162
|
-
> [doi: 10.5281/ZENODO.
|
|
190
|
+
> Satriano, C. (2026). Requake: Repeating earthquakes search and analysis (X.Y).
|
|
191
|
+
> [doi: 10.5281/ZENODO.10832203]
|
|
163
192
|
|
|
164
193
|
Please replace `X.Y` with the Requake version number you used.
|
|
165
194
|
|
|
@@ -180,9 +209,17 @@ You can also cite the following abstract presented at the
|
|
|
180
209
|
[docs-link]: https://requake.readthedocs.io/en/latest/?badge=latest
|
|
181
210
|
[changelog-badge]: https://img.shields.io/badge/Changelog-136CB6.svg
|
|
182
211
|
[changelog-link]: https://github.com/SeismicSource/requake/blob/main/CHANGELOG.md
|
|
183
|
-
[DOI-badge]: https://zenodo.org/badge/DOI/10.5281/zenodo.
|
|
184
|
-
[DOI-link]: https://doi.org/10.5281/zenodo.
|
|
212
|
+
[DOI-badge]: https://zenodo.org/badge/DOI/10.5281/zenodo.10832203.svg
|
|
213
|
+
[DOI-link]: https://doi.org/10.5281/zenodo.10832203
|
|
214
|
+
[Requake GitHub repository]: https://github.com/SeismicSource/requake
|
|
215
|
+
|
|
216
|
+
<!-- External links -->
|
|
217
|
+
[FDSN web services]: https://www.fdsn.org/webservices/
|
|
218
|
+
[ObsPy]: https://obspy.org
|
|
219
|
+
[Anaconda]: https://www.anaconda.com/download
|
|
220
|
+
[Python Package Index]: https://pypi.org/project/requake/
|
|
221
|
+
[argcomplete]: https://kislyuk.github.io/argcomplete/
|
|
185
222
|
|
|
186
223
|
<!-- References -->
|
|
187
|
-
[doi: 10.5281/ZENODO.
|
|
188
|
-
[bibcode: 2021AGUFM.T25A0167S]: https://ui.adsabs.harvard.edu/abs/2021AGUFM.T25A0167S
|
|
224
|
+
[doi: 10.5281/ZENODO.10832203]: https://doi.org/10.5281/ZENODO.10832203
|
|
225
|
+
[bibcode: 2021AGUFM.T25A0167S]: https://ui.adsabs.harvard.edu/abs/2021AGUFM.T25A0167S
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77", "versioneer[toml]"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "requake"
|
|
7
|
+
dynamic = ["version", "readme"]
|
|
8
|
+
authors = [
|
|
9
|
+
{ name = "Claudio Satriano", email = "satriano@ipgp.fr" },
|
|
10
|
+
]
|
|
11
|
+
description = "Repeating earthquakes search and analysis"
|
|
12
|
+
license = "GPL-3.0-or-later"
|
|
13
|
+
license-files = ["LICENSE.txt"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Environment :: Console",
|
|
17
|
+
"Intended Audience :: Science/Research",
|
|
18
|
+
"Operating System :: OS Independent",
|
|
19
|
+
"Programming Language :: Python",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.9",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Programming Language :: Python :: 3.14",
|
|
27
|
+
"Topic :: Scientific/Engineering",
|
|
28
|
+
"Topic :: Scientific/Engineering :: Physics",
|
|
29
|
+
]
|
|
30
|
+
requires-python = ">=3.9"
|
|
31
|
+
dependencies = [
|
|
32
|
+
"scipy>=1.5.0",
|
|
33
|
+
"obspy>=1.2.0",
|
|
34
|
+
"cartopy",
|
|
35
|
+
"argcomplete",
|
|
36
|
+
"tqdm",
|
|
37
|
+
"tabulate",
|
|
38
|
+
"pygments",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
[project.urls]
|
|
42
|
+
Homepage = "https://requake.seismicsource.org"
|
|
43
|
+
Source = "https://github.com/SeismicSource/requake"
|
|
44
|
+
Documentation = "https://requake.readthedocs.io"
|
|
45
|
+
|
|
46
|
+
[project.scripts]
|
|
47
|
+
requake = "requake.main:main"
|
|
48
|
+
|
|
49
|
+
[tool.setuptools]
|
|
50
|
+
include-package-data = true
|
|
51
|
+
platforms = [
|
|
52
|
+
"OS",
|
|
53
|
+
"Independent",
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
[tool.setuptools.packages.find]
|
|
57
|
+
include = ["requake", "requake.*"]
|
|
58
|
+
|
|
59
|
+
[tool.setuptools.package-data]
|
|
60
|
+
"*" = ["LICENSE"]
|
|
61
|
+
"requake.config" = ["*.conf"]
|
|
62
|
+
|
|
63
|
+
[tool.setuptools.dynamic]
|
|
64
|
+
version = {attr = "requake.__version__"}
|
|
65
|
+
|
|
66
|
+
[tool.versioneer]
|
|
67
|
+
VCS = "git"
|
|
68
|
+
style = "pep440"
|
|
69
|
+
versionfile_source = "requake/_version.py"
|
|
70
|
+
versionfile_build = "requake/_version.py"
|
|
71
|
+
tag_prefix = "v"
|
|
72
|
+
parentdir_prefix = "requake-"
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
Initialize requake package.
|
|
5
5
|
|
|
6
6
|
:copyright:
|
|
7
|
-
2021-
|
|
7
|
+
2021-2026 Claudio Satriano <satriano@ipgp.fr>
|
|
8
8
|
:license:
|
|
9
9
|
GNU General Public License v3.0 or later
|
|
10
10
|
(https://www.gnu.org/licenses/gpl-3.0-standalone.html)
|
|
11
11
|
"""
|
|
12
|
-
from .
|
|
13
|
-
__version__ = get_versions()['version']
|
|
14
|
-
del get_versions
|
|
12
|
+
from . import _version
|
|
13
|
+
__version__ = _version.get_versions()['version']
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
# This file was generated by 'versioneer.py' (0.
|
|
2
|
+
# This file was generated by 'versioneer.py' (0.29) from
|
|
3
3
|
# revision-control system data, or from the parent directory name of an
|
|
4
4
|
# unpacked source archive. Distribution tarballs contain a pre-generated copy
|
|
5
5
|
# of this file.
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "
|
|
11
|
+
"date": "2026-04-13T09:24:19+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.
|
|
14
|
+
"full-revisionid": "b6498527a861637124bae1b49943b83f9ca4a7d2",
|
|
15
|
+
"version": "0.7.2"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
Functions and data structures for managing earthquake catalogs.
|
|
5
5
|
|
|
6
6
|
:copyright:
|
|
7
|
-
2021-
|
|
7
|
+
2021-2026 Claudio Satriano <satriano@ipgp.fr>
|
|
8
8
|
:license:
|
|
9
9
|
GNU General Public License v3.0 or later
|
|
10
10
|
(https://www.gnu.org/licenses/gpl-3.0-standalone.html)
|
|
11
11
|
"""
|
|
12
|
+
from .catalog import ( # noqa
|
|
13
|
+
RequakeCatalog, RequakeEvent, generate_evid,
|
|
14
|
+
fix_non_locatable_events, read_stored_catalog
|
|
15
|
+
)
|
|
12
16
|
from .read_catalog import read_catalog # noqa
|
|
13
17
|
from .print_catalog import print_catalog # noqa
|
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
Classes and functions for downloading, reading and writing catalogs.
|
|
5
5
|
|
|
6
6
|
:copyright:
|
|
7
|
-
2021-
|
|
7
|
+
2021-2026 Claudio Satriano <satriano@ipgp.fr>
|
|
8
8
|
:license:
|
|
9
9
|
GNU General Public License v3.0 or later
|
|
10
10
|
(https://www.gnu.org/licenses/gpl-3.0-standalone.html)
|
|
11
11
|
"""
|
|
12
12
|
import numpy as np
|
|
13
13
|
from obspy import UTCDateTime
|
|
14
|
-
from ..
|
|
15
|
-
from ..
|
|
14
|
+
from ..config import config
|
|
15
|
+
from ..formulas import float_or_none
|
|
16
|
+
from ..waveforms import get_traceid_coords
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class RequakeEvent():
|
|
@@ -91,8 +92,8 @@ class RequakeEvent():
|
|
|
91
92
|
self.mag = float_or_none(word[10])
|
|
92
93
|
self.mag_author = word[11]
|
|
93
94
|
self.location_name = word[12]
|
|
94
|
-
except IndexError as
|
|
95
|
-
raise ValueError(f'Invalid line: {line}') from
|
|
95
|
+
except IndexError as err:
|
|
96
|
+
raise ValueError(f'Invalid line: {line}') from err
|
|
96
97
|
|
|
97
98
|
def fdsn_text(self):
|
|
98
99
|
"""
|
|
@@ -181,13 +182,13 @@ class RequakeCatalog(list):
|
|
|
181
182
|
for ev in self:
|
|
182
183
|
fp.write(ev.fdsn_text() + '\n')
|
|
183
184
|
|
|
184
|
-
|
|
185
185
|
def filter(
|
|
186
186
|
self, starttime=None, endtime=None,
|
|
187
187
|
minlatitude=None, maxlatitude=None,
|
|
188
188
|
minlongitude=None, maxlongitude=None,
|
|
189
189
|
mindepth=None, maxdepth=None,
|
|
190
|
-
minmagnitude=None, maxmagnitude=None
|
|
190
|
+
minmagnitude=None, maxmagnitude=None
|
|
191
|
+
):
|
|
191
192
|
"""
|
|
192
193
|
Filter the catalog, based on the specified criteria.
|
|
193
194
|
|
|
@@ -248,13 +249,10 @@ class RequakeCatalog(list):
|
|
|
248
249
|
return outcat
|
|
249
250
|
|
|
250
251
|
|
|
251
|
-
def read_stored_catalog(
|
|
252
|
+
def read_stored_catalog():
|
|
252
253
|
"""
|
|
253
254
|
Read the catalog stored in the output directory.
|
|
254
255
|
|
|
255
|
-
:param config: Configuration object.
|
|
256
|
-
:type config: config.Config
|
|
257
|
-
|
|
258
256
|
:return: Catalog object.
|
|
259
257
|
:rtype: RequakeCatalog
|
|
260
258
|
|
|
@@ -268,24 +266,22 @@ def read_stored_catalog(config):
|
|
|
268
266
|
if not cat:
|
|
269
267
|
raise ValueError('Empty catalog')
|
|
270
268
|
return cat
|
|
271
|
-
except ValueError as
|
|
269
|
+
except ValueError as err:
|
|
272
270
|
raise ValueError(
|
|
273
|
-
f'Error reading catalog file {config.scan_catalog_file}: {
|
|
274
|
-
) from
|
|
275
|
-
except FileNotFoundError as
|
|
271
|
+
f'Error reading catalog file {config.scan_catalog_file}: {err}'
|
|
272
|
+
) from err
|
|
273
|
+
except (FileNotFoundError, NotADirectoryError) as err:
|
|
276
274
|
raise FileNotFoundError(
|
|
277
275
|
f'Catalog file {config.scan_catalog_file} not found'
|
|
278
|
-
) from
|
|
276
|
+
) from err
|
|
279
277
|
|
|
280
278
|
|
|
281
|
-
def fix_non_locatable_events(catalog
|
|
279
|
+
def fix_non_locatable_events(catalog):
|
|
282
280
|
"""
|
|
283
281
|
Fix non-locatable events in catalog.
|
|
284
282
|
|
|
285
283
|
:param catalog: a RequakeCatalog object
|
|
286
284
|
:type catalog: RequakeCatalog
|
|
287
|
-
:param config: a Config object
|
|
288
|
-
:type config: config.Config
|
|
289
285
|
"""
|
|
290
286
|
if not any(ev.lat is None or ev.lon is None for ev in catalog):
|
|
291
287
|
return
|
|
@@ -4,29 +4,25 @@
|
|
|
4
4
|
Print the event catalog to screen.
|
|
5
5
|
|
|
6
6
|
:copyright:
|
|
7
|
-
2021-
|
|
7
|
+
2021-2026 Claudio Satriano <satriano@ipgp.fr>
|
|
8
8
|
:license:
|
|
9
9
|
GNU General Public License v3.0 or later
|
|
10
10
|
(https://www.gnu.org/licenses/gpl-3.0-standalone.html)
|
|
11
11
|
"""
|
|
12
12
|
import logging
|
|
13
|
+
from ..config import rq_exit, generic_printer
|
|
13
14
|
from .catalog import read_stored_catalog
|
|
14
|
-
from ..config.generic_printer import generic_printer
|
|
15
|
-
from ..config.rq_setup import rq_exit
|
|
16
15
|
logger = logging.getLogger(__name__.rsplit('.', maxsplit=1)[-1])
|
|
17
16
|
|
|
18
17
|
|
|
19
|
-
def print_catalog(
|
|
18
|
+
def print_catalog():
|
|
20
19
|
"""
|
|
21
20
|
Print the event catalog to screen.
|
|
22
|
-
|
|
23
|
-
:param config: Configuration object.
|
|
24
|
-
:type config: config.Config
|
|
25
21
|
"""
|
|
26
22
|
try:
|
|
27
|
-
catalog = read_stored_catalog(
|
|
28
|
-
except (ValueError, FileNotFoundError) as
|
|
29
|
-
logger.error(
|
|
23
|
+
catalog = read_stored_catalog()
|
|
24
|
+
except (ValueError, FileNotFoundError) as msg:
|
|
25
|
+
logger.error(msg)
|
|
30
26
|
rq_exit(1)
|
|
31
27
|
|
|
32
28
|
headers_fmt = [
|
|
@@ -50,4 +46,4 @@ def print_catalog(config):
|
|
|
50
46
|
]
|
|
51
47
|
for ev in catalog
|
|
52
48
|
]
|
|
53
|
-
generic_printer(
|
|
49
|
+
generic_printer(rows, headers_fmt)
|