gmprocess 2.0.0__tar.gz → 2.1.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.0.0 → gmprocess-2.1.0}/MANIFEST.in +2 -0
- {gmprocess-2.0.0/src/gmprocess.egg-info → gmprocess-2.1.0}/PKG-INFO +3 -3
- {gmprocess-2.0.0 → gmprocess-2.1.0}/pyproject.toml +2 -2
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/apps/gmrecords.py +68 -8
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/core/scalar_event.py +4 -1
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/config_production.yml +3 -3
- gmprocess-2.1.0/src/gmprocess/gui/gui_ucla/Documentation.md +88 -0
- gmprocess-2.1.0/src/gmprocess/gui/gui_ucla/GUI_human_review.ipynb +39 -0
- gmprocess-2.1.0/src/gmprocess/gui/gui_ucla/HumanReviewGUI.py +905 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/cosmos/cosmos_writer.py +288 -154
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/report.py +1 -2
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/station_metric_collection.py +2 -2
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/autoshakemap.py +3 -3
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/compute_station_metrics.py +23 -49
- gmprocess-2.1.0/src/gmprocess/subcommands/export_cosmos.py +137 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/projects.py +8 -2
- gmprocess-2.1.0/src/gmprocess/utils/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/summary_plots.py +9 -11
- gmprocess-2.1.0/src/gmprocess/waveform_processing/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/clipping_check.py +1 -1
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/sanity_checks.py +1 -1
- {gmprocess-2.0.0 → gmprocess-2.1.0/src/gmprocess.egg-info}/PKG-INFO +3 -3
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess.egg-info/SOURCES.txt +6 -1
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess.egg-info/requires.txt +2 -2
- gmprocess-2.0.0/src/gmprocess/subcommands/export_shakemap.py +0 -77
- {gmprocess-2.0.0 → gmprocess-2.1.0}/LICENSE.md +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/README.md +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/setup.cfg +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/setup.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/apps/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/bundle_datarelease.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/cwa_gather.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/fix_inventory.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/gmconvert.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/gminfo.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/gmprocess_config.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/gmrecords.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/gmworkspace.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/bin/update_event_json.sh +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/core/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/core/provenance.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/core/stationstream.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/core/stationtrace.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/core/streamarray.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/core/streamcollection.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/CESMD_NGA_ids.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/config_production_v1.yml +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/config_test.yml +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/cosmos_table10.xls +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/cosmos_table4.xls +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/demo/ci38457511/raw/CICCC.RAW +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/demo/ci38457511/raw/CICLC.v1 +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/demo/ci38457511/raw/CITOW2.RAW +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/demo/nc72282711/workspace.h5 +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/fdsn_codes.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/lme/SA_rotd50.0_2020.03.31.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/modules.yml +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nga_w2_selected.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_clipping/bias_1.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_clipping/bias_output.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_clipping/masterF.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_clipping/weight_1.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_clipping/weight_output.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/M.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/bias_1.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/bias_2.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/bias_output.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/final_training.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/masterF.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/model_3.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/model_5.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/mu_sigma.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/weight_1.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/weight_2.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/Cant/weight_output.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/M.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/bias_1.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/bias_2.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/bias_output.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/final_training.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/masterF.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/model_0.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/mu_sigma.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/weight_1.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/weight_2.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/nn_qa/CantWell/weight_output.csv +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/picker.yml +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/station_coordinates.xlsx +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/data/usgs_ids_nga_and_srcmod_cross_reference.xlsx +0 -0
- {gmprocess-2.0.0/src/gmprocess/io → gmprocess-2.1.0/src/gmprocess/gui}/__init__.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/asdf → gmprocess-2.1.0/src/gmprocess/gui/gui_ucla}/__init__.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/bhrc → gmprocess-2.1.0/src/gmprocess/io}/__init__.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/cosmos → gmprocess-2.1.0/src/gmprocess/io/asdf}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/base_metrics_xml.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/flatfile.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/flatfile_constants.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/path_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/rupture.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/station_metrics_xml.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/stream_workspace.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/waveform_metrics_xml.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/asdf/workspace_constants.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/cwb → gmprocess-2.1.0/src/gmprocess/io/bhrc}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/bhrc/core.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/dmg → gmprocess-2.1.0/src/gmprocess/io/cosmos}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/cosmos/cesmd_fetcher.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/cosmos/cesmd_search.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/cosmos/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/cosmos/data_structures.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/esm → gmprocess-2.1.0/src/gmprocess/io/cwb}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/cwb/core.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/geonet → gmprocess-2.1.0/src/gmprocess/io/dmg}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/dmg/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/dynamic_search_parameters.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/knet → gmprocess-2.1.0/src/gmprocess/io/esm}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/esm/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/fetcher.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/nsmn → gmprocess-2.1.0/src/gmprocess/io/geonet}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/geonet/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/global_fetcher.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/obspy → gmprocess-2.1.0/src/gmprocess/io/knet}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/knet/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/knet/knet_fetcher.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/nga.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/renadic → gmprocess-2.1.0/src/gmprocess/io/nsmn}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/nsmn/core.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/smc → gmprocess-2.1.0/src/gmprocess/io/obspy}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/obspy/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/obspy/fdsn_fetcher.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/read.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/read_directory.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/unam → gmprocess-2.1.0/src/gmprocess/io/renadic}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/renadic/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/seedname.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/io/usc → gmprocess-2.1.0/src/gmprocess/io/smc}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/smc/core.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/metrics → gmprocess-2.1.0/src/gmprocess/io/unam}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/unam/core.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/subcommands → gmprocess-2.1.0/src/gmprocess/io/usc}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/usc/core.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/io/utils.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/utils → gmprocess-2.1.0/src/gmprocess/metrics}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/combine.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/containers.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/metric_collection_base.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/oscillator.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/reduce.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/rotate.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/station_metric.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/transform.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/waveform_metric_calculator.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/waveform_metric_calculator_component_base.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/waveform_metric_collection.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/waveform_metric_component.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/waveform_metric_list.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/metrics/waveform_metric_type.py +0 -0
- {gmprocess-2.0.0/src/gmprocess/waveform_processing → gmprocess-2.1.0/src/gmprocess/subcommands}/__init__.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/arg_dicts.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/assemble.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/autoprocess.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/base.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/clean.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/compute_waveform_metrics.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/download.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/export_failure_tables.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/export_gmpacket.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/export_metric_tables.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/export_provenance_tables.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/generate_regression_plot.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/generate_report.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/generate_station_maps.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/import_data.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/init.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/lazy_loader.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/process_waveforms.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/subcommands/processing_steps.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/args.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/assemble_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/config.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/config_versioning.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/constants.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/download_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/export_gmpacket_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/export_shakemap_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/ground_motion_models.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/logging.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/misc.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/misc_plots.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/prompt.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/report_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/rupture_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/stderr.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/strec.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/tables.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/utils/tests_utils.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/adjust_highpass.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/adjust_highpass_ridder.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/baseline_correction.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/clip_detection.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/clipping_ann.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/histogram.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/jerk.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/max_amp.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/ping.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/clipping/std_dev.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/corner_frequencies.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/detrend.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/fft.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/filtering.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/instrument_response.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/integrate.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/nn_quality_assurance.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/phase.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/pretesting.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/processing.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/processing_step.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/resample.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/snr.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/spectrum.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/taper.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/windows.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess/waveform_processing/zero_crossings.py +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess.egg-info/dependency_links.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess.egg-info/entry_points.txt +0 -0
- {gmprocess-2.0.0 → gmprocess-2.1.0}/src/gmprocess.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: gmprocess
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.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
|
|
@@ -64,7 +64,7 @@ Requires-Dist: lxml>=4.6.1
|
|
|
64
64
|
Requires-Dist: matplotlib>=3.1.0
|
|
65
65
|
Requires-Dist: numba>=0.58
|
|
66
66
|
Requires-Dist: numpy<2.0,>=1.21
|
|
67
|
-
Requires-Dist: obspy>=1.4.
|
|
67
|
+
Requires-Dist: obspy>=1.4.1
|
|
68
68
|
Requires-Dist: openpyxl>=3.0.8
|
|
69
69
|
Requires-Dist: openquake.engine>=3.18
|
|
70
70
|
Requires-Dist: pandas>=1.0
|
|
@@ -89,7 +89,7 @@ Requires-Dist: pylint>=2.17; extra == "dev"
|
|
|
89
89
|
Provides-Extra: test
|
|
90
90
|
Requires-Dist: pytest>=6.2; extra == "test"
|
|
91
91
|
Requires-Dist: pytest-cov>=2.12; extra == "test"
|
|
92
|
-
Requires-Dist: pytest-console-scripts>=1.
|
|
92
|
+
Requires-Dist: pytest-console-scripts>=1.4; extra == "test"
|
|
93
93
|
Requires-Dist: vcrpy>=4.1; extra == "test"
|
|
94
94
|
Provides-Extra: doc
|
|
95
95
|
Requires-Dist: altair>=4.2.2; extra == "doc"
|
|
@@ -30,7 +30,7 @@ dependencies = [
|
|
|
30
30
|
"matplotlib>=3.1.0",
|
|
31
31
|
"numba>=0.58",
|
|
32
32
|
"numpy>=1.21,<2.0",
|
|
33
|
-
"obspy>=1.4.
|
|
33
|
+
"obspy>=1.4.1",
|
|
34
34
|
"openpyxl>=3.0.8",
|
|
35
35
|
"openquake.engine>=3.18",
|
|
36
36
|
"pandas>=1.0",
|
|
@@ -59,7 +59,7 @@ dev = [
|
|
|
59
59
|
test = [
|
|
60
60
|
"pytest>=6.2",
|
|
61
61
|
"pytest-cov>=2.12",
|
|
62
|
-
"pytest-console-scripts>=1.
|
|
62
|
+
"pytest-console-scripts>=1.4",
|
|
63
63
|
"vcrpy>=4.1",
|
|
64
64
|
]
|
|
65
65
|
doc = [
|
|
@@ -84,17 +84,36 @@ class GMrecordsApp(object):
|
|
|
84
84
|
self.parser.print_help()
|
|
85
85
|
sys.exit()
|
|
86
86
|
else:
|
|
87
|
+
if self.args.datadir is None and self.args.confdir is None:
|
|
88
|
+
self.use_projects = True
|
|
89
|
+
elif self.args.datadir is not None and self.args.confdir is not None:
|
|
90
|
+
self.use_projects = False
|
|
91
|
+
else:
|
|
92
|
+
raise ValueError(
|
|
93
|
+
"Arguments --datadir and --confdir both must be set or both must "
|
|
94
|
+
"not be set (and thus these paths will be taken from the "
|
|
95
|
+
"configured project)."
|
|
96
|
+
)
|
|
97
|
+
|
|
87
98
|
subcmds_noinit = ["init", "processing_steps"]
|
|
88
99
|
if self.args.subcommand not in subcmds_noinit:
|
|
89
100
|
self._initialize()
|
|
90
101
|
|
|
91
102
|
subcmds_quiet = ["init", "projects", "proj", "processing_steps"]
|
|
92
103
|
if self.args.subcommand not in subcmds_quiet and not self.args.quiet:
|
|
93
|
-
|
|
94
|
-
|
|
104
|
+
if self.use_projects:
|
|
105
|
+
# Print the current project information to avoid confusion
|
|
106
|
+
proj = Project.from_config(self.projects_conf, self.project_name)
|
|
107
|
+
else:
|
|
108
|
+
proj_paths = {
|
|
109
|
+
"conf_path": self.args.confdir,
|
|
110
|
+
"data_path": self.args.datadir,
|
|
111
|
+
}
|
|
112
|
+
proj = Project("None", proj_paths, "None", True)
|
|
95
113
|
print("-" * 80)
|
|
96
114
|
print(proj)
|
|
97
115
|
print("-" * 80)
|
|
116
|
+
|
|
98
117
|
# -----------------------------------------------------------------
|
|
99
118
|
# This calls the init method of the subcommand that was specified
|
|
100
119
|
# at the command line and hands off the GmpApp object ("self") as
|
|
@@ -157,11 +176,17 @@ class GMrecordsApp(object):
|
|
|
157
176
|
|
|
158
177
|
@property
|
|
159
178
|
def conf_path(self):
|
|
160
|
-
|
|
179
|
+
if self.projects_path:
|
|
180
|
+
return (self.projects_path / self.current_project["conf_path"]).resolve()
|
|
181
|
+
else:
|
|
182
|
+
return Path(self.current_project["conf_path"]).resolve()
|
|
161
183
|
|
|
162
184
|
@property
|
|
163
185
|
def data_path(self):
|
|
164
|
-
|
|
186
|
+
if self.projects_path:
|
|
187
|
+
return (self.projects_path / self.current_project["data_path"]).resolve()
|
|
188
|
+
else:
|
|
189
|
+
return Path(self.current_project["data_path"]).resolve()
|
|
165
190
|
|
|
166
191
|
def _initialize(self):
|
|
167
192
|
require_config = self.args.subcommand not in ["projects", "proj"]
|
|
@@ -183,7 +208,7 @@ class GMrecordsApp(object):
|
|
|
183
208
|
|
|
184
209
|
def _load_config(self, require_config=True):
|
|
185
210
|
self.projects_conf = None
|
|
186
|
-
if not self.projects_file.is_file():
|
|
211
|
+
if (not self.projects_file.is_file()) and self.use_projects:
|
|
187
212
|
if not require_config:
|
|
188
213
|
return
|
|
189
214
|
|
|
@@ -211,9 +236,23 @@ class GMrecordsApp(object):
|
|
|
211
236
|
else:
|
|
212
237
|
sys.exit(0)
|
|
213
238
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
239
|
+
if not self.use_projects:
|
|
240
|
+
self.projects_path = None
|
|
241
|
+
self.projects_file = None
|
|
242
|
+
self.projects_conf = {
|
|
243
|
+
"project": "None",
|
|
244
|
+
"projects": {
|
|
245
|
+
"None": {
|
|
246
|
+
"conf_path": self.args.confdir,
|
|
247
|
+
"data_path": self.args.datadir,
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
}
|
|
251
|
+
else:
|
|
252
|
+
self.projects_conf = configobj.ConfigObj(
|
|
253
|
+
str(self.projects_file), encoding="utf-8"
|
|
254
|
+
)
|
|
255
|
+
|
|
217
256
|
projmod.validate_projects_config(self.projects_conf, self.projects_path)
|
|
218
257
|
|
|
219
258
|
if "CALLED_FROM_PYTEST" in os.environ:
|
|
@@ -338,6 +377,27 @@ class GMrecordsApp(object):
|
|
|
338
377
|
action="store_true",
|
|
339
378
|
)
|
|
340
379
|
|
|
380
|
+
parser.add_argument(
|
|
381
|
+
"--datadir",
|
|
382
|
+
type=str,
|
|
383
|
+
default=None,
|
|
384
|
+
help=(
|
|
385
|
+
"Path to data directory. "
|
|
386
|
+
"Setting this disables the use of projects. "
|
|
387
|
+
"Setting this also requires --confdir to be set. "
|
|
388
|
+
),
|
|
389
|
+
)
|
|
390
|
+
parser.add_argument(
|
|
391
|
+
"--confdir",
|
|
392
|
+
type=str,
|
|
393
|
+
default=None,
|
|
394
|
+
help=(
|
|
395
|
+
"Path to directly containing config files. "
|
|
396
|
+
"Setting this disables the use of projects. "
|
|
397
|
+
"Setting this also requires --datadir to be set."
|
|
398
|
+
),
|
|
399
|
+
)
|
|
400
|
+
|
|
341
401
|
# Parsers for subcommands
|
|
342
402
|
subparsers = parser.add_subparsers(
|
|
343
403
|
title="Subcommands", dest="subcommand", metavar="<command> (<aliases>)"
|
|
@@ -323,7 +323,10 @@ def get_event_ids(ids=None, file_ids=None, data_dir=None):
|
|
|
323
323
|
event_ids = ids or file_ids
|
|
324
324
|
if event_ids:
|
|
325
325
|
if isinstance(event_ids, str):
|
|
326
|
-
|
|
326
|
+
if "," in event_ids:
|
|
327
|
+
event_ids = [eid.strip() for eid in event_ids.split(",")]
|
|
328
|
+
else:
|
|
329
|
+
event_ids = [event_ids]
|
|
327
330
|
elif data_dir:
|
|
328
331
|
event_ids = [ev_id.name for ev_id in data_dir.iterdir() if ev_id.is_dir()]
|
|
329
332
|
event_ids = sorted(event_ids)
|
|
@@ -14,7 +14,7 @@ fetchers:
|
|
|
14
14
|
# StableShallow GMM.
|
|
15
15
|
# The distance will be the the distance at which the threshold PGA (in g) is
|
|
16
16
|
# exceeded based on the GMM.
|
|
17
|
-
pga: 0.
|
|
17
|
+
pga: 0.0001
|
|
18
18
|
# The maximum distance (in km) that can be returned.
|
|
19
19
|
max_distance: 800.0
|
|
20
20
|
# NOTE: the GMM is evaluated with a number of simplifications, including
|
|
@@ -526,7 +526,7 @@ metrics:
|
|
|
526
526
|
# Do *not* delete a key to remove a component, it will be replaced with the default.
|
|
527
527
|
# To remove a component, set it's types as an empty list.
|
|
528
528
|
components_and_types:
|
|
529
|
-
channels: [pga, pgv, sa, duration, cav]
|
|
529
|
+
channels: [pga, pgv, sa, duration, cav, arias]
|
|
530
530
|
rotd: [pga, pgv, sa]
|
|
531
531
|
geometric_mean: [duration]
|
|
532
532
|
quadratic_mean: [fas]
|
|
@@ -547,7 +547,7 @@ metrics:
|
|
|
547
547
|
# Additional parameters required for FAS
|
|
548
548
|
fas:
|
|
549
549
|
smoothing_method: konno_ohmachi
|
|
550
|
-
smoothing_parameter:
|
|
550
|
+
smoothing_parameter: 188.5
|
|
551
551
|
allow_nans: True
|
|
552
552
|
frequencies:
|
|
553
553
|
# Parameters defining an array of frequencies.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Graphical User Interface (GUI) to aid human review of processed-ground-motions
|
|
2
|
+
|
|
3
|
+
```{admonition} Authors
|
|
4
|
+
:class: note
|
|
5
|
+
|
|
6
|
+
Maria E. Ramos-Sepulveda, Scott J. Brandenberg, Tristan Buckreis, Meibai Li, Shako Ahmed, and Jonathan P. Stewart
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
The UCLA geotechnical group prepared a graphical user interface (GUI) to facilitate a human review of records processed by gmprocess. The algorithms utilized by gmprocess to accept/reject, window, and filter records work well most of the time, but cannot account for all possible issues that might arise. For this reason, reviewing the processed records is prudent. The purpose of this GUI is to facilitate rapid review. Acceleration and displacement time series, as well as response spectra can be visually inspected to find any potential errors. The GUI utilizes Jupyter and allows the user to load an HDF5 file output from gmprocess, interact with the data by accepting or rejecting records, and adjusting high-pass and low-pass filter parameters. In the example below we describe the procedure to run and interact with the GUI.
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
- A workspace.h5 file produced by gmprocess through the "process_waveforms" step. For example `gmrecords --eventid nc73291880 download`, `gmrecords assemble` and `gmrecords process_waveforms` must be run before going through this review step.
|
|
13
|
+
- The Python script named `HumanReviewGUI.py` that contains the class variable and function defintions that will be called by a Jupyter Notebook.
|
|
14
|
+
- A Jupyter Notebook that instantiates the HumanReviewGUI class.
|
|
15
|
+
- gmprocess
|
|
16
|
+
- obspy
|
|
17
|
+
- ipywidgets
|
|
18
|
+
- pandas
|
|
19
|
+
- numpy
|
|
20
|
+
- matplotlib
|
|
21
|
+
- ucla_geotech_tools.response_spectrum
|
|
22
|
+
- json
|
|
23
|
+
- prov
|
|
24
|
+
- ipympl
|
|
25
|
+
|
|
26
|
+
## Jupyter notebook
|
|
27
|
+
|
|
28
|
+
Creating the GUI requires only three lines of code, shown below. Older versions of Jupyter might require %matplotlib notebook instead of %matplotlib widget. Running these three lines should produce plots like the ones shown in the sections that follow.
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
%matplotlib widget
|
|
32
|
+
import gmprocess.gui.gui_ucla.HumanReviewGUI as HRG
|
|
33
|
+
GUI = HRG.HumanReviewGUI()
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Plots description
|
|
37
|
+
The interface is shown in Figure 1, and consists of a control panel and four plots. The control panel contains a field where users input the filename and load the HDF5 file. The progress bar on top displays how many records have been loaded. Once the loading is done, the progress bar reflects how many records have been accepted. The toggle buttons next to the load button filter data by showing only data waveforms that have not been reviewed, those that have been accepted, and/or those that have been rejected. The third row of the control panel has buttons to browse to the previous or next record, along with a dropdown menu for selecting a specific record. Next to the right are the buttons for accepting or rejecting the record. A record should be accepted when the user considers it to have been processed correctly, and rejected when the user believes that the record should not be processed because it is too noisy or has other flaws. The bottom row of the control panel contains the name of the user who processed the record, the earthquake magnitude, and the epicentral distance. Users can also set the high-pass and low-pass corner frequencies (fchp and fclp respectively), and uncheck a box to control whether the fclp is not applied at all. The filters utilize the same order and filter type as specified by the user in gmprocess and are not configurable in the GUI. We found that these options do not require adjustment after processing in gmprocess.
|
|
38
|
+
<br/><br/>
|
|
39
|
+
The orange traces depict the unfiltered record. In this context, "unfiltered" refers to the trace that has not gone through the Butterworth filter, but is trimmed, demeaned and tapered. The blue trace ("filtered GUI") is filtered using the `apply_filter` function inside the python script and it will change if any of the corner frequencies are modified. The blue time series includes the minimum between 60 seconds of noise and the maximum noise length of a record while the traces called from gmprocess have 2 seconds (default in config file). The translucent red ("filtered gmprocess") is the record filtered inside gmprocess. This trace will not change if the corner frequencies are modified. The purpose of including both filtered traces (blue and red) is so the user can compare any improvements done in the GUI. The red trace was set to translucent to aid the visual comparison. As a result of superimposing the red over the blue, this trace will seem purple whenever "filtered GUI" overlaps "filtered gmprocess". The smoothed noise spectrum is shown in green and only for the Fourier transform spectra. The black dotted line is the theoretical acceleration decay at low frequency according to the $f^2$ model (Brune 1970; Boore and Bommer 2005), the user can use it as reference. The dashed-black lines depict corner frequencies in the Fourier transform spectra and the highest-usable period (factor of 0.8) in the response spectra. The grey solid and dashed lines are the signal-to-noise ratio (SNR) and SNR threshold, respectively. The ordinates on the the Fourier transform spectra are not meant to be used to read the SNR, the idea is to evaluate the SNR with respect to the SNR threshold, signal, and noise traces.
|
|
40
|
+
|
|
41
|
+
```{figure} ../../_static/ucla_gui/interface3.png
|
|
42
|
+
*Figure 1: Interface of Graphic User Interface for human review*
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Procedure
|
|
46
|
+
Changes implemented in the GUI are recorded in the HDF5 file through an `auxiliary_data` folder named `review`. In the `review` section you can find which records were accepted or rejected and the corresponding corner frequency values. To integrate these changes into the `provenance` and update the `waveforms`, the user needs to run `gmrecords process -r`. The changes in the `auxiliary_data` folder will then be reflected in the `provenance` directory of the .h5 file.
|
|
47
|
+
|
|
48
|
+
The processing steps are listed below:
|
|
49
|
+
- Load workspace.h5
|
|
50
|
+
- Evaluate acceleration, displacement, amplitude and response plots.
|
|
51
|
+
- Increase values of fchp if necessary.
|
|
52
|
+
- Change and/or remove value of fclp if necessary.
|
|
53
|
+
- Accept or reject the record accordingly. The GUI will automatically proceed to the next trace.
|
|
54
|
+
- Run `gmrecords process -r` to overwrite the traces objects in the workspace.h5.
|
|
55
|
+
|
|
56
|
+
### Changes in high-pass corner frequencies
|
|
57
|
+
The most common modification is an adjustment to the fchp. The automated selection of fchp is done using the `auto_fchp` package inside gmprocess, which fits a 6th order polynomial to the displacement trace and adjusts the fchp until the amplitude of the polynomial fit is a specified fraction of the amplitude of the displacement trace. Sometimes, the automated fchp value is not high enough to discard lingering long period noise (which can be observed as a wobbly displacement trace, shown in Figure 2). In this case, the fchp was increased to 0.19 Hz to render a displacement trace that is stable prior to the p-wave arrival, as shown in Figure 3.
|
|
58
|
+
|
|
59
|
+
```{figure} ../../_static/ucla_gui/fchp_before3.png
|
|
60
|
+
*Figure 2: Example trace with an automated selected fchp resulting in an irregular displacement time series*
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```{figure} ../../_static/ucla_gui/fchp_after3.png
|
|
64
|
+
*Figure 3: Example trace shown in Figure 2 with a modified fchp resulting in a regular displacement time series*
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Changes in low-pass corner frequencies
|
|
68
|
+
Depending on how the user configured their gmprocess, the fclp could be applied every time or never. In the GUI, by default, fclp is applied to the blue trace ("filtered GUI"). The value shown in the header of the plots is the fclp selected by gmprocess which is chosen to be the minimum between $0.7*Nyquist$ frequency and the highest frequency where SNR undergoes certain threshold. High amplitude short period noise could be reflected as an irregular peak in the response spectrum at short periods (Figure 4). The noise can be excluded from the trace by checking the box to the right and applying an fclp of the same value (Figure 5). In this case a low-pass filter at 14.6 Hz stabilized the short-period portion of the response spectrum.
|
|
69
|
+
|
|
70
|
+
```{figure} ../../_static/ucla_gui/fclp_before3.png
|
|
71
|
+
*Figure 4: Example trace without fclp resulting in an irregular response spectra shape*
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```{figure} ../../_static/ucla_gui/fclp_after3.png
|
|
75
|
+
*Figure 5: Example trace shown in Figure 4 with fclp resulting in a flat response spectra at short periods*
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Example of rejected record
|
|
79
|
+
Some records contaminated with significant noise might pass the "failing criteria" of gmprocess. We believe this may be the result of randomness in the pre-event noise window. Usually, these records are easy to spot in the acceleration time series. An example is shown in Figure 6. Although the earthquake trace is visible above the noise level, we consider this record to be too noisy and opted to reject it.
|
|
80
|
+
|
|
81
|
+
```{figure} ../../_static/ucla_gui/rejected3.png
|
|
82
|
+
*Figure 6: Example trace with significant noise that should be rejected*
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Limitations
|
|
86
|
+
1. Gmprocess might miscompute the location of the p-wave arrival or the coda. None of those issues could be further improved using the GUI.
|
|
87
|
+
2. The GUI will not update the `provenance` folder in the workspace.h5. If the user wants to pass this information from the `auxiliary_data` folder to the `provenance` folder and recompute the `waveforms`, the user needs to run `gmrecords process -r`.
|
|
88
|
+
3. The GUI will convert the units of unprocessed traces into $m/s^2$ if the raw data is in g units or in a mseed format. Otherwise, the traces in the plots will be offset and the user will have to go to the python code and apply the corresponding conversion.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "code",
|
|
5
|
+
"execution_count": 1,
|
|
6
|
+
"id": "893fe763",
|
|
7
|
+
"metadata": {},
|
|
8
|
+
"outputs": [],
|
|
9
|
+
"source": [
|
|
10
|
+
"%matplotlib widget\n",
|
|
11
|
+
"import gmprocess.gui.gui_ucla.HumanReviewGUI as HRG\n",
|
|
12
|
+
"GUI = HRG.HumanReviewGUI()"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"metadata": {
|
|
17
|
+
"IMAGE_NAME": "taccsciapps/ds-nb-img:base-0.1.3",
|
|
18
|
+
"UUID": "b10b61b0-984e-11ee-8eb8-86839c98a1b4",
|
|
19
|
+
"kernelspec": {
|
|
20
|
+
"display_name": "Python 3 (ipykernel)",
|
|
21
|
+
"language": "python",
|
|
22
|
+
"name": "python3"
|
|
23
|
+
},
|
|
24
|
+
"language_info": {
|
|
25
|
+
"codemirror_mode": {
|
|
26
|
+
"name": "ipython",
|
|
27
|
+
"version": 3
|
|
28
|
+
},
|
|
29
|
+
"file_extension": ".py",
|
|
30
|
+
"mimetype": "text/x-python",
|
|
31
|
+
"name": "python",
|
|
32
|
+
"nbconvert_exporter": "python",
|
|
33
|
+
"pygments_lexer": "ipython3",
|
|
34
|
+
"version": "3.9.10"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"nbformat": 4,
|
|
38
|
+
"nbformat_minor": 5
|
|
39
|
+
}
|