gmprocess 2.3.0__tar.gz → 2.4.0__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.
Files changed (250) hide show
  1. {gmprocess-2.3.0 → gmprocess-2.4.0}/CHANGELOG.md +23 -8
  2. {gmprocess-2.3.0 → gmprocess-2.4.0}/CONTRIBUTING.md +4 -4
  3. {gmprocess-2.3.0 → gmprocess-2.4.0}/PKG-INFO +23 -10
  4. gmprocess-2.4.0/README.md +54 -0
  5. {gmprocess-2.3.0 → gmprocess-2.4.0}/code.json +41 -0
  6. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/apps/gmrecords.py +1 -1
  7. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/cwa_gather.py +3 -1
  8. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/stationstream.py +24 -20
  9. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/stationtrace.py +34 -19
  10. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/streamcollection.py +13 -27
  11. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_production.yml +16 -9
  12. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_production_v1.yml +3 -3
  13. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_test.yml +5 -5
  14. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_test_download.yml +2 -2
  15. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/stream_workspace.py +13 -9
  16. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/waveform_metrics_xml.py +6 -3
  17. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/core.py +72 -22
  18. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/cosmos_writer.py +190 -88
  19. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/dmg/core.py +3 -3
  20. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/read_directory.py +11 -2
  21. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/smc/core.py +1 -1
  22. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/containers.py +2 -0
  23. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/oscillator.py +2 -2
  24. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/reduce.py +7 -12
  25. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/station_metric.py +1 -1
  26. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/station_metric_collection.py +1 -1
  27. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/transform.py +74 -34
  28. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_calculator.py +3 -2
  29. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_collection.py +16 -5
  30. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_list.py +1 -1
  31. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_type.py +11 -11
  32. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/base.py +2 -2
  33. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/processing_steps.py +1 -1
  34. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/config.py +5 -0
  35. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/config_versioning.py +12 -0
  36. gmprocess-2.4.0/src/gmprocess/utils/memory.py +32 -0
  37. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/tests_utils.py +1 -1
  38. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/adjust_highpass.py +1 -1
  39. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/adjust_highpass_ridder.py +20 -2
  40. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/clipping_ann.py +1 -1
  41. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/jerk.py +1 -1
  42. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/max_amp.py +1 -1
  43. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/ping.py +2 -2
  44. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/std_dev.py +1 -1
  45. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/corner_frequencies.py +5 -7
  46. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/detrend.py +1 -1
  47. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/filtering.py +5 -5
  48. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/instrument_response.py +5 -4
  49. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/nn_quality_assurance.py +6 -6
  50. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/phase.py +2 -2
  51. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/prism_adaptive_baseline.py +2 -2
  52. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/processing.py +2 -2
  53. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/sanity_checks.py +1 -1
  54. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/snr.py +6 -6
  55. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/spectrum.py +9 -9
  56. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/windows.py +120 -49
  57. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/zero_pad.py +1 -1
  58. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/PKG-INFO +23 -10
  59. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/SOURCES.txt +1 -0
  60. gmprocess-2.3.0/README.md +0 -42
  61. {gmprocess-2.3.0 → gmprocess-2.4.0}/.coveragerc +0 -0
  62. {gmprocess-2.3.0 → gmprocess-2.4.0}/.gitignore +0 -0
  63. {gmprocess-2.3.0 → gmprocess-2.4.0}/.gitlab-ci.yml +0 -0
  64. {gmprocess-2.3.0 → gmprocess-2.4.0}/CODE_OF_CONDUCT.md +0 -0
  65. {gmprocess-2.3.0 → gmprocess-2.4.0}/DISCLAIMER.md +0 -0
  66. {gmprocess-2.3.0 → gmprocess-2.4.0}/LICENSE.md +0 -0
  67. {gmprocess-2.3.0 → gmprocess-2.4.0}/MANIFEST.in +0 -0
  68. {gmprocess-2.3.0 → gmprocess-2.4.0}/pyproject.toml +0 -0
  69. {gmprocess-2.3.0 → gmprocess-2.4.0}/pytest.ini +0 -0
  70. {gmprocess-2.3.0 → gmprocess-2.4.0}/setup.cfg +0 -0
  71. {gmprocess-2.3.0 → gmprocess-2.4.0}/setup.py +0 -0
  72. {gmprocess-2.3.0 → gmprocess-2.4.0}/setup_env.sh +0 -0
  73. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/__init__.py +0 -0
  74. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/apps/__init__.py +0 -0
  75. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/__init__.py +0 -0
  76. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/bundle_datarelease.py +0 -0
  77. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/fetch_orfeus.py +0 -0
  78. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/fix_inventory.py +0 -0
  79. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmconvert.py +0 -0
  80. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gminfo.py +0 -0
  81. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmprocess_config.py +0 -0
  82. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmrecords.py +0 -0
  83. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmworkspace.py +0 -0
  84. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/update_event_json.sh +0 -0
  85. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/__init__.py +0 -0
  86. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/provenance.py +0 -0
  87. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/scalar_event.py +0 -0
  88. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/streamarray.py +0 -0
  89. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/CESMD_NGA_ids.csv +0 -0
  90. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/__init__.py +0 -0
  91. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/cosmos_table10.xls +0 -0
  92. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/cosmos_table4.xls +0 -0
  93. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/ci38457511/raw/CICCC.RAW +0 -0
  94. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/ci38457511/raw/CICLC.v1 +0 -0
  95. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/ci38457511/raw/CITOW2.RAW +0 -0
  96. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/nc72282711/workspace.h5 +0 -0
  97. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/fdsn_codes.csv +0 -0
  98. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/lme/SA_rotd50.0_2020.03.31.csv +0 -0
  99. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/modules.yml +0 -0
  100. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nga_w2_selected.csv +0 -0
  101. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/bias_1.csv +0 -0
  102. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/bias_output.csv +0 -0
  103. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/masterF.txt +0 -0
  104. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/weight_1.csv +0 -0
  105. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/weight_output.csv +0 -0
  106. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/M.csv +0 -0
  107. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/bias_1.csv +0 -0
  108. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/bias_2.csv +0 -0
  109. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/bias_output.csv +0 -0
  110. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/final_training.csv +0 -0
  111. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/masterF.txt +0 -0
  112. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/model_3.txt +0 -0
  113. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/model_5.txt +0 -0
  114. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/mu_sigma.csv +0 -0
  115. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/weight_1.csv +0 -0
  116. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/weight_2.csv +0 -0
  117. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/weight_output.csv +0 -0
  118. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/M.csv +0 -0
  119. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/bias_1.csv +0 -0
  120. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/bias_2.csv +0 -0
  121. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/bias_output.csv +0 -0
  122. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/final_training.csv +0 -0
  123. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/masterF.txt +0 -0
  124. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/model_0.txt +0 -0
  125. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/mu_sigma.csv +0 -0
  126. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/weight_1.csv +0 -0
  127. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/weight_2.csv +0 -0
  128. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/weight_output.csv +0 -0
  129. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/picker.yml +0 -0
  130. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/station_coordinates.xlsx +0 -0
  131. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/usgs_ids_nga_and_srcmod_cross_reference.xlsx +0 -0
  132. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/__init__.py +0 -0
  133. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/Documentation.md +0 -0
  134. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/GUI_human_review.ipynb +0 -0
  135. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/HumanReviewGUI.py +0 -0
  136. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/__init__.py +0 -0
  137. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/__init__.py +0 -0
  138. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/__init__.py +0 -0
  139. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/base_metrics_xml.py +0 -0
  140. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/core.py +0 -0
  141. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/flatfile.py +0 -0
  142. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/flatfile_constants.py +0 -0
  143. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/path_utils.py +0 -0
  144. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/rupture.py +0 -0
  145. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/station_metrics_xml.py +0 -0
  146. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/utils.py +0 -0
  147. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/workspace_constants.py +0 -0
  148. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/bhrc/__init__.py +0 -0
  149. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/bhrc/core.py +0 -0
  150. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/__init__.py +0 -0
  151. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/cesmd_fetcher.py +0 -0
  152. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/cesmd_search.py +0 -0
  153. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/data_structures.py +0 -0
  154. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cwb/__init__.py +0 -0
  155. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cwb/core.py +0 -0
  156. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/dmg/__init__.py +0 -0
  157. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/dynamic_search_parameters.py +0 -0
  158. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/esm/__init__.py +0 -0
  159. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/esm/core.py +0 -0
  160. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/fetcher.py +0 -0
  161. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/geonet/__init__.py +0 -0
  162. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/geonet/core.py +0 -0
  163. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/global_fetcher.py +0 -0
  164. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/knet/__init__.py +0 -0
  165. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/knet/core.py +0 -0
  166. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/knet/knet_fetcher.py +0 -0
  167. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/nga.py +0 -0
  168. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/nsmn/__init__.py +0 -0
  169. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/nsmn/core.py +0 -0
  170. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/obspy/__init__.py +0 -0
  171. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/obspy/core.py +0 -0
  172. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/obspy/fdsn_fetcher.py +0 -0
  173. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/read.py +0 -0
  174. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/renadic/__init__.py +0 -0
  175. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/renadic/core.py +0 -0
  176. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/report.py +0 -0
  177. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/seedname.py +0 -0
  178. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/smc/__init__.py +0 -0
  179. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/unam/__init__.py +0 -0
  180. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/unam/core.py +0 -0
  181. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/usc/__init__.py +0 -0
  182. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/usc/core.py +0 -0
  183. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/utils.py +0 -0
  184. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/__init__.py +0 -0
  185. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/combine.py +0 -0
  186. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/metric_collection_base.py +0 -0
  187. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/rotate.py +0 -0
  188. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/utils.py +0 -0
  189. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_calculator_component_base.py +0 -0
  190. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_component.py +0 -0
  191. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/__init__.py +0 -0
  192. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/arg_dicts.py +0 -0
  193. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/assemble.py +0 -0
  194. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/autoprocess.py +0 -0
  195. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/autoshakemap.py +0 -0
  196. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/clean.py +0 -0
  197. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/compute_station_metrics.py +0 -0
  198. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/compute_waveform_metrics.py +0 -0
  199. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/download.py +0 -0
  200. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_cosmos.py +0 -0
  201. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_failure_tables.py +0 -0
  202. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_gmpacket.py +0 -0
  203. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_metric_tables.py +0 -0
  204. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_provenance_tables.py +0 -0
  205. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/generate_regression_plot.py +0 -0
  206. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/generate_report.py +0 -0
  207. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/generate_station_maps.py +0 -0
  208. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/import_data.py +0 -0
  209. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/init.py +0 -0
  210. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/lazy_loader.py +0 -0
  211. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/process_waveforms.py +0 -0
  212. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/projects.py +0 -0
  213. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/__init__.py +0 -0
  214. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/args.py +0 -0
  215. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/assemble_utils.py +0 -0
  216. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/constants.py +0 -0
  217. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/download_utils.py +0 -0
  218. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/export_gmpacket_utils.py +0 -0
  219. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/ground_motion_models.py +0 -0
  220. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/logging.py +0 -0
  221. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/misc.py +0 -0
  222. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/misc_plots.py +0 -0
  223. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/prompt.py +0 -0
  224. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/report_utils.py +0 -0
  225. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/rupture_utils.py +0 -0
  226. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/strec.py +0 -0
  227. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/summary_plots.py +0 -0
  228. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/tables.py +0 -0
  229. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/__init__.py +0 -0
  230. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/baseline_correction.py +0 -0
  231. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/clip_detection.py +0 -0
  232. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/clipping_check.py +0 -0
  233. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/histogram.py +0 -0
  234. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/convert_units.py +0 -0
  235. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/fft.py +0 -0
  236. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/integrate.py +0 -0
  237. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/pretesting.py +0 -0
  238. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/processing_step.py +0 -0
  239. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/resample.py +0 -0
  240. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/taper.py +0 -0
  241. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/zero_crossings.py +0 -0
  242. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/dependency_links.txt +0 -0
  243. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/entry_points.txt +0 -0
  244. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/requires.txt +0 -0
  245. {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/top_level.txt +0 -0
  246. {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/README.md +0 -0
  247. {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/get_all_waveforms.m +0 -0
  248. {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/get_events.m +0 -0
  249. {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/get_waveform_metrics.m +0 -0
  250. {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/waveform_plot.png +0 -0
@@ -1,13 +1,28 @@
1
1
  ## main
2
2
 
3
+ ## 2.4.0 / 2025-04-04
4
+
5
+ - Enhancements
6
+ - Store only the peak value instead of the whole trace for waveform_metrics, resulting in significantly less memory usage.
7
+ - Use P phase pickers within time window around P phase travel time to set split time between noise (pre-event window) and signal (event window). Update the `pickers` section of the configuration file to include relevant parameters.
8
+ - COSMOS v0 writer incorporates sensitivity from StationXML stages in real #22 and real #42 headers
9
+ - Support FAS metric for individual channel components (this could be classified as a bugfix).
10
+ - Add helper functions to facilitate developers tracking memory usage with `tracemalloc`.
11
+ - Bugfix
12
+ - Fix error with zeropad method using 'fhp' to extracts filter order
13
+ - Fix cosmos v0 writer header failing to write sensitivities due to if statement testing 'trace.stats.standard' instead of 'trace.stats'
14
+ - Set self.output_units in instrument_response.RemoveResponse._remove_sensivitiy() to "ACC" (was not set).
15
+ - Get structure type from correct field in DMG format.
16
+ - Fix two calls to `numpy.mean()` to avoid warnings about zero length arrays.
17
+ - Fixed error in parsing units from COSMOS format.
3
18
 
4
19
  ## 2.3.0 / 2025-01-23
5
20
 
6
21
  - Enhancements
7
22
  - Substantial changes to the default processing steps.
8
- - Add support for psudo-response spectra (PSA and PSV) and change default metrics to use PSA rather than SA.
9
- - Allow for user to set a different query window duration for different tectonic envirnments.
10
- - Increase default query window duraiton.
23
+ - Add support for psuedo-response spectra (PSA and PSV) and change default metrics to use PSA rather than SA.
24
+ - Allow for user to set a different query window duration for different tectonic environments.
25
+ - Increase default query window duration.
11
26
  - Add a new "source_path" method to compute the signal end that uses 1/fc as the source duration, which is then added to a path duration that is parameterized with coefficients for an intercept and distance term.
12
27
  - Exclude network 7D, which is for ocean bottom stations.
13
28
  - Apply clipping check to strong motion instruments. In the past, we thought it was safe to assume strong motion instruments did not clip but we have found exceptions to this.
@@ -57,7 +72,7 @@
57
72
  ## 2.1.2 / 2024-11-14
58
73
  - Enhancements
59
74
  - Station distance (epicentral distance) added to the reports
60
- - Add support velocity and dispacement COSMOS and DMG files
75
+ - Add support velocity and displacement COSMOS and DMG files
61
76
  - More graceful exiting when bad eventid is inputted to `download`
62
77
  - Allow `reports` to continue processing when an event directory is empty (no data)
63
78
  - Update default config to use the Ramos-Sepulveda et al. (2023) high-pass corner selection method, and increase the p-wave shift to -2 sec from -1 sec.
@@ -93,7 +108,7 @@
93
108
  - Updated line styles of annotation lines in SNR plots.
94
109
  - Remove the `export_shakemap` subcommand.
95
110
  - Default config updates
96
- - Change KO smoothing paramter to 188.5.
111
+ - Change KO smoothing parameter to 188.5.
97
112
  - Add arias intensity.
98
113
  - Lower pga threshold on distance search criteria.
99
114
  - Update release instructions in CONTRIBUTING.md.
@@ -120,7 +135,7 @@
120
135
  - Other
121
136
  - Turned off automatic generation of moveout plot since it isn't getting used.
122
137
  - Renamed src/gmprocess/utils/test_utils.py to src/gmprocess/utils/test_utils.py to avoid it being detected as a unit test module.
123
- - Decrease precision in fetcher bounds and fix Geonet bounds to include negaive longitudes.
138
+ - Decrease precision in fetcher bounds and fix Geonet bounds to include negative longitudes.
124
139
  - Move the "config" subcommand to be a stand-alone command line program called "gmprocess_config".
125
140
  - Removed "list_metrics" command.
126
141
  - Removed cap on python version, increased minimum version to 3.9
@@ -168,7 +183,7 @@
168
183
  - Added station metric units to constants.
169
184
  - Bugfixes
170
185
  - Resolve key error that was preventing writing of metric tables when Arias Intensity was requested.
171
- - Resolve bug that occurs when multiple channels/stations are present in the invetory when trying to retrieve the sampling rate for the metric table.
186
+ - Resolve bug that occurs when multiple channels/stations are present in the inventory when trying to retrieve the sampling rate for the metric table.
172
187
 
173
188
  ## 1.2.8 / 2023-08-21
174
189
 
@@ -296,7 +311,7 @@
296
311
  - More gracefully handle cases where workspace file does not exist but is expected.
297
312
  - Add label arg to gmconvert.
298
313
  - Make colocated selection optional.
299
- - Replace stastic map with interactive HTML map and add to CLI tutorial in documentation.
314
+ - Replace statistic map with interactive HTML map and add to CLI tutorial in documentation.
300
315
  - Remove cartopy dependency.
301
316
  - Get scnl from COSMOS comments.
302
317
  - Add freq differentiation option.
@@ -47,7 +47,7 @@ DOCS: [one line description]
47
47
  ```
48
48
 
49
49
  We use the set of commit types from the [angular][9] project:
50
- * **BUILD**: Changes that affect the build system or external dependencies (e.g., pyrpoject.toml)
50
+ * **BUILD**: Changes that affect the build system or external dependencies (e.g., pyproject.toml)
51
51
  * **CI**: Changes to our CI configuration files and scripts (e.g., .gitlab-ci.yml)
52
52
  * **DOCS**: Documentation only changes
53
53
  * **FEAT**: A new feature
@@ -76,7 +76,7 @@ Common reasons to rebase include:
76
76
  ## Releases
77
77
 
78
78
  1. Create a release candidate branch with a name related to the release version like `v1.2.1.rc0`.
79
- 2. Update `code.json`, this is now automated with the `esi-releases` pacakge. For example, use the following command to increase the minor version number (options are "major", "minor", and "patch"):
79
+ 2. Update `code.json`, this is now automated with the `esi-releases` package. For example, use the following command to increase the minor version number (options are "major", "minor", and "patch"):
80
80
  ```
81
81
  releases minor
82
82
  ```
@@ -95,7 +95,7 @@ Common reasons to rebase include:
95
95
  - This git push command is what triggers the "release" pipeline that includes the test, build, and deploy stages.
96
96
  - *Note that we cannot have a hyphen in the tag name.*
97
97
  - Also, if we end the tag name with "dev" then it will be build and uploaded to pypi as a pre-release version, which means that it will never be pip installed unless the user specifies the exact version of the pre-release.
98
- - Maintainence note: the PYPI tokens are maintained in gitlab for the ESI group, under Settings then CI/CD, then Variables. These tokens are associated with the "pager_cicd" pypi service account.
98
+ - Maintenance note: the PYPI tokens are maintained in gitlab for the ESI group, under Settings then CI/CD, then Variables. These tokens are associated with the "pager_cicd" pypi service account.
99
99
  8. Create release from tag in gitlab. Give it a release title like `v1.2.1`.
100
100
  9. Copy/paste the relevant part of the changelog into the "describe this release" section.
101
101
 
@@ -126,7 +126,7 @@ Note that the script includes the follow arguments:
126
126
  Notes:
127
127
  - Never commit the built documentation files.
128
128
  - Remember that the notebooks run gmprocess code when you build the docs,
129
- so please be sure to check that the tutorials ran sucessfully.
129
+ so please be sure to check that the tutorials ran successfully.
130
130
  - The result of the tutorials will depend on your config file options,
131
131
  so I recommend having a project with the default config file set up
132
132
  and use that project when building the docs.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: gmprocess
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: USGS Automated Ground Motion Processing Software
5
5
  Author-email: Eric Thompson <emthompsone@usgs.gov>, Mike Hearne <mhearne@usgs.gov>, Brad Aagaard <baagaard@usgs.gov>, Bruce Worden <cbworden@contractor.usgs.gov>, John Rekoske <jrekoske@ucsd.edu>, Heather Hunsinger <hhunsinger@usgs.gov>, Gabe Ferragut <gferragut@usgs.gov>
6
6
  License: License
@@ -109,6 +109,7 @@ Provides-Extra: build
109
109
  Requires-Dist: build; extra == "build"
110
110
  Requires-Dist: twine; extra == "build"
111
111
  Requires-Dist: check-wheel-contents; extra == "build"
112
+ Dynamic: license-file
112
113
 
113
114
  # Introduction
114
115
  This is a project designed to provide a number of functions related to parsing and processing earthquake ground motion data, building on top of the [ObsPy](https://github.com/obspy/obspy/wiki) library.
@@ -132,22 +133,34 @@ This will require that you create an account at code.usgs.gov, which is a more i
132
133
  # Suggested Citation
133
134
  If you wish to cite this software please cite:
134
135
 
135
- - Thompson, E.M., M. Hearne, B.T. Aagaard, J.M. Rekoske, C.B. Worden, M.P. Moschetti, H.E. Hunsinger, G.C. Ferragut, G.A. Parker, J.A. Smith, K.K. Smith, and A.R. Kottke (2024). USGS Automated Ground Motion Processing Software Version 2, U.S. Geological Survey software release. [https://doi.org/10.5066/P13HMKFJ](https://doi.org/10.5066/P13HMKFJ)
136
-
136
+ - Thompson, E.M., M. Hearne, B.T. Aagaard, J.M. Rekoske, C.B. Worden, M.P. Moschetti, H.E. Hunsinger, G.C. Ferragut, G.A. Parker, J.A. Smith, K.K. Smith, and A.R. Kottke (2024). USGS Automated Ground Motion Processing Software Version 2, U.S. Geological Survey software release, doi: [10.5066/P13HMKFJ](https://doi.org/10.5066/P13HMKFJ).
137
+
138
+ - Thompson, E.M., M. Hearne, B.T. Aagaard, J.M. Rekoske, C.B. Worden, M.P. Moschetti, H.E. Hunsinger, G.C. Ferragut, G.A. Parker, J.A. Smith, Smith, K.K., and A.R. Kottke (2025). Automated, Near Real‐Time Ground‐Motion Processing at the US Geological Survey. _Seismological Research Letters_, 96(1), pp.538-553, doi: [10.1785/0220240021](https://doi.org/10.1785/0220240021).
139
+
137
140
  # Journal Articles
138
141
  The list below is a subset of articles that made use of this software in their study. If you would like to have an article added to this list, please open an issue or email the developers.
139
142
 
140
- - Ahdi, S.K., B.T. Aagaard, M.P. Moschetti, G.A. Parker, O.S. Boyd, W.J. Stephenson (2024). Empirical ground-motion basin response in the California Great Valley, Reno, Nevada, and Portland, Oregon. _Earthquake Spectra_, 40(2):1099-1131. [https://doi.org/10.1177/87552930241237250](https://doi.org/10.1177/87552930241237250)
143
+ - Ahdi, S.K., B.T. Aagaard, M.P. Moschetti, G.A. Parker, O.S. Boyd, and W.J. Stephenson (2024). Empirical ground-motion basin response in the California Great Valley, Reno, Nevada, and Portland, Oregon. _Earthquake Spectra_, 40(2): 1099-1131, doi: [10.1177/87552930241237250](https://doi.org/10.1177/87552930241237250).
144
+
145
+ - Boyd OS, D. Churchwell, M.P. Moschetti, et al. (2024). Sediment thickness map of United States Atlantic and Gulf Coastal Plain Strata, and their influence on earthquake ground motions. _Earthquake Spectra_, 40(1): 89-112, doi: [10.1177/87552930231204880](https://doi.org/10.1177/87552930231204880).
146
+
147
+ - Chatterjee, A., D.T. Trugman, G. Hirth, J. Lee, and V.C. Tsai (2024). High‐frequency ground motions of earthquakes correlate with fault network complexity. _Geophysical Research Letters_, 51(12), doi: [10.1029/2024GL109418](https://doi.org/10.1029/2024GL109418).
148
+
149
+ - Hirakawa, E., G.A. Parker, A. Baltay, and T. Hanks (2023). Rupture directivity of the 25 October 2022 Mw 5.1 Alum Rock earthquake. _The Seismic Record_, 3(2): 144-155, doi: [10.1785/0320230013](https://doi.org/10.1785/0320230013).
150
+
151
+ - Ji, C., A. Cabas, A. Kottke, M. Pilz, J. Macedo, and C. Liu (2023). A DesignSafe earthquake ground motion database for California and surrounding regions. _Earthquake Spectra_, 39(1): 702–721, doi: [10.1177/87552930221141108](https://doi.org/10.1177/87552930221141108).
152
+
153
+ - Li, M., E.M. Rathje, J.P. Stewart, M.E. Ramos-Sepulveda, and Y.M. Hashash (2025). Regional adjustment to the NGA-East GMM for Texas, Oklahoma, and Kansas. _Earthquake Spectra_, doi: [10.1177/87552930251313817](https://doi.org/10.1177/87552930251313817).
141
154
 
142
- - Boyd OS, D. Churchwell, M.P. Moschetti, et al. (2024). Sediment thickness map of United States Atlantic and Gulf Coastal Plain Strata, and their influence on earthquake ground motions. _Earthquake Spectra_, 40(1):89-112. [https://doi.org/10.1177/87552930231204880](https://doi.org/10.1177/87552930231204880)
155
+ - Mohammed, S., R. Shams, C.C. Nweke, T.E. Buckreis, M.D. Kohler, Y. Bozorgnia, and J.P. Stewart (2024). Usability of Community Seismic Network recordings for ground-motion modeling. _Earthquake Spectra_, 40(4): 2598-2622, doi: [10.1177/87552930241267749](https://doi.org/10.1177/87552930241267749).
143
156
 
144
- - Ji, C., A. Cabas, A. Kottke, M. Pilz, J. Macedo, C. Liu (2023). A DesignSafe earthquake ground motion database for California and surrounding regions. _Earthquake Spectra_, 39 (1): 702–721. [https://doi.org/10.1177/87552930221141108](https://doi.org/10.1177/87552930221141108)
157
+ - Moschetti M.P., E.M. Thompson, J.M. Rekoske, M. Hearne, P. Powers, D. McNamara, and C. Tape (2019). Ground‐Motion Amplification in Cook Inlet Region, Alaska, from Intermediate‐Depth Earthquakes, Including the 2018 7.1 Anchorage Earthquake. _Seismological Research Letters_, 91(1): 142–152, doi: [10.1785/0220190179](https://doi.org/10.1785/0220190179).
145
158
 
146
- - Moschetti M.P., E.M. Thompson, J.M. Rekoske, M. Hearne, P. Powers, D. McNamara, C. Tape (2019). Ground‐Motion Amplification in Cook Inlet Region, Alaska, from Intermediate‐Depth Earthquakes, Including the 2018 7.1 Anchorage Earthquake. _Seismological Research Letters_, 91 (1): 142–152. [https://doi.org/10.1785/0220190179](https://doi.org/10.1785/0220190179)
159
+ - Moschetti, M.P., B.T. Aagaard, S.K. Ahdi, J. Altekruse, O.S. Boyd, A.D. Frankel, J. Herrick, M.D. Petersen, P.M. Powers, S. Rezaeian, and A.M. Shumway (2024). The 2023 US national seismic hazard model: Ground-motion characterization for the conterminous United States. _Earthquake Spectra_, 40(2): 1158-1190, doi: [10.1177/87552930231223995](https://doi.org/10.1177/87552930231223995).
147
160
 
148
- - Parker G, A. Baltay (2022). Empirical Map‐Based Nonergodic Models of Site Response in the Greater Los Angeles Area. _Bulletin of the Seismological Society of America_, 112 (3): 1607–1629. [https://doi.org/10.1785/0120210175](https://doi.org/10.1785/0120210175)
161
+ - Parker, G.A., and A.S. Baltay (2022). Empirical Map‐Based Nonergodic Models of Site Response in the Greater Los Angeles Area. _Bulletin of the Seismological Society of America_, 112(3): 1607–1629, doi: [10.1785/0120210175](https://doi.org/10.1785/0120210175)
149
162
 
150
- - Rekoske J.M., E.M. Thompson, M.P. Moschetti, M. Hearne, B.T. Aagaard, G. Parker (2020). The 2019 Ridgecrest, California, Earthquake Sequence Ground Motions: Processed Records and Derived Intensity Metrics. _Seismological Research Letters_, 91 (4): 2010–2023. [https://doi.org/10.1785/0220190292](https://doi.org/10.1785/0220190292)
163
+ - Rekoske J.M., E.M. Thompson, M.P. Moschetti, M. Hearne, B.T. Aagaard, and G.A. Parker (2020). The 2019 Ridgecrest, California, Earthquake Sequence Ground Motions: Processed Records and Derived Intensity Metrics. _Seismological Research Letters_, 91(4): 2010–2023, doi: [10.1785/0220190292](https://doi.org/10.1785/0220190292)
151
164
 
152
165
  # Disclaimer
153
166
 
@@ -0,0 +1,54 @@
1
+ # Introduction
2
+ This is a project designed to provide a number of functions related to parsing and processing earthquake ground motion data, building on top of the [ObsPy](https://github.com/obspy/obspy/wiki) library.
3
+ Most of the extensions that we provide are to handle strong motion data and related issues.
4
+
5
+
6
+ # Documentation
7
+ - Please note, we are in the process of improving the documentation and that there are some incomplete sections.
8
+ - The full documentation can be viewed locally by running the `docs/makedocs.sh` script.
9
+ - The documentation is also available [here](https://ghsc.code-pages.usgs.gov/esi/groundmotion-processing/).
10
+ - The MATLAB functions included in the `tools/matlab` directory include a short [tutorial](tools/matlab/readme.md)
11
+
12
+ # Getting Help
13
+ The developers can be reached at [gmprocess@usgs.gov](mailto:gmprocess@usgs.gov).
14
+
15
+ If you would like to post an issue to ask a question, request a new feature, or report a bug, you can do so at the [github mirror](https://github.com/DOI-USGS/ghsc-esi-groundmotion-processing) of this repository.
16
+
17
+ If you would like to contribute merge requests to this repository, please let us know and we can add you as a collaborator.
18
+ This will require that you create an account at code.usgs.gov, which is a more involved process than creating a personal account at gitub.com and posting to the issues on the github mirror.
19
+
20
+ # Suggested Citation
21
+ If you wish to cite this software please cite:
22
+
23
+ - Thompson, E.M., M. Hearne, B.T. Aagaard, J.M. Rekoske, C.B. Worden, M.P. Moschetti, H.E. Hunsinger, G.C. Ferragut, G.A. Parker, J.A. Smith, K.K. Smith, and A.R. Kottke (2024). USGS Automated Ground Motion Processing Software Version 2, U.S. Geological Survey software release, doi: [10.5066/P13HMKFJ](https://doi.org/10.5066/P13HMKFJ).
24
+
25
+ - Thompson, E.M., M. Hearne, B.T. Aagaard, J.M. Rekoske, C.B. Worden, M.P. Moschetti, H.E. Hunsinger, G.C. Ferragut, G.A. Parker, J.A. Smith, Smith, K.K., and A.R. Kottke (2025). Automated, Near Real‐Time Ground‐Motion Processing at the US Geological Survey. _Seismological Research Letters_, 96(1), pp.538-553, doi: [10.1785/0220240021](https://doi.org/10.1785/0220240021).
26
+
27
+ # Journal Articles
28
+ The list below is a subset of articles that made use of this software in their study. If you would like to have an article added to this list, please open an issue or email the developers.
29
+
30
+ - Ahdi, S.K., B.T. Aagaard, M.P. Moschetti, G.A. Parker, O.S. Boyd, and W.J. Stephenson (2024). Empirical ground-motion basin response in the California Great Valley, Reno, Nevada, and Portland, Oregon. _Earthquake Spectra_, 40(2): 1099-1131, doi: [10.1177/87552930241237250](https://doi.org/10.1177/87552930241237250).
31
+
32
+ - Boyd OS, D. Churchwell, M.P. Moschetti, et al. (2024). Sediment thickness map of United States Atlantic and Gulf Coastal Plain Strata, and their influence on earthquake ground motions. _Earthquake Spectra_, 40(1): 89-112, doi: [10.1177/87552930231204880](https://doi.org/10.1177/87552930231204880).
33
+
34
+ - Chatterjee, A., D.T. Trugman, G. Hirth, J. Lee, and V.C. Tsai (2024). High‐frequency ground motions of earthquakes correlate with fault network complexity. _Geophysical Research Letters_, 51(12), doi: [10.1029/2024GL109418](https://doi.org/10.1029/2024GL109418).
35
+
36
+ - Hirakawa, E., G.A. Parker, A. Baltay, and T. Hanks (2023). Rupture directivity of the 25 October 2022 Mw 5.1 Alum Rock earthquake. _The Seismic Record_, 3(2): 144-155, doi: [10.1785/0320230013](https://doi.org/10.1785/0320230013).
37
+
38
+ - Ji, C., A. Cabas, A. Kottke, M. Pilz, J. Macedo, and C. Liu (2023). A DesignSafe earthquake ground motion database for California and surrounding regions. _Earthquake Spectra_, 39(1): 702–721, doi: [10.1177/87552930221141108](https://doi.org/10.1177/87552930221141108).
39
+
40
+ - Li, M., E.M. Rathje, J.P. Stewart, M.E. Ramos-Sepulveda, and Y.M. Hashash (2025). Regional adjustment to the NGA-East GMM for Texas, Oklahoma, and Kansas. _Earthquake Spectra_, doi: [10.1177/87552930251313817](https://doi.org/10.1177/87552930251313817).
41
+
42
+ - Mohammed, S., R. Shams, C.C. Nweke, T.E. Buckreis, M.D. Kohler, Y. Bozorgnia, and J.P. Stewart (2024). Usability of Community Seismic Network recordings for ground-motion modeling. _Earthquake Spectra_, 40(4): 2598-2622, doi: [10.1177/87552930241267749](https://doi.org/10.1177/87552930241267749).
43
+
44
+ - Moschetti M.P., E.M. Thompson, J.M. Rekoske, M. Hearne, P. Powers, D. McNamara, and C. Tape (2019). Ground‐Motion Amplification in Cook Inlet Region, Alaska, from Intermediate‐Depth Earthquakes, Including the 2018 7.1 Anchorage Earthquake. _Seismological Research Letters_, 91(1): 142–152, doi: [10.1785/0220190179](https://doi.org/10.1785/0220190179).
45
+
46
+ - Moschetti, M.P., B.T. Aagaard, S.K. Ahdi, J. Altekruse, O.S. Boyd, A.D. Frankel, J. Herrick, M.D. Petersen, P.M. Powers, S. Rezaeian, and A.M. Shumway (2024). The 2023 US national seismic hazard model: Ground-motion characterization for the conterminous United States. _Earthquake Spectra_, 40(2): 1158-1190, doi: [10.1177/87552930231223995](https://doi.org/10.1177/87552930231223995).
47
+
48
+ - Parker, G.A., and A.S. Baltay (2022). Empirical Map‐Based Nonergodic Models of Site Response in the Greater Los Angeles Area. _Bulletin of the Seismological Society of America_, 112(3): 1607–1629, doi: [10.1785/0120210175](https://doi.org/10.1785/0120210175)
49
+
50
+ - Rekoske J.M., E.M. Thompson, M.P. Moschetti, M. Hearne, B.T. Aagaard, and G.A. Parker (2020). The 2019 Ridgecrest, California, Earthquake Sequence Ground Motions: Processed Records and Derived Intensity Metrics. _Seismological Research Letters_, 91(4): 2010–2023, doi: [10.1785/0220190292](https://doi.org/10.1785/0220190292)
51
+
52
+ # Disclaimer
53
+
54
+ Any use of trade, firm, or product names is for descriptive purposes only and does not imply endorsement by the U.S. Government.
@@ -1,4 +1,45 @@
1
1
  [
2
+ {
3
+ "name": "groundmotion-processing",
4
+ "description": "Read and process ground motion waveform data",
5
+ "version": "v2.4.0",
6
+ "status": "Production",
7
+ "organization": "U.S. Geological Survey",
8
+ "vcs": "git",
9
+ "repositoryURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing.git",
10
+ "homepageURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing",
11
+ "downloadURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/archive/v2.4.0/groundmotion-processing-v2.4.0.zip",
12
+ "disclaimerURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/raw/v2.4.0/DISCLAIMER.md",
13
+ "permissions": {
14
+ "licenses": [
15
+ {
16
+ "name": "Public Domain, CC0-1.0",
17
+ "URL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/raw/v2.4.0/LICENSE.md"
18
+ }
19
+ ],
20
+ "usageType": "openSource",
21
+ "exemptionText": null
22
+ },
23
+ "laborHours": 1,
24
+ "languages": [
25
+ "python"
26
+ ],
27
+ "tags": [
28
+ "earthquake",
29
+ "impact",
30
+ "strong motion",
31
+ "amplitudes",
32
+ "ground motion",
33
+ "usg-artificial-intelligence"
34
+ ],
35
+ "contact": {
36
+ "name": "Eric Thompson",
37
+ "email": "emthompson@usgs.gov"
38
+ },
39
+ "date": {
40
+ "metadataLastUpdated": "2025-04-04"
41
+ }
42
+ },
2
43
  {
3
44
  "name": "groundmotion-processing",
4
45
  "description": "Read and process ground motion waveform data",
@@ -357,7 +357,7 @@ class GMrecordsApp(object):
357
357
  "(1) a single column with ComCat event IDs, or "
358
358
  "(2) six columns in which those columns are: "
359
359
  "event_id (string, no spaces), time (any ISO standard for date/time), "
360
- "latitutde (float, decimal degrees), longitude (float, decimal "
360
+ "latitude (float, decimal degrees), longitude (float, decimal "
361
361
  "degrees), depth (float, km), magnitude (float), and magnitude type "
362
362
  "(string)."
363
363
  ),
@@ -111,6 +111,7 @@ class App:
111
111
  msg = "Failed to download STREC results."
112
112
  print(msg)
113
113
 
114
+
114
115
  def cli():
115
116
  """Command line interface to the cwa_gather application."""
116
117
 
@@ -133,7 +134,7 @@ def cli():
133
134
  - For "Channel", choose "HN?" for all strong motion stations.
134
135
  - For "Start Time (UTC)", enter a date before the event of interest.
135
136
  - For "End Time (UTC)", enter a date after the event of interest.
136
- - "Label", doesn't matter becasue they don't use what you put here.
137
+ - "Label", doesn't matter because they don't use what you put here.
137
138
  - Click the "Submit" button, and you should see a "Success!" pop up.
138
139
  - Next will be a screen showing a list of all of your downloads.
139
140
  - Right click on the most recent entry, it will be called "output.stationXML"
@@ -228,5 +229,6 @@ def cli():
228
229
  app = App()
229
230
  app.main(args.event_id, args.datafile, args.metadata)
230
231
 
232
+
231
233
  if __name__ == "__main__":
232
234
  cli()
@@ -103,7 +103,7 @@ class StationStream(Stream):
103
103
  if not isinstance(trace, StationTrace):
104
104
  raise ValueError(
105
105
  "Input Traces to StationStream must be of subtype "
106
- "StationTrace unless an invenotry is also provided."
106
+ "StationTrace unless an inventory is also provided."
107
107
  )
108
108
  else:
109
109
  if not isinstance(trace, StationTrace):
@@ -136,23 +136,27 @@ class StationStream(Stream):
136
136
 
137
137
  # If not, resample
138
138
  if not success:
139
- for tr in self.traces:
140
- tr.interpolate(
141
- sampling_rate=1 / new_delta,
142
- method="lanczos",
143
- starttime=newstart,
144
- npts=new_npts,
145
- a=N_LANCZOS,
146
- )
147
- tr.set_provenance(
148
- "interpolate",
149
- {
150
- "interpolation_method": "lanczos",
151
- "new_number_of_samples": new_npts,
152
- "new_start_time": newstart,
153
- "a": N_LANCZOS,
154
- },
155
- )
139
+ try:
140
+ for tr in self.traces:
141
+ tr.interpolate(
142
+ sampling_rate=1 / new_delta,
143
+ method="lanczos",
144
+ starttime=newstart,
145
+ npts=new_npts,
146
+ a=N_LANCZOS,
147
+ )
148
+ tr.set_provenance(
149
+ "interpolate",
150
+ {
151
+ "interpolation_method": "lanczos",
152
+ "new_number_of_samples": new_npts,
153
+ "new_start_time": newstart,
154
+ "a": N_LANCZOS,
155
+ },
156
+ )
157
+ except BaseException:
158
+ for tr in self.traces:
159
+ tr.fail("Traces within stream are misaligned.")
156
160
  else:
157
161
  # start/end times may be different but within tolerance
158
162
  # to prevent further issues downstream, setting these
@@ -164,7 +168,7 @@ class StationStream(Stream):
164
168
  if not isinstance(trace, StationTrace):
165
169
  raise ValueError(
166
170
  "Input Traces to StationStream must be of subtype "
167
- "StationTrace unless an invenotry is also provided."
171
+ "StationTrace unless an inventory is also provided."
168
172
  )
169
173
  else:
170
174
  if not isinstance(trace, StationTrace):
@@ -273,7 +277,7 @@ class StationStream(Stream):
273
277
  return self.id
274
278
 
275
279
  def get_net_sta(self):
276
- """Get just the network and station compopnent of the ID."""
280
+ """Get just the network and station component of the ID."""
277
281
  return ".".join(self.get_id().split(".")[0:2])
278
282
 
279
283
  def get_net_sta_loc(self):
@@ -192,14 +192,30 @@ class StationTrace(Trace):
192
192
 
193
193
  # Sometimes the channel names do not indicate which one is the
194
194
  # Z channel. If we have vertical_orientation information, then
195
- # let's get that and change the vertical channel to end in Z.
195
+ # let's get that and change the vertical channel to end in Z
196
+ # as long as the channel name does not include the direction (E, N, Z).
197
+ # Some inventory files mistakenly include a vertical orientation for horizontal channels.
196
198
  # NOTE: `vertical_orientation` here is defined as the angle
197
199
  # from horizontal (aka, dip), not inclination.
198
200
  if not np.isnan(header["standard"]["vertical_orientation"]):
199
201
  delta = np.abs(np.abs(header["standard"]["vertical_orientation"]) - 90.0)
200
- is_z = header["channel"].endswith("Z")
201
- if delta < MAX_DIP_OFFSET and not is_z:
202
- header["channel"] = header["channel"][0:-1] + "Z"
202
+ is_horizcomp = header["channel"][-1] in ["E", "N"]
203
+ is_vertcomp = header["channel"][-1] in ["Z"]
204
+ if delta < MAX_DIP_OFFSET:
205
+ trace_id = f"{header['network']}.{header['station']}.{header['location']}.{header['channel']}"
206
+ if is_vertcomp:
207
+ pass
208
+ elif is_horizcomp:
209
+ logging.warning(
210
+ "Found vertical orientation in trace %s, which seems to be a horizontal component. Assuming vertical orientation is incorrect.",
211
+ trace_id,
212
+ )
213
+ else:
214
+ header["channel"] = header["channel"][0:-1] + "Z"
215
+ logging.warning(
216
+ "Found vertical orientation in trace %s. Component direction is unknown from channel name, so renaming channel to vertical component 'Z'.",
217
+ trace_id,
218
+ )
203
219
 
204
220
  super(StationTrace, self).__init__(data=data, header=header)
205
221
  self.provenance = TraceProvenance(self.stats)
@@ -283,6 +299,10 @@ class StationTrace(Trace):
283
299
  """Has this trace passed checks?"""
284
300
  return not self.has_parameter("failure")
285
301
 
302
+ @property
303
+ def is_horizontal(self):
304
+ return "z" not in self.stats.channel.lower()
305
+
286
306
  def validate(self):
287
307
  """Ensure that all required metadata fields have been set.
288
308
 
@@ -480,14 +500,14 @@ class StationTrace(Trace):
480
500
  type (str):
481
501
  Method to use for detrending.
482
502
  """
483
-
484
- self.set_provenance(
485
- "detrend",
486
- {
487
- "detrending_method": type,
488
- },
489
- )
490
- return super().detrend(type=type)
503
+ prov_dict = {"detrending_method": type}
504
+ if type in ["constant", "demean"]:
505
+ prov_dict["value"] = np.mean(self.data)
506
+ self.data = np.array(self.data, dtype=float) - prov_dict["value"]
507
+ else:
508
+ super().detrend(type=type)
509
+ self.set_provenance("detrend", prov_dict)
510
+ return self
491
511
 
492
512
  def trim(
493
513
  self,
@@ -515,7 +535,7 @@ class StationTrace(Trace):
515
535
  fill_value (int, float):
516
536
  Fill value for gaps.
517
537
  suppress_provenance (bool):
518
- Do not put a provenance entry. Useful becasue we need a custom
538
+ Do not put a provenance entry. Useful because we need a custom
519
539
  provenance entry for zero padding, which calls this method.
520
540
  """
521
541
  if not suppress_provenance:
@@ -623,9 +643,8 @@ class StationTrace(Trace):
623
643
  zerophase=False,
624
644
  config=None,
625
645
  frequency_domain=True,
626
- **options,
627
646
  ):
628
- """Overwrite parent function to allow for conf options.
647
+ """Overwrite parent function to allow for configuration options.
629
648
 
630
649
  Args:
631
650
  type (str):
@@ -666,7 +685,6 @@ class StationTrace(Trace):
666
685
  freq=freq,
667
686
  corners=corners,
668
687
  zerophase=zerophase,
669
- **options,
670
688
  )
671
689
 
672
690
  else:
@@ -706,7 +724,6 @@ class StationTrace(Trace):
706
724
  freq=freq,
707
725
  corners=corners,
708
726
  zerophase=zerophase,
709
- **options,
710
727
  )
711
728
 
712
729
  else:
@@ -748,7 +765,6 @@ class StationTrace(Trace):
748
765
  freqmax=freqmax,
749
766
  corners=corners,
750
767
  zerophase=zerophase,
751
- **options,
752
768
  )
753
769
 
754
770
  else:
@@ -790,7 +806,6 @@ class StationTrace(Trace):
790
806
  freqmax=freqmax,
791
807
  corners=corners,
792
808
  zerophase=zerophase,
793
- **options,
794
809
  )
795
810
 
796
811
  else:
@@ -60,7 +60,7 @@ class StreamCollection(StreamArray):
60
60
  List of StationStream objects.
61
61
  drop_non_free (bool):
62
62
  If True, drop non-free-field Streams from the collection.
63
- hande_duplicates (bool):
63
+ handle_duplicates (bool):
64
64
  If True, remove duplicate data from the collection.
65
65
  max_dist_tolerance (float):
66
66
  Maximum distance tolerance for determining whether two streams
@@ -74,7 +74,7 @@ class StreamCollection(StreamArray):
74
74
  which process level is the most preferred (most preferred goes
75
75
  first in the list).
76
76
  format_preference (list):
77
- A list continaing strings of the file source formats (found
77
+ A list containing strings of the file source formats (found
78
78
  in gmprocess.io). Does not need to list all of the formats.
79
79
  Example: ['cosmos', 'dmg'] indicates that cosmos files are
80
80
  preferred over dmg files.
@@ -179,32 +179,19 @@ class StreamCollection(StreamArray):
179
179
  if event.magnitude > m:
180
180
  dist_thresh = d
181
181
 
182
- # Create a list of streams with matching id (combo of net and station).
183
- all_matches = []
184
- match_list = []
185
- for idx1, stream1 in enumerate(self):
186
- cond1 = idx1 in all_matches
187
- cond2 = not stream1.passed
188
- if cond1 or cond2:
182
+ # Create a dict of colocated streams.
183
+ # net_sta -> array of indices for matching stations in stream
184
+ match_list = {}
185
+ for i_st, stream in enumerate(self):
186
+ if not stream.passed:
189
187
  continue
190
- matches = [idx1]
191
- net_sta = stream1.get_net_sta()
192
- for idx2, stream2 in enumerate(self):
193
- cond1 = idx1 != idx2
194
- cond2 = idx1 not in all_matches
195
- cond3 = net_sta == stream2.get_net_sta()
196
- cond4 = stream2.passed
197
- if cond1 and cond2 and cond3 and cond4:
198
- matches.append(idx2)
199
- if len(matches) > 1:
200
- match_list.append(matches)
201
- all_matches.extend(matches)
188
+ net_sta = stream.get_net_sta()
189
+ if not net_sta in match_list:
190
+ match_list[net_sta] = [i_st]
202
191
  else:
203
- if matches[0] not in all_matches:
204
- match_list.append(matches)
205
- all_matches.extend(matches)
192
+ match_list[net_sta].append(i_st)
206
193
 
207
- for group in match_list:
194
+ for group in match_list.values():
208
195
  # Are there colocated instruments for this group?
209
196
  if len(group) > 1:
210
197
  # If so, loop over list of preferred instruments
@@ -433,8 +420,7 @@ class StreamCollection(StreamArray):
433
420
 
434
421
  traces = []
435
422
  for st in self.streams:
436
- for tr in st:
437
- traces.append(tr)
423
+ traces += [tr for tr in st]
438
424
  preferred_traces = []
439
425
 
440
426
  for tr_to_add in traces: