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.
- {gmprocess-2.3.0 → gmprocess-2.4.0}/CHANGELOG.md +23 -8
- {gmprocess-2.3.0 → gmprocess-2.4.0}/CONTRIBUTING.md +4 -4
- {gmprocess-2.3.0 → gmprocess-2.4.0}/PKG-INFO +23 -10
- gmprocess-2.4.0/README.md +54 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/code.json +41 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/apps/gmrecords.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/cwa_gather.py +3 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/stationstream.py +24 -20
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/stationtrace.py +34 -19
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/streamcollection.py +13 -27
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_production.yml +16 -9
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_production_v1.yml +3 -3
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_test.yml +5 -5
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/config_test_download.yml +2 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/stream_workspace.py +13 -9
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/waveform_metrics_xml.py +6 -3
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/core.py +72 -22
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/cosmos_writer.py +190 -88
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/dmg/core.py +3 -3
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/read_directory.py +11 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/smc/core.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/containers.py +2 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/oscillator.py +2 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/reduce.py +7 -12
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/station_metric.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/station_metric_collection.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/transform.py +74 -34
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_calculator.py +3 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_collection.py +16 -5
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_list.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_type.py +11 -11
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/base.py +2 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/processing_steps.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/config.py +5 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/config_versioning.py +12 -0
- gmprocess-2.4.0/src/gmprocess/utils/memory.py +32 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/tests_utils.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/adjust_highpass.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/adjust_highpass_ridder.py +20 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/clipping_ann.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/jerk.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/max_amp.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/ping.py +2 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/std_dev.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/corner_frequencies.py +5 -7
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/detrend.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/filtering.py +5 -5
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/instrument_response.py +5 -4
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/nn_quality_assurance.py +6 -6
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/phase.py +2 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/prism_adaptive_baseline.py +2 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/processing.py +2 -2
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/sanity_checks.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/snr.py +6 -6
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/spectrum.py +9 -9
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/windows.py +120 -49
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/zero_pad.py +1 -1
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/PKG-INFO +23 -10
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/SOURCES.txt +1 -0
- gmprocess-2.3.0/README.md +0 -42
- {gmprocess-2.3.0 → gmprocess-2.4.0}/.coveragerc +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/.gitignore +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/.gitlab-ci.yml +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/CODE_OF_CONDUCT.md +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/DISCLAIMER.md +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/LICENSE.md +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/MANIFEST.in +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/pyproject.toml +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/pytest.ini +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/setup.cfg +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/setup.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/setup_env.sh +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/apps/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/bundle_datarelease.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/fetch_orfeus.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/fix_inventory.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmconvert.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gminfo.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmprocess_config.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmrecords.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/gmworkspace.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/bin/update_event_json.sh +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/provenance.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/scalar_event.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/core/streamarray.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/CESMD_NGA_ids.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/cosmos_table10.xls +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/cosmos_table4.xls +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/ci38457511/raw/CICCC.RAW +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/ci38457511/raw/CICLC.v1 +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/ci38457511/raw/CITOW2.RAW +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/demo/nc72282711/workspace.h5 +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/fdsn_codes.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/lme/SA_rotd50.0_2020.03.31.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/modules.yml +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nga_w2_selected.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/bias_1.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/bias_output.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/masterF.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/weight_1.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_clipping/weight_output.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/M.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/bias_1.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/bias_2.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/bias_output.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/final_training.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/masterF.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/model_3.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/model_5.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/mu_sigma.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/weight_1.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/weight_2.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/Cant/weight_output.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/M.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/bias_1.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/bias_2.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/bias_output.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/final_training.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/masterF.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/model_0.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/mu_sigma.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/weight_1.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/weight_2.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/nn_qa/CantWell/weight_output.csv +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/picker.yml +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/station_coordinates.xlsx +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/data/usgs_ids_nga_and_srcmod_cross_reference.xlsx +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/Documentation.md +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/GUI_human_review.ipynb +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/HumanReviewGUI.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/gui/gui_ucla/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/base_metrics_xml.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/flatfile.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/flatfile_constants.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/path_utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/rupture.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/station_metrics_xml.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/asdf/workspace_constants.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/bhrc/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/bhrc/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/cesmd_fetcher.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/cesmd_search.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cosmos/data_structures.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cwb/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/cwb/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/dmg/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/dynamic_search_parameters.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/esm/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/esm/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/fetcher.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/geonet/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/geonet/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/global_fetcher.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/knet/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/knet/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/knet/knet_fetcher.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/nga.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/nsmn/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/nsmn/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/obspy/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/obspy/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/obspy/fdsn_fetcher.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/read.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/renadic/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/renadic/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/report.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/seedname.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/smc/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/unam/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/unam/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/usc/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/usc/core.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/io/utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/combine.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/metric_collection_base.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/rotate.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_calculator_component_base.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/metrics/waveform_metric_component.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/arg_dicts.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/assemble.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/autoprocess.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/autoshakemap.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/clean.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/compute_station_metrics.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/compute_waveform_metrics.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/download.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_cosmos.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_failure_tables.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_gmpacket.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_metric_tables.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/export_provenance_tables.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/generate_regression_plot.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/generate_report.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/generate_station_maps.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/import_data.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/init.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/lazy_loader.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/process_waveforms.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/subcommands/projects.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/args.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/assemble_utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/constants.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/download_utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/export_gmpacket_utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/ground_motion_models.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/logging.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/misc.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/misc_plots.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/prompt.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/report_utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/rupture_utils.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/strec.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/summary_plots.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/utils/tables.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/__init__.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/baseline_correction.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/clip_detection.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/clipping_check.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/clipping/histogram.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/convert_units.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/fft.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/integrate.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/pretesting.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/processing_step.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/resample.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/taper.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess/waveform_processing/zero_crossings.py +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/dependency_links.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/entry_points.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/requires.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/src/gmprocess.egg-info/top_level.txt +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/README.md +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/get_all_waveforms.m +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/get_events.m +0 -0
- {gmprocess-2.3.0 → gmprocess-2.4.0}/tools/matlab/get_waveform_metrics.m +0 -0
- {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
|
|
9
|
-
- Allow for user to set a different query window duration for different tectonic
|
|
10
|
-
- Increase default query window
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.,
|
|
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`
|
|
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
|
-
-
|
|
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
|
|
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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: gmprocess
|
|
3
|
-
Version: 2.
|
|
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
|
|
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
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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.,
|
|
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
|
|
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
|
|
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
|
-
"
|
|
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
|
|
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
|
|
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
|
-
|
|
140
|
-
tr.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
-
|
|
485
|
-
"
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
)
|
|
490
|
-
return
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
183
|
-
|
|
184
|
-
match_list =
|
|
185
|
-
for
|
|
186
|
-
|
|
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
|
-
|
|
191
|
-
net_sta
|
|
192
|
-
|
|
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
|
-
|
|
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:
|