diff --git a/Gradio_app.ipynb b/Gradio_app.ipynb index a2935b2e3d04ab70763d4454a2cac22c0c8beddf..b0f7d4f735b600f755058e5800af483213fe883f 100644 --- a/Gradio_app.ipynb +++ b/Gradio_app.ipynb @@ -2,14 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Running on local URL: http://127.0.0.1:7861\n", + "Running on local URL: http://127.0.0.1:7860\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] @@ -17,7 +17,7 @@ { "data": { "text/html": [ - "
" + "
" ], "text/plain": [ "" @@ -30,9 +30,711 @@ "data": { "text/plain": [] }, - "execution_count": 2, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting to download inventory\n", + "Finished downloading inventory\n", + "Processing CI.CCC...\n", + "Downloading waveform for CI_CCC_2019-07-04T17:33:40.494920Z\n", + "Skipping CI_CCC_2019-07-04T17:33:40.494920Z\n", + "Processing CI.CLC...\n", + "Processing CI.JRC2...\n", + "Reading cached waveform\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/anovosel/Documents/phase-hunter/phasehunter/data_preparation.py:210: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/utils/tensor_new.cpp:248.)\n", + " return torch.tensor([waveform]*128, dtype=torch.float)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Added CI.JRC2 to the list of waveforms\n", + "Processing CI.LRL...\n", + "Reading cached waveform\n", + "Added CI.LRL to the list of waveforms\n", + "Processing CI.MPM...\n", + "Reading cached waveform\n", + "Processing CI.Q0072...\n", + "Reading cached waveform\n", + "Processing CI.SLA...\n", + "Reading cached waveform\n", + "Added CI.SLA to the list of waveforms\n", + "Processing CI.SRT...\n", + "Reading cached waveform\n", + "Added CI.SRT to the list of waveforms\n", + "Processing CI.TOW2...\n", + "Reading cached waveform\n", + "Added CI.TOW2 to the list of waveforms\n", + "Processing CI.WBM...\n", + "Downloading waveform for CI_WBM_2019-07-04T17:33:40.063616Z\n", + "Skipping CI_WBM_2019-07-04T17:33:40.063616Z\n", + "Processing CI.WCS2...\n", + "Downloading waveform for CI_WCS2_2019-07-04T17:33:40.200958Z\n", + "Skipping CI_WCS2_2019-07-04T17:33:40.200958Z\n", + "Processing CI.WMF...\n", + "Reading cached waveform\n", + "Added CI.WMF to the list of waveforms\n", + "Processing CI.WNM...\n", + "Reading cached waveform\n", + "Processing CI.WRC2...\n", + "Downloading waveform for CI_WRC2_2019-07-04T17:33:38.698099Z\n", + "Skipping CI_WRC2_2019-07-04T17:33:38.698099Z\n", + "Processing CI.WRV2...\n", + "Reading cached waveform\n", + "Processing CI.WVP2...\n", + "Downloading waveform for CI_WVP2_2019-07-04T17:33:39.650402Z\n", + "Skipping CI_WVP2_2019-07-04T17:33:39.650402Z\n", + "Processing NP.1809...\n", + "Reading cached waveform\n", + "Processing NP.5419...\n", + "Reading cached waveform\n", + "Processing PB.B916...\n", + "Reading cached waveform\n", + "Processing PB.B917...\n", + "Reading cached waveform\n", + "Processing PB.B918...\n", + "Reading cached waveform\n", + "Processing PB.B921...\n", + "Reading cached waveform\n", + "Starting to run predictions\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:301: FutureWarning: The input object of type 'Tensor' is an array-like implementing one of the corresponding protocols (`__array__`, `__array_interface__` or `__array_struct__`); but not a sequence (or 0-D). In the future, this object will be coerced as if it was first converted using `np.array(obj)`. To retain the old behaviour, you have to either modify the type 'Tensor', or assign to an empty array created with `np.empty(correct_shape, dtype=object)`.\n", + " waveforms = np.array(waveforms)[selection_indexes]\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:301: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", + " waveforms = np.array(waveforms)[selection_indexes]\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:308: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + " waveforms = [torch.tensor(waveform) for waveform in waveforms]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting plotting 3 waveforms\n", + "Fetching topography\n", + "Plotting topo\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/anovosel/miniconda3/envs/phasehunter/lib/python3.11/site-packages/bmi_topography/api_key.py:49: UserWarning: You are using a demo key to fetch data from OpenTopography, functionality will be limited. See https://bmi-topography.readthedocs.io/en/latest/#api-key for more information.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Plotting waveform 1/3\n", + "Station 36.11758, -117.85486 has P velocity 4.746091546067712 and S velocity 2.649725414106055\n", + "Plotting waveform 2/3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 35.69235, -117.75051 has P velocity 3.4155476453388767 and S velocity 1.67967367867923\n", + "Plotting waveform 3/3\n", + "Station 35.98249, -117.80885 has P velocity 4.135967410510336 and S velocity 2.2605591132307814\n", + "Plotting stations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:413: UserWarning: FixedFormatter should only be used together with FixedLocator\n", + " ax[i].set_xticklabels(ax[i].get_xticks(), rotation = 50)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting to download inventory\n", + "Finished downloading inventory\n", + "Processing CI.ADO...\n", + "Reading cached waveform\n", + "Added CI.ADO to the list of waveforms\n", + "Processing CI.ALP...\n", + "Downloading waveform for CI_ALP_2019-07-04T17:33:53.584674Z\n", + "Skipping CI_ALP_2019-07-04T17:33:53.584674Z\n", + "Processing CI.APL...\n", + "Downloading waveform for CI_APL_2019-07-04T17:33:46.544764Z\n", + "Skipping CI_APL_2019-07-04T17:33:46.544764Z\n", + "Processing CI.ARV...\n", + "Reading cached waveform\n", + "Added CI.ARV to the list of waveforms\n", + "Processing CI.AVM...\n", + "Downloading waveform for CI_AVM_2019-07-04T17:33:51.411326Z\n", + "Skipping CI_AVM_2019-07-04T17:33:51.411326Z\n", + "Processing CI.BAI...\n", + "Downloading waveform for CI_BAI_2019-07-04T17:33:55.818842Z\n", + "Skipping CI_BAI_2019-07-04T17:33:55.818842Z\n", + "Processing CI.BTP...\n", + "Downloading waveform for CI_BTP_2019-07-04T17:33:55.357598Z\n", + "Skipping CI_BTP_2019-07-04T17:33:55.357598Z\n", + "Processing CI.CCA...\n", + "Downloading waveform for CI_CCA_2019-07-04T17:33:46.095412Z\n", + "Skipping CI_CCA_2019-07-04T17:33:46.095412Z\n", + "Processing CI.CCC...\n", + "Downloading waveform for CI_CCC_2019-07-04T17:33:40.494920Z\n", + "Skipping CI_CCC_2019-07-04T17:33:40.494920Z\n", + "Processing CI.CGO...\n", + "Downloading waveform for CI_CGO_2019-07-04T17:33:47.556930Z\n", + "Skipping CI_CGO_2019-07-04T17:33:47.556930Z\n", + "Processing CI.CJV2...\n", + "Downloading waveform for CI_CJV2_2019-07-04T17:33:54.933047Z\n", + "Skipping CI_CJV2_2019-07-04T17:33:54.933047Z\n", + "Processing CI.CLC...\n", + "Processing CI.CSL...\n", + "Downloading waveform for CI_CSL_2019-07-04T17:33:57.850444Z\n", + "Skipping CI_CSL_2019-07-04T17:33:57.850444Z\n", + "Processing CI.CVW...\n", + "Downloading waveform for CI_CVW_2019-07-04T17:33:55.861897Z\n", + "Skipping CI_CVW_2019-07-04T17:33:55.861897Z\n", + "Processing CI.CWC...\n", + "Reading cached waveform\n", + "Added CI.CWC to the list of waveforms\n", + "Processing CI.DAW...\n", + "Downloading waveform for CI_DAW_2019-07-04T17:33:43.308028Z\n", + "Skipping CI_DAW_2019-07-04T17:33:43.308028Z\n", + "Processing CI.DTC...\n", + "Downloading waveform for CI_DTC_2019-07-04T17:33:59.020880Z\n", + "Skipping CI_DTC_2019-07-04T17:33:59.020880Z\n", + "Processing CI.DTP...\n", + "Downloading waveform for CI_DTP_2019-07-04T17:33:43.742158Z\n", + "Skipping CI_DTP_2019-07-04T17:33:43.742158Z\n", + "Processing CI.EDW2...\n", + "Reading cached waveform\n", + "Added CI.EDW2 to the list of waveforms\n", + "Processing CI.FDR...\n", + "Downloading waveform for CI_FDR_2019-07-04T17:33:51.676399Z\n", + "Skipping CI_FDR_2019-07-04T17:33:51.676399Z\n", + "Processing CI.FOX2...\n", + "Downloading waveform for CI_FOX2_2019-07-04T17:33:52.666361Z\n", + "Skipping CI_FOX2_2019-07-04T17:33:52.666361Z\n", + "Processing CI.FUR...\n", + "Reading cached waveform\n", + "Added CI.FUR to the list of waveforms\n", + "Processing CI.GRA...\n", + "Reading cached waveform\n", + "Added CI.GRA to the list of waveforms\n", + "Processing CI.GSC...\n", + "Reading cached waveform\n", + "Added CI.GSC to the list of waveforms\n", + "Processing CI.HAR...\n", + "Downloading waveform for CI_HAR_2019-07-04T17:33:47.473752Z\n", + "Skipping CI_HAR_2019-07-04T17:33:47.473752Z\n", + "Processing CI.HDH...\n", + "Downloading waveform for CI_HDH_2019-07-04T17:33:54.782440Z\n", + "Skipping CI_HDH_2019-07-04T17:33:54.782440Z\n", + "Processing CI.HEC...\n", + "Reading cached waveform\n", + "Added CI.HEC to the list of waveforms\n", + "Processing CI.HOL...\n", + "Downloading waveform for CI_HOL_2019-07-04T17:33:55.074657Z\n", + "Skipping CI_HOL_2019-07-04T17:33:55.074657Z\n", + "Processing CI.HYS...\n", + "Downloading waveform for CI_HYS_2019-07-04T17:33:49.006533Z\n", + "Skipping CI_HYS_2019-07-04T17:33:49.006533Z\n", + "Processing CI.ISA...\n", + "Reading cached waveform\n", + "Added CI.ISA to the list of waveforms\n", + "Processing CI.JNH2...\n", + "Downloading waveform for CI_JNH2_2019-07-04T17:33:55.441974Z\n", + "Skipping CI_JNH2_2019-07-04T17:33:55.441974Z\n", + "Processing CI.JRC2...\n", + "Reading cached waveform\n", + "Added CI.JRC2 to the list of waveforms\n", + "Processing CI.LDR...\n", + "Downloading waveform for CI_LDR_2019-07-04T17:33:50.153267Z\n", + "Skipping CI_LDR_2019-07-04T17:33:50.153267Z\n", + "Processing CI.LEO...\n", + "Downloading waveform for CI_LEO_2019-07-04T17:33:54.338977Z\n", + "Skipping CI_LEO_2019-07-04T17:33:54.338977Z\n", + "Processing CI.LJR...\n", + "Downloading waveform for CI_LJR_2019-07-04T17:33:56.299609Z\n", + "Skipping CI_LJR_2019-07-04T17:33:56.299609Z\n", + "Processing CI.LMR2...\n", + "Downloading waveform for CI_LMR2_2019-07-04T17:33:48.052793Z\n", + "Skipping CI_LMR2_2019-07-04T17:33:48.052793Z\n", + "Processing CI.LRL...\n", + "Reading cached waveform\n", + "Added CI.LRL to the list of waveforms\n", + "Processing CI.LRR2...\n", + "Downloading waveform for CI_LRR2_2019-07-04T17:33:54.561166Z\n", + "Skipping CI_LRR2_2019-07-04T17:33:54.561166Z\n", + "Processing CI.LUC2...\n", + "Downloading waveform for CI_LUC2_2019-07-04T17:33:56.345510Z\n", + "Skipping CI_LUC2_2019-07-04T17:33:56.345510Z\n", + "Processing CI.MAG...\n", + "Downloading waveform for CI_MAG_2019-07-04T17:33:52.529563Z\n", + "Skipping CI_MAG_2019-07-04T17:33:52.529563Z\n", + "Processing CI.MPM...\n", + "Reading cached waveform\n", + "Processing CI.MRS...\n", + "Downloading waveform for CI_MRS_2019-07-04T17:33:45.737308Z\n", + "Skipping CI_MRS_2019-07-04T17:33:45.737308Z\n", + "Processing CI.NBS...\n", + "Downloading waveform for CI_NBS_2019-07-04T17:33:54.819174Z\n", + "Skipping CI_NBS_2019-07-04T17:33:54.819174Z\n", + "Processing CI.NEN...\n", + "Downloading waveform for CI_NEN_2019-07-04T17:33:53.764119Z\n", + "Skipping CI_NEN_2019-07-04T17:33:53.764119Z\n", + "Processing CI.OSI...\n", + "Reading cached waveform\n", + "Added CI.OSI to the list of waveforms\n", + "Processing CI.PDE...\n", + "Downloading waveform for CI_PDE_2019-07-04T17:33:58.304637Z\n", + "Skipping CI_PDE_2019-07-04T17:33:58.304637Z\n", + "Processing CI.PUT...\n", + "Downloading waveform for CI_PUT_2019-07-04T17:33:52.090783Z\n", + "Skipping CI_PUT_2019-07-04T17:33:52.090783Z\n", + "Processing CI.Q0013...\n", + "Reading cached waveform\n", + "Processing CI.Q0024...\n", + "Reading cached waveform\n", + "Processing CI.Q0035...\n", + "Reading cached waveform\n", + "Processing CI.Q0045...\n", + "Downloading waveform for CI_Q0045_2019-07-04T17:33:57.352801Z\n", + "Skipping CI_Q0045_2019-07-04T17:33:57.352801Z\n", + "Processing CI.Q0056...\n", + "Reading cached waveform\n", + "Processing CI.Q0061...\n", + "Reading cached waveform\n", + "Processing CI.Q0065...\n", + "Downloading waveform for CI_Q0065_2019-07-04T17:33:49.714824Z\n", + "Skipping CI_Q0065_2019-07-04T17:33:49.714824Z\n", + "Processing CI.Q0068...\n", + "Reading cached waveform\n", + "Processing CI.Q0072...\n", + "Reading cached waveform\n", + "Processing CI.RMM...\n", + "Downloading waveform for CI_RMM_2019-07-04T17:33:55.887825Z\n", + "Skipping CI_RMM_2019-07-04T17:33:55.887825Z\n", + "Processing CI.RRX...\n", + "Reading cached waveform\n", + "Added CI.RRX to the list of waveforms\n", + "Processing CI.SBB2...\n", + "Downloading waveform for CI_SBB2_2019-07-04T17:33:51.760655Z\n", + "Skipping CI_SBB2_2019-07-04T17:33:51.760655Z\n", + "Processing CI.SHO...\n", + "Reading cached waveform\n", + "Added CI.SHO to the list of waveforms\n", + "Processing CI.SHU...\n", + "Downloading waveform for CI_SHU_2019-07-04T17:33:53.494364Z\n", + "Skipping CI_SHU_2019-07-04T17:33:53.494364Z\n", + "Processing CI.SLA...\n", + "Reading cached waveform\n", + "Added CI.SLA to the list of waveforms\n", + "Processing CI.SLM...\n", + "Downloading waveform for CI_SLM_2019-07-04T17:33:57.261460Z\n", + "Skipping CI_SLM_2019-07-04T17:33:57.261460Z\n", + "Processing CI.SPG2...\n", + "Downloading waveform for CI_SPG2_2019-07-04T17:33:50.938614Z\n", + "Skipping CI_SPG2_2019-07-04T17:33:50.938614Z\n", + "Processing CI.SRT...\n", + "Reading cached waveform\n", + "Added CI.SRT to the list of waveforms\n", + "Processing CI.TEH...\n", + "Downloading waveform for CI_TEH_2019-07-04T17:33:47.782229Z\n", + "Skipping CI_TEH_2019-07-04T17:33:47.782229Z\n", + "Processing CI.TEJ...\n", + "Downloading waveform for CI_TEJ_2019-07-04T17:33:50.888789Z\n", + "Skipping CI_TEJ_2019-07-04T17:33:50.888789Z\n", + "Processing CI.THC...\n", + "Downloading waveform for CI_THC_2019-07-04T17:33:53.562586Z\n", + "Skipping CI_THC_2019-07-04T17:33:53.562586Z\n", + "Processing CI.TIN...\n", + "Reading cached waveform\n", + "Added CI.TIN to the list of waveforms\n", + "Processing CI.TJR...\n", + "Downloading waveform for CI_TJR_2019-07-04T17:33:53.114791Z\n", + "Skipping CI_TJR_2019-07-04T17:33:53.114791Z\n", + "Processing CI.TOW2...\n", + "Reading cached waveform\n", + "Added CI.TOW2 to the list of waveforms\n", + "Processing CI.TPO...\n", + "Downloading waveform for CI_TPO_2019-07-04T17:33:50.757819Z\n", + "Skipping CI_TPO_2019-07-04T17:33:50.757819Z\n", + "Processing CI.VCS...\n", + "Downloading waveform for CI_VCS_2019-07-04T17:33:55.459774Z\n", + "Skipping CI_VCS_2019-07-04T17:33:55.459774Z\n", + "Processing CI.VTV...\n", + "Reading cached waveform\n", + "Added CI.VTV to the list of waveforms\n", + "Processing CI.WAS2...\n", + "Downloading waveform for CI_WAS2_2019-07-04T17:33:47.167220Z\n", + "Skipping CI_WAS2_2019-07-04T17:33:47.167220Z\n", + "Processing CI.WBM...\n", + "Downloading waveform for CI_WBM_2019-07-04T17:33:40.063616Z\n", + "Skipping CI_WBM_2019-07-04T17:33:40.063616Z\n", + "Processing CI.WBS...\n", + "Downloading waveform for CI_WBS_2019-07-04T17:33:43.109050Z\n", + "Skipping CI_WBS_2019-07-04T17:33:43.109050Z\n", + "Processing CI.WCS2...\n", + "Downloading waveform for CI_WCS2_2019-07-04T17:33:40.200958Z\n", + "Skipping CI_WCS2_2019-07-04T17:33:40.200958Z\n", + "Processing CI.WHF...\n", + "Downloading waveform for CI_WHF_2019-07-04T17:33:44.817776Z\n", + "Skipping CI_WHF_2019-07-04T17:33:44.817776Z\n", + "Processing CI.WLH2...\n", + "Downloading waveform for CI_WLH2_2019-07-04T17:33:45.980879Z\n", + "Skipping CI_WLH2_2019-07-04T17:33:45.980879Z\n", + "Processing CI.WLS...\n", + "Downloading waveform for CI_WLS_2019-07-04T17:33:53.177944Z\n", + "Skipping CI_WLS_2019-07-04T17:33:53.177944Z\n", + "Processing CI.WLS2...\n", + "Downloading waveform for CI_WLS2_2019-07-04T17:33:53.177444Z\n", + "Skipping CI_WLS2_2019-07-04T17:33:53.177444Z\n", + "Processing CI.WMF...\n", + "Reading cached waveform\n", + "Added CI.WMF to the list of waveforms\n", + "Processing CI.WNM...\n", + "Reading cached waveform\n", + "Processing CI.WOR...\n", + "Downloading waveform for CI_WOR_2019-07-04T17:33:43.547818Z\n", + "Skipping CI_WOR_2019-07-04T17:33:43.547818Z\n", + "Processing CI.WRC2...\n", + "Downloading waveform for CI_WRC2_2019-07-04T17:33:38.698099Z\n", + "Skipping CI_WRC2_2019-07-04T17:33:38.698099Z\n", + "Processing CI.WRV2...\n", + "Reading cached waveform\n", + "Processing CI.WVP2...\n", + "Downloading waveform for CI_WVP2_2019-07-04T17:33:39.650402Z\n", + "Skipping CI_WVP2_2019-07-04T17:33:39.650402Z\n", + "Processing LB.DAC...\n", + "Reading cached waveform\n", + "Added LB.DAC to the list of waveforms\n", + "Processing NN.FMT...\n", + "Reading cached waveform\n", + "Processing NN.GVN...\n", + "Reading cached waveform\n", + "Processing NN.GWY...\n", + "Reading cached waveform\n", + "Added NN.GWY to the list of waveforms\n", + "Processing NN.MCA...\n", + "Reading cached waveform\n", + "Processing NN.PAN...\n", + "Downloading waveform for NN_PAN_2019-07-04T17:33:46.806604Z\n", + "Skipping NN_PAN_2019-07-04T17:33:46.806604Z\n", + "Processing NN.QSM...\n", + "Reading cached waveform\n", + "Added NN.QSM to the list of waveforms\n", + "Processing NN.STHB...\n", + "Reading cached waveform\n", + "Added NN.STHB to the list of waveforms\n", + "Processing NN.WCT...\n", + "Reading cached waveform\n", + "Processing NN.WLDB...\n", + "Reading cached waveform\n", + "Added NN.WLDB to the list of waveforms\n", + "Processing NP.1035...\n", + "Downloading waveform for NP_1035_2019-07-04T17:33:46.374472Z\n", + "Skipping NP_1035_2019-07-04T17:33:46.374472Z\n", + "Processing NP.1484...\n", + "Downloading waveform for NP_1484_2019-07-04T17:33:51.966935Z\n", + "Skipping NP_1484_2019-07-04T17:33:51.966935Z\n", + "Processing NP.1808...\n", + "Downloading waveform for NP_1808_2019-07-04T17:33:52.487446Z\n", + "Skipping NP_1808_2019-07-04T17:33:52.487446Z\n", + "Processing NP.1809...\n", + "Reading cached waveform\n", + "Processing NP.262...\n", + "Downloading waveform for NP_262_2019-07-04T17:33:54.156962Z\n", + "Skipping NP_262_2019-07-04T17:33:54.156962Z\n", + "Processing NP.5029...\n", + "Downloading waveform for NP_5029_2019-07-04T17:33:54.407584Z\n", + "Skipping NP_5029_2019-07-04T17:33:54.407584Z\n", + "Processing NP.5031...\n", + "Downloading waveform for NP_5031_2019-07-04T17:33:55.297413Z\n", + "Skipping NP_5031_2019-07-04T17:33:55.297413Z\n", + "Processing NP.5419...\n", + "Reading cached waveform\n", + "Processing NP.5420...\n", + "Downloading waveform for NP_5420_2019-07-04T17:33:56.859872Z\n", + "Skipping NP_5420_2019-07-04T17:33:56.859872Z\n", + "Processing NP.5480...\n", + "Downloading waveform for NP_5480_2019-07-04T17:33:54.127751Z\n", + "Skipping NP_5480_2019-07-04T17:33:54.127751Z\n", + "Processing NP.5481...\n", + "Downloading waveform for NP_5481_2019-07-04T17:33:55.578047Z\n", + "Skipping NP_5481_2019-07-04T17:33:55.578047Z\n", + "Processing PB.B916...\n", + "Reading cached waveform\n", + "Processing PB.B917...\n", + "Reading cached waveform\n", + "Processing PB.B918...\n", + "Reading cached waveform\n", + "Processing PB.B921...\n", + "Reading cached waveform\n", + "Processing SN.AMD...\n", + "Reading cached waveform\n", + "Processing SN.BTW...\n", + "Reading cached waveform\n", + "Processing SN.DOM...\n", + "Reading cached waveform\n", + "Processing SN.HEL...\n", + "Reading cached waveform\n", + "Added SN.HEL to the list of waveforms\n", + "Processing SN.LEC...\n", + "Reading cached waveform\n", + "Processing SN.SGR...\n", + "Reading cached waveform\n", + "Processing SN.SW353...\n", + "Reading cached waveform\n", + "Processing SN.SW435...\n", + "Reading cached waveform\n", + "Processing SN.SW511...\n", + "Reading cached waveform\n", + "Processing SN.TIM...\n", + "Reading cached waveform\n", + "Processing SN.WESTB...\n", + "Reading cached waveform\n", + "Processing SN.WESTC...\n", + "Reading cached waveform\n", + "Processing SN.WESTD...\n", + "Reading cached waveform\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:301: FutureWarning: The input object of type 'Tensor' is an array-like implementing one of the corresponding protocols (`__array__`, `__array_interface__` or `__array_struct__`); but not a sequence (or 0-D). In the future, this object will be coerced as if it was first converted using `np.array(obj)`. To retain the old behaviour, you have to either modify the type 'Tensor', or assign to an empty array created with `np.empty(correct_shape, dtype=object)`.\n", + " waveforms = np.array(waveforms)[selection_indexes]\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:301: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", + " waveforms = np.array(waveforms)[selection_indexes]\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:308: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + " waveforms = [torch.tensor(waveform) for waveform in waveforms]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting to run predictions\n", + "Starting plotting 15 waveforms\n", + "Fetching topography\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/anovosel/miniconda3/envs/phasehunter/lib/python3.11/site-packages/bmi_topography/api_key.py:49: UserWarning: You are using a demo key to fetch data from OpenTopography, functionality will be limited. See https://bmi-topography.readthedocs.io/en/latest/#api-key for more information.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Plotting topo\n", + "Plotting waveform 1/15\n", + "Station 36.277, -117.593697 has P velocity nan and S velocity nan\n", + "Plotting waveform 2/15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 35.66278, -118.47403 has P velocity 5.509786370336251 and S velocity 2.9747824951914903\n", + "Plotting waveform 3/15\n", + "Station 35.98249, -117.80885 has P velocity 4.130917960194064 and S velocity 2.262643275505274\n", + "Plotting waveform 4/15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 36.186001, -116.6698 has P velocity 6.119231109018811 and S velocity 3.5120359625275515\n", + "Plotting waveform 5/15\n", + "Station 36.645401, -116.338799 has P velocity 6.418864645982177 and S velocity 3.40318240942485\n", + "Plotting waveform 6/15\n", + "Station 34.875332, -116.996841 has P velocity 6.553167458647257 and S velocity 3.7407386971609977\n", + "Plotting waveform 7/15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 35.965, -116.869102 has P velocity 6.441474783566184 and S velocity 3.6633153313634157\n", + "Plotting waveform 8/15\n", + "Station 35.69235, -117.75051 has P velocity 3.4203901487527526 and S velocity 1.680319839371246\n", + "Plotting waveform 9/15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 36.439049, -118.080498 has P velocity 5.286053905666142 and S velocity 3.0215671601782677\n", + "Plotting waveform 10/15\n", + "Station 35.899529, -116.275299 has P velocity 6.306307564126418 and S velocity 3.5668976471999314\n", + "Plotting waveform 11/15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 34.6145, -118.7235 has P velocity nan and S velocity nan\n", + "Plotting waveform 12/15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 34.550461, -117.433907 has P velocity 6.294295200951223 and S velocity 3.416110775195922\n", + "Plotting waveform 13/15\n", + "Station 34.8811, -117.993881 has P velocity 6.080147521998276 and S velocity 3.3534711002313884\n", + "Plotting waveform 14/15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Station 34.8294, -116.335 has P velocity 6.6093598323533715 and S velocity 3.7813786210938956\n", + "Plotting waveform 15/15\n", + "Station 36.11758, -117.85486 has P velocity 4.7426953739315625 and S velocity 2.6477379954424243\n", + "Plotting stations\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:393: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " output_picks = output_picks.append(pd.DataFrame({'station_name': [names[i]],\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:413: UserWarning: FixedFormatter should only be used together with FixedLocator\n", + " ax[i].set_xticklabels(ax[i].get_xticks(), rotation = 50)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n", + "/var/folders/_g/3q5q8_dj0ydcpktxlwxb5vrh0000gq/T/ipykernel_21875/2718049065.py:593: MatplotlibDeprecationWarning: Unable to determine Axes to steal space for Colorbar. Using gca(), but will raise in the future. Either provide the *cax* argument to use as the Axes for the Colorbar, provide the *ax* argument to steal space from it, or add *mappable* to an Axes.\n", + " plt.colorbar(m)\n" + ] } ], "source": [ @@ -47,6 +749,8 @@ "\n", "from scipy.stats import gaussian_kde\n", "from scipy.signal import resample\n", + "from scipy.interpolate import interp1d\n", + "\n", "from bmi_topography import Topography\n", "import earthpy.spatial as es\n", "\n", @@ -473,16 +1177,58 @@ "\n", "import numpy as np\n", "from matplotlib import colors, cm\n", + "from scipy.interpolate import griddata\n", + "\n", + "def interpolate_vel_model(velocity_model, initial_velocity, lat_values, lon_values, depth_values, n_lat, n_lon, n_depth):\n", + " # Create a mask for points with the initial velocity\n", + " initial_velocity_mask = (velocity_model == initial_velocity)\n", + "\n", + " # Find the indices of points with non-initial velocities\n", + " non_initial_velocity_indices = np.argwhere(~initial_velocity_mask)\n", + "\n", + " # Extract the coordinates and corresponding velocities of the known points\n", + " known_points = np.column_stack([lat_values[non_initial_velocity_indices[:, 0]],\n", + " lon_values[non_initial_velocity_indices[:, 1]],\n", + " depth_values[non_initial_velocity_indices[:, 2]]])\n", + " \n", + " # Find the maximum depth in the known_points\n", + " max_known_depth = np.max(known_points[:, 2])\n", + "\n", + " known_velocities = velocity_model[~initial_velocity_mask]\n", + "\n", + " # Create a grid of points for the entire volume\n", + " grid_points = np.array(np.meshgrid(lat_values, lon_values, depth_values, indexing='ij')).reshape(3, -1).T\n", + "\n", + " # Create a mask for grid points that are deeper than the maximum known depth\n", + " depth_mask = grid_points[:, 2] <= max_known_depth\n", + "\n", + " # Interpolate the velocities at the grid points\n", + " interpolated_velocities = griddata(known_points, known_velocities, grid_points[depth_mask], method='linear')\n", + "\n", + " # Fill nan values with the nearest known velocities\n", + " interpolated_velocities_filled = griddata(known_points, known_velocities, grid_points[depth_mask], method='nearest')\n", + " interpolated_velocities[np.isnan(interpolated_velocities)] = interpolated_velocities_filled[np.isnan(interpolated_velocities)]\n", + "\n", + " # Initialize an array with the same length as grid_points and fill it with nan values\n", + " interpolated_velocities_with_depth_limit = np.full(grid_points.shape[0], np.nan)\n", + "\n", + " # Update the array with the interpolated velocities for the masked grid points\n", + " interpolated_velocities_with_depth_limit[depth_mask] = interpolated_velocities\n", + "\n", + " # Reshape the interpolated velocities to match the shape of the velocity_model\n", + " interpolated_velocity_model = interpolated_velocities_with_depth_limit.reshape(n_lat, n_lon, n_depth)\n", + "\n", + " return interpolated_velocity_model\n", + "\n", "\n", "# Function to find the closest index for a given value in an array\n", "def find_closest_index(array, value):\n", " return np.argmin(np.abs(array - value))\n", "\n", - "def compute_velocity_model(azimuth, elevation):\n", + "def compute_velocity_model(azimuth, elevation, interpolate, n_lat, n_lon, n_depth):\n", " filename = list(output_csv.temp_files)[0]\n", " \n", " df = pd.read_csv(filename)\n", - " print(df)\n", " filename = filename.split('/')[-1]\n", " \n", " # Current EQ location\n", @@ -496,11 +1242,10 @@ " depth_range = (0, 50)\n", "\n", " # Define the number of nodes in each dimension\n", - " n_lat = 10\n", - " n_lon = 10\n", - " n_depth = 10\n", " num_points = 100\n", "\n", + " taup_model = TauPyModel(model='1066a')\n", + "\n", " # Create the grid\n", " lat_values = np.linspace(lat_range[0], lat_range[1], n_lat)\n", " lon_values = np.linspace(lon_range[0], lon_range[1], n_lon)\n", @@ -513,23 +1258,36 @@ " # Loop through the stations and update the velocity model\n", " for i in range(len(df)):\n", " if ~np.isnan(df['velocity_p, km/s'].iloc[i]):\n", - " # Interpolate coordinates along the great circle path between the earthquake and the station\n", - " lon_deg = np.linspace(df.st_lon.iloc[i], eq_lon, num_points)\n", - " lat_deg = np.linspace(df.st_lat.iloc[i], eq_lat, num_points)\n", - " depth_interpolated = np.interp(np.linspace(0, 1, num_points), [0, 1], [eq_depth, 0])\n", - "\n", - " # Loop through the interpolated coordinates and update the grid cells with the average P-wave velocity\n", - " for lat, lon, depth in zip(lat_deg, lon_deg, depth_interpolated):\n", - " lat_index = find_closest_index(lat_values, lat)\n", - " lon_index = find_closest_index(lon_values, lon)\n", - " depth_index = find_closest_index(depth_values, depth)\n", - " \n", - " if velocity_model[lat_index, lon_index, depth_index] == initial_velocity:\n", - " velocity_model[lat_index, lon_index, depth_index] = df['velocity_p, km/s'].iloc[i]\n", - " else:\n", - " velocity_model[lat_index, lon_index, depth_index] = (velocity_model[lat_index, lon_index, depth_index] +\n", - " df['velocity_p, km/s'].iloc[i]) / 2\n", + "\n", + " ray_path = taup_model.get_ray_paths_geo(source_depth_in_km=eq_depth,\n", + " source_latitude_in_deg=eq_lat,\n", + " source_longitude_in_deg=eq_lon,\n", + " receiver_latitude_in_deg=df.st_lat.iloc[i],\n", + " receiver_longitude_in_deg=df.st_lon.iloc[i],\n", + " phase_list=['P', 'S'])\n", + "\n", + " # Create the interpolator objects for latitude, longitude, and depth\n", + " interp_latitude = interp1d(np.linspace(0, ray_path[0].path['lat'].max(), len(ray_path[0].path['lat'])), ray_path[0].path['lat'])\n", + " interp_longitude = interp1d(np.linspace(0, ray_path[0].path['lon'].max(), len(ray_path[0].path['lon'])), ray_path[0].path['lon'])\n", + " interp_depth = interp1d(np.linspace(0, ray_path[0].path['depth'].max(), len(ray_path[0].path['depth'])), ray_path[0].path['depth'])\n", + "\n", + " # Resample the ray path to N points\n", + " lat_values_interp = interp_latitude(np.linspace(0, ray_path[0].path['lat'].max(), num_points))\n", + " lon_values_interp = interp_longitude(np.linspace(0, ray_path[0].path['lon'].max(), num_points))\n", + " depth_values_interp = interp_depth(np.linspace(0, ray_path[0].path['depth'].max(), num_points))\n", + "\n", + " # Loop through the interpolated coordinates and update the grid cells with the average P-wave velocity\n", + " for lat, lon, depth in zip(lat_values_interp, lon_values_interp, depth_values_interp):\n", + " lat_index = find_closest_index(lat_values, lat)\n", + " lon_index = find_closest_index(lon_values, lon)\n", + " depth_index = find_closest_index(depth_values, depth)\n", " \n", + " if velocity_model[lat_index, lon_index, depth_index] == initial_velocity:\n", + " velocity_model[lat_index, lon_index, depth_index] = df['velocity_p, km/s'].iloc[i]\n", + " else:\n", + " velocity_model[lat_index, lon_index, depth_index] = (velocity_model[lat_index, lon_index, depth_index] +\n", + " df['velocity_p, km/s'].iloc[i]) / 2\n", + "\n", " # Create the figure and axis\n", " fig = plt.figure(figsize=(8, 8))\n", " ax = fig.add_subplot(111, projection='3d')\n", @@ -553,11 +1311,16 @@ " )\n", "\n", " # Create the color array\n", - " norm = plt.Normalize(vmin=velocity_model.min(), vmax=velocity_model.max())\n", - " colors = plt.cm.plasma(norm(velocity_model))\n", - "\n", + " norm = plt.Normalize(vmin=2, vmax=8)\n", + " colors_vel = plt.cm.plasma(norm(velocity_model)) \n", + " \n", " # Plot the voxels\n", - " ax.voxels(x, y, z, velocity_model > 0, facecolors=colors, alpha=0.5, edgecolor='k')\n", + " if interpolate:\n", + " interpolated_velocity_model = interpolate_vel_model(velocity_model, initial_velocity, lat_values, lon_values, depth_values, n_lat, n_lon, n_depth)\n", + " colors_interp = plt.cm.plasma(norm(interpolated_velocity_model))\n", + " ax.voxels(x, y, z, interpolated_velocity_model > 0, facecolors=colors_interp, alpha=0.5, edgecolor='k')\n", + " \n", + " ax.voxels(x, y, z, velocity_model > 0, facecolors=colors_vel, alpha=1, edgecolor='black')\n", "\n", " # Set the view angle\n", " ax.view_init(elev=elevation, azim=azimuth)\n", @@ -623,7 +1386,7 @@ " P_thres_inputs = gr.Slider(minimum=0.01,\n", " maximum=1,\n", " value=0.1,\n", - " label=\"P uncertainty threshold, s\",\n", + " label=\"P uncertainty threshold (s)\",\n", " step=0.01,\n", " info=\"Acceptable uncertainty for P picks expressed in std() seconds\",\n", " interactive=True,\n", @@ -632,13 +1395,13 @@ " S_thres_inputs = gr.Slider(minimum=0.01,\n", " maximum=1,\n", " value=0.2,\n", - " label=\"S uncertainty threshold, s\",\n", + " label=\"S uncertainty threshold (s)\",\n", " step=0.01,\n", " info=\"Acceptable uncertainty for S picks expressed in std() seconds\",\n", " interactive=True,\n", " )\n", " with gr.Column(scale=1):\n", - " upload = gr.File(label=\"Or upload your own waveform\")\n", + " upload = gr.File(label=\"Upload your waveform\")\n", " with gr.Row():\n", " sampling_rate_inputs = gr.Slider(minimum=10,\n", " maximum=1000,\n", @@ -768,26 +1531,351 @@ " \n", " with gr.Row():\n", " with gr.Column(scale=2):\n", - " inputs_vel_model = [\n", - " gr.Slider(minimum=-180, maximum=180, value=0, step=5, label=\"Azimuth\", interactive=True),\n", - " gr.Slider(minimum=-90, maximum=90, value=30, step=5, label=\"Elevation\", interactive=True)\n", - " ]\n", + " azimuth_input = gr.Slider(minimum=-180, maximum=180, value=0, step=5, label=\"Azimuth\", interactive=True)\n", + " elevation_input = gr.Slider(minimum=-90, maximum=90, value=30, step=5, label=\"Elevation\", interactive=True)\n", + "\n", + " with gr.Row():\n", + " interpolate_input = gr.Checkbox(label=\"Interpolate\", info=\"Interpolate velocity model\")\n", + " n_lat_input = gr.Slider(minimum=5, maximum=100, value=50, step=5, label=\"N lat\", info='Number of Lat grid points', interactive=True)\n", + " n_lon_input = gr.Slider(minimum=5, maximum=100, value=50, step=5, label=\"N lon\", info='Number of Lon grid points', interactive=True)\n", + " n_depth_input = gr.Slider(minimum=5, maximum=100, value=50, step=5, label=\"N depth\", info='Number of Depth grid points', interactive=True)\n", + " \n", " button = gr.Button(\"Look at 3D Velocities\")\n", " outputs_vel_model = gr.Image(label=\"3D Velocity Model\")\n", "\n", - " button.click(compute_velocity_model, \n", - " inputs=inputs_vel_model, \n", - " outputs=outputs_vel_model)\n", + " button.click(compute_velocity_model, \n", + " inputs=[azimuth_input, elevation_input, \n", + " interpolate_input, n_lat_input, \n", + " n_lon_input, n_depth_input], \n", + " outputs=[outputs_vel_model])\n", "\n", "demo.launch()" ] }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['__class__',\n", + " '__delattr__',\n", + " '__dict__',\n", + " '__dir__',\n", + " '__doc__',\n", + " '__eq__',\n", + " '__format__',\n", + " '__ge__',\n", + " '__getattribute__',\n", + " '__getstate__',\n", + " '__gt__',\n", + " '__hash__',\n", + " '__init__',\n", + " '__init_subclass__',\n", + " '__le__',\n", + " '__lt__',\n", + " '__module__',\n", + " '__ne__',\n", + " '__new__',\n", + " '__reduce__',\n", + " '__reduce_ex__',\n", + " '__repr__',\n", + " '__setattr__',\n", + " '__sizeof__',\n", + " '__str__',\n", + " '__subclasshook__',\n", + " '__weakref__',\n", + " 'azimuth',\n", + " 'distance',\n", + " 'incident_angle',\n", + " 'name',\n", + " 'path',\n", + " 'phase',\n", + " 'pierce',\n", + " 'purist_dist',\n", + " 'purist_distance',\n", + " 'purist_name',\n", + " 'ray_param',\n", + " 'ray_param_index',\n", + " 'ray_param_sec_degree',\n", + " 'receiver_depth',\n", + " 'source_depth',\n", + " 'takeoff_angle',\n", + " 'time']" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dir(ray_path[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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OBX5pWRMCdgENre37a0/ERGR4UOBlBwjKfCawZS0m0tljNv2FmBrfhMRERlGihZI3X777cydO5dIJEJlZWWnZa699lpmzZpFMBikpqamw/FVq1ZhjOmwlZSUHPH669evZ+bMmYRCIcaNG8c111xTOPb0009z0UUXUV1dTUlJCTU1NWzYsKHD+R++biik/Eldsikg18XSMgbwY714vzdLRESkmIo2RyqdTrNo0SLmzJnD2rVruyy3bNkynn/+eV555ZUOx2666SauvvrqdvvOOeccTj/99G6vfdddd3HnnXdyxx13MHv2bFpaWnj77bcLx5977jlmzpzJP/7jPzJ+/HgeeeQRrrzySioqKrjwwgsL5crLy9m+fXvhcz4gkM5ZCnOiOmNMWxkREZHho2iB1G233Qbke3a6cs899wCwd+/eTgOp0tJSSktLC5+3bt3K66+/zr333ttlnQcPHuQb3/gGDz/8MOecc05h/8yZMwv//+abb253znXXXccTTzzBL37xi3aBlDGGCRMmdHktOVz+PyVrbecBp82CU9pxv4iIyBA2pOZIrVmzhmnTpjFv3rwuyzz55JN4nse7777LKaecwsSJE7n00kvZtWtXt3VHo1FGjx7dbl88HmfKlClMmjSJiy66iNdee+2IbUylUsRisXbbiGDC+aVjbEuHQ9amAAfjHHlIVkREZCgZMoFUMplkw4YNLF++vNtyb731Fp7n8e1vf5u7776bn/3sZxw4cIDzzjuPdDrd6TkbN27kv//7v/nyl79c2HfyySezbt06fvnLX/KjH/0Iz/OYO3cu77zzTrfXX716NRUVFYVt0qRJvb/ZIcgYF+OMAVysF8PaBNamsF5zPqmnMwpjwgPdTBERkWOqV4HUihUrOp38ffi2bdu2ojR006ZNNDc3s2TJkm7LeZ5HJpPhnnvuYcGCBZx55pn85Cc/YceOHdTW1nYoX1tby5e//GX+8z//k1NPPbWwf86cOVx55ZXU1NQwf/58fvGLX1BVVcX3v//9bq+/cuVKotFoYTtST9hwYpwIxncctAVUADjlGLcaxx01oG0TEREphl7NkbrxxhtZunRpt2WmTp16NO3p0po1a7jwwgsZP358t+Wqq6sBmDFjRmFfVVUVY8eOpaGhoV3ZZ555hs997nP867/+K1deeWW39fr9fk477TR27tzZbblgMEgw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IiLSI67j8LUvfZozak4A8oHT4UrCQc4546P4HUMykcFa8HLgeBA70Mqrf2zgla0NxJqGz1t9yiNVZMojJSIiw43nWZ74f2/ws0de5L09UYIBH9NOqOKkSWMJuQYwZHIWP4ZMNkckEsDL5XBsPvI67rhKpp0ykXETKnCcwTnUN+B5pG6//Xbmzp1LJBKhsrKy0zLXXnsts2bNIhgMUlNT0+H4qlWrMMZ02EpKSrq99n//939zzjnnUFlZyahRo1iwYAFbt25tV+aVV15h3rx5hEIhJk2axD//8z93qOfBBx9k+vTphEIhPv7xj/PYY4/1+P5FRESGK8cxXDB/Bv/+T3/N3au+yJc/P5tPTDuOkrAfx+cjk7EEfC5ZL4fP55BszeDl8rmmjDG8s+sALz//Jm9ubxzyQ31FC6TS6TSLFi3ia1/7Wrflli1bxuLFizs9dtNNN7F79+5224wZM1i0aFGX9cXjcS644AImT57M888/z29/+1vKyspYsGABmUx+clwsFuP8889nypQpvPjii9xxxx2sWrWKH/zgB4V6nnvuOS677DKWL1/Oyy+/zMUXX8zFF1/Mq6++2oefhoiIyPATDPo56YTxzP7LqUyorsTzDMZAKOgnl83hug5gsXgYLMlEGmstjmOIxhK8uOVPPPeb19j3fnSgb6XPij60t379eq6//nqampq6LLNq1Soeeugh6urquq1r69at1NTU8OyzzzJv3rxOy7zwwgucfvrpNDQ0MGnSJAD++Mc/MnPmTHbs2MFJJ53E9773PW655RYaGxsJBAIArFixgoceeoht27YBsHjxYlpaWnjkkUcKdZ955pnU1NRw77339vj+NbQnIiIjQaw5wc439/DWm++TTmZwMFg8kon8IsfZdBbXdbA5S9O+GFt//xbv1u8DwO93mb9wJsuuP5/RVYPju3LAh/aKYc2aNUybNq3LIArg5JNPZsyYMaxdu5Z0Ok0ikWDt2rWccsopnHDCCQBs2bKFT3/604UgCmDBggVs376dgwcPFsqce+657epesGABW7Zs6baNqVSKWCzWbhMRERnuysvCnHrKRE47bTLlFRFy1mJwCAX9eDmLz/WBB+/9eT+/euC/ee/tfYVzM5kcTz1cxzWX/juN7x4YwLvovSETSCWTSTZs2MDy5cu7LVdWVsbTTz/Nj370I8LhMKWlpTz++OP8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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from scipy.interpolate import interp1d\n", + "\n", + "taup_model = TauPyModel(model='1066a')\n", + "\n", + "ray_path = taup_model.get_ray_paths_geo(source_depth_in_km=10,\n", + " source_latitude_in_deg=35.766,\n", + " source_longitude_in_deg=-117.605,\n", + " receiver_latitude_in_deg=35.98249,\n", + " receiver_longitude_in_deg=-117.80885,\n", + " phase_list=['P', 'S'])\n", + "\n", + "ray_path[0].path\n", + "\n", + "# Define the number of points N\n", + "N = 100\n", + "\n", + "# Create the interpolator objects for latitude, longitude, and depth\n", + "interp_latitude = interp1d(np.linspace(0, ray_path[0].path['lat'].max(), len(ray_path[0].path['lat'])), ray_path[0].path['lat'])\n", + "interp_longitude = interp1d(np.linspace(0, ray_path[0].path['lon'].max(), len(ray_path[0].path['lon'])), ray_path[0].path['lon'])\n", + "interp_depth = interp1d(np.linspace(0, ray_path[0].path['depth'].max(), len(ray_path[0].path['depth'])), ray_path[0].path['depth'])\n", + "\n", + "# Resample the ray path to N points\n", + "resampled_latitude = interp_latitude(np.linspace(0, ray_path[0].path['lat'].max(), N))\n", + "resampled_longitude = interp_longitude(np.linspace(0, ray_path[0].path['lon'].max(), N))\n", + "resampled_depth = interp_depth(np.linspace(0, ray_path[0].path['depth'].max(), N))\n", + "\n", + "plt.scatter(resampled_latitude, resampled_longitude, c=resampled_depth, cmap='viridis', alpha=0.1)\n", + "plt.scatter(ray_path[0].path['lat'], ray_path[0].path['lon'], c=ray_path[0].path['depth'], cmap='viridis')\n" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([(825.43624587, 0. , 0. , 10. , 35.766 , -117.605 ),\n", + " (825.43624587, 0.26845098, 0.00012109, 11. , 35.7715199 , -117.61017979),\n", + " (825.43624587, 1.63173458, 0.00177268, 11.01091139, 35.84678737, -117.68090241),\n", + " (825.43624587, 2.99501819, 0.00342427, 11. , 35.92201332, -117.75175935),\n", + " (825.43624587, 3.26346917, 0.00354535, 10. , 35.92752691, -117.75695956),\n", + " (825.43624587, 4.33607208, 0.00402859, 6.00385879, 35.94952856, -117.77772004),\n", + " (825.43624587, 4.47129397, 0.00408945, 5.5 , 35.9522991 , -117.78033535),\n", + " (825.43624587, 5.20940225, 0.00442139, 2.74941477, 35.96740958, -117.79460335),\n", + " (825.43624587, 5.57829224, 0.00458712, 1.37456112, 35.97495353, -117.80172933),\n", + " (825.43624587, 5.94707298, 0.0047527 , 0. , 35.98248996, -117.80884997)],\n", + " dtype=[('p', '" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def compute_velocity_model(azimuth, elevation, interpolate):\n", + " filename = list(output_csv.temp_files)[0]\n", + " \n", + " df = pd.read_csv(filename)\n", + " filename = filename.split('/')[-1]\n", + " \n", + " # Current EQ location\n", + " eq_lat = float(filename.split(\"_\")[0])\n", + " eq_lon = float(filename.split(\"_\")[1])\n", + " eq_depth = float(filename.split(\"_\")[2])\n", + "\n", + " # Define the region of interest (latitude, longitude, and depth ranges)\n", + " lat_range = (np.min([df.st_lat.min(), eq_lat]), np.max([df.st_lat.max(), eq_lat]))\n", + " lon_range = (np.min([df.st_lon.min(), eq_lon]), np.max([df.st_lon.max(), eq_lon]))\n", + " depth_range = (0, 50)\n", + "\n", + " # Define the number of nodes in each dimension\n", + " n_lat = 10\n", + " n_lon = 10\n", + " n_depth = 10\n", + " num_points = 100\n", + "\n", + " taup_model = TauPyModel(model='1066a')\n", + "\n", + " # Create the grid\n", + " lat_values = np.linspace(lat_range[0], lat_range[1], n_lat)\n", + " lon_values = np.linspace(lon_range[0], lon_range[1], n_lon)\n", + " depth_values = np.linspace(depth_range[0], depth_range[1], n_depth)\n", + "\n", + " # Initialize the velocity model with constant values\n", + " initial_velocity = 0 # km/s, this can be P-wave or S-wave velocity\n", + " velocity_model = np.full((n_lat, n_lon, n_depth), initial_velocity, dtype=float)\n", + "\n", + " # Loop through the stations and update the velocity model\n", + " for i in range(len(df)):\n", + " if ~np.isnan(df['velocity_p, km/s'].iloc[i]):\n", + "\n", + " ray_path = taup_model.get_ray_paths_geo(source_depth_in_km=eq_depth,\n", + " source_latitude_in_deg=eq_lat,\n", + " source_longitude_in_deg=eq_lon,\n", + " receiver_latitude_in_deg=df.st_lat.iloc[i],\n", + " receiver_longitude_in_deg=df.st_lon.iloc[i],\n", + " phase_list=['P', 'S'])\n", + "\n", + " # Create the interpolator objects for latitude, longitude, and depth\n", + " interp_latitude = interp1d(np.linspace(0, ray_path[0].path['lat'].max(), len(ray_path[0].path['lat'])), ray_path[0].path['lat'])\n", + " interp_longitude = interp1d(np.linspace(0, ray_path[0].path['lon'].max(), len(ray_path[0].path['lon'])), ray_path[0].path['lon'])\n", + " interp_depth = interp1d(np.linspace(0, ray_path[0].path['depth'].max(), len(ray_path[0].path['depth'])), ray_path[0].path['depth'])\n", + "\n", + " # Resample the ray path to N points\n", + " lat_values_interp = interp_latitude(np.linspace(0, ray_path[0].path['lat'].max(), num_points))\n", + " lon_values_interp = interp_longitude(np.linspace(0, ray_path[0].path['lon'].max(), num_points))\n", + " depth_values_interp = interp_depth(np.linspace(0, ray_path[0].path['depth'].max(), num_points))\n", + "\n", + " # Loop through the interpolated coordinates and update the grid cells with the average P-wave velocity\n", + " for lat, lon, depth in zip(lat_values_interp, lon_values_interp, depth_values_interp):\n", + " lat_index = find_closest_index(lat_values, lat)\n", + " lon_index = find_closest_index(lon_values, lon)\n", + " depth_index = find_closest_index(depth_values, depth)\n", + " \n", + " if velocity_model[lat_index, lon_index, depth_index] == initial_velocity:\n", + " velocity_model[lat_index, lon_index, depth_index] = df['velocity_p, km/s'].iloc[i]\n", + " else:\n", + " velocity_model[lat_index, lon_index, depth_index] = (velocity_model[lat_index, lon_index, depth_index] +\n", + " df['velocity_p, km/s'].iloc[i]) / 2\n", + "\n", + " # Create the figure and axis\n", + " fig = plt.figure(figsize=(8, 8))\n", + " ax = fig.add_subplot(111, projection='3d')\n", + "\n", + " # Set the plot limits\n", + " ax.set_xlim3d(lat_range[0], lat_range[1])\n", + " ax.set_ylim3d(lon_range[0], lon_range[1])\n", + " ax.set_zlim3d(depth_range[1], depth_range[0])\n", + "\n", + " ax.set_xlabel('Latitude')\n", + " ax.set_ylabel('Longitude')\n", + " ax.set_zlabel('Depth (km)')\n", + " ax.set_title('Velocity Model')\n", + " \n", + " # Create the meshgrid\n", + " x, y, z = np.meshgrid(\n", + " np.linspace(lat_range[0], lat_range[1], velocity_model.shape[0]+1),\n", + " np.linspace(lon_range[0], lon_range[1], velocity_model.shape[1]+1),\n", + " np.linspace(depth_range[0], depth_range[1], velocity_model.shape[2]+1),\n", + " indexing='ij'\n", + " )\n", + "\n", + " # Create the color array\n", + " norm = plt.Normalize(vmin=2, vmax=8)\n", + " colors_vel = plt.cm.plasma(norm(velocity_model)) \n", + " \n", + " # Plot the voxels\n", + " if interpolate:\n", + " interpolated_velocity_model = interpolate_vel_model(velocity_model, initial_velocity, lat_values, lon_values, depth_values, n_lat, n_lon, n_depth)\n", + " colors_interp = plt.cm.plasma(norm(interpolated_velocity_model))\n", + " ax.voxels(x, y, z, interpolated_velocity_model > 0, facecolors=colors_interp, alpha=0.5, edgecolor='k')\n", + " \n", + " ax.voxels(x, y, z, velocity_model > 0, facecolors=colors_vel, alpha=1, edgecolor='black')\n", + "\n", + " # Set the view angle\n", + " ax.view_init(elev=elevation, azim=azimuth)\n", + "\n", + "\n", + "compute_velocity_model(0, 40, False)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "35.766_-117.605_10.0_2019-07-04 17:33:49_3.csv\n", + "35.766_-117.605_10.0_2019-07-04T17:33:49-00_3.csv\n", + "35.766_-117.605_2019-07-04 17:33:49_3.csv\n", + "35.766_-117.605_2019-07-04 17:33:49_9.csv\n", + "current_vel_model.csv\n", + "testt\n" + ] + } + ], + "source": [ + "!ls data/velocity" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "35.766_-117.605_10.0_2019-07-04 17:33:49_3.csv\n", + "35.766_-117.605_10.0_2019-07-04T17:33:49-00_3.csv\n", + "35.766_-117.605_2019-07-04 17:33:49_3.csv\n", + "35.766_-117.605_2019-07-04 17:33:49_9.csv\n", + "current_vel_model.csv\n", + "testt\n" + ] + } + ], + "source": [ + "!ls '/Users/anovosel/Documents/phase-hunter/data/velocity'" + ] } ], "metadata": { diff --git a/app.py b/app.py index 9735cc0285a678f10f3234cc32861dc1e061c7cc..d9696e80db02595bd80ad79565e84388bebfa08e 100644 --- a/app.py +++ b/app.py @@ -9,6 +9,8 @@ import io from scipy.stats import gaussian_kde from scipy.signal import resample +from scipy.interpolate import interp1d + from bmi_topography import Topography import earthpy.spatial as es @@ -435,16 +437,58 @@ def predict_on_section(client_name, timestamp, eq_lat, eq_lon, radius_km, source import numpy as np from matplotlib import colors, cm +from scipy.interpolate import griddata + +def interpolate_vel_model(velocity_model, initial_velocity, lat_values, lon_values, depth_values, n_lat, n_lon, n_depth): + # Create a mask for points with the initial velocity + initial_velocity_mask = (velocity_model == initial_velocity) + + # Find the indices of points with non-initial velocities + non_initial_velocity_indices = np.argwhere(~initial_velocity_mask) + + # Extract the coordinates and corresponding velocities of the known points + known_points = np.column_stack([lat_values[non_initial_velocity_indices[:, 0]], + lon_values[non_initial_velocity_indices[:, 1]], + depth_values[non_initial_velocity_indices[:, 2]]]) + + # Find the maximum depth in the known_points + max_known_depth = np.max(known_points[:, 2]) + + known_velocities = velocity_model[~initial_velocity_mask] + + # Create a grid of points for the entire volume + grid_points = np.array(np.meshgrid(lat_values, lon_values, depth_values, indexing='ij')).reshape(3, -1).T + + # Create a mask for grid points that are deeper than the maximum known depth + depth_mask = grid_points[:, 2] <= max_known_depth + + # Interpolate the velocities at the grid points + interpolated_velocities = griddata(known_points, known_velocities, grid_points[depth_mask], method='linear') + + # Fill nan values with the nearest known velocities + interpolated_velocities_filled = griddata(known_points, known_velocities, grid_points[depth_mask], method='nearest') + interpolated_velocities[np.isnan(interpolated_velocities)] = interpolated_velocities_filled[np.isnan(interpolated_velocities)] + + # Initialize an array with the same length as grid_points and fill it with nan values + interpolated_velocities_with_depth_limit = np.full(grid_points.shape[0], np.nan) + + # Update the array with the interpolated velocities for the masked grid points + interpolated_velocities_with_depth_limit[depth_mask] = interpolated_velocities + + # Reshape the interpolated velocities to match the shape of the velocity_model + interpolated_velocity_model = interpolated_velocities_with_depth_limit.reshape(n_lat, n_lon, n_depth) + + return interpolated_velocity_model + # Function to find the closest index for a given value in an array def find_closest_index(array, value): return np.argmin(np.abs(array - value)) -def compute_velocity_model(azimuth, elevation): +def compute_velocity_model(azimuth, elevation, interpolate, n_lat, n_lon, n_depth): filename = list(output_csv.temp_files)[0] df = pd.read_csv(filename) - print(df) filename = filename.split('/')[-1] # Current EQ location @@ -458,11 +502,10 @@ def compute_velocity_model(azimuth, elevation): depth_range = (0, 50) # Define the number of nodes in each dimension - n_lat = 10 - n_lon = 10 - n_depth = 10 num_points = 100 + taup_model = TauPyModel(model='1066a') + # Create the grid lat_values = np.linspace(lat_range[0], lat_range[1], n_lat) lon_values = np.linspace(lon_range[0], lon_range[1], n_lon) @@ -475,23 +518,36 @@ def compute_velocity_model(azimuth, elevation): # Loop through the stations and update the velocity model for i in range(len(df)): if ~np.isnan(df['velocity_p, km/s'].iloc[i]): - # Interpolate coordinates along the great circle path between the earthquake and the station - lon_deg = np.linspace(df.st_lon.iloc[i], eq_lon, num_points) - lat_deg = np.linspace(df.st_lat.iloc[i], eq_lat, num_points) - depth_interpolated = np.interp(np.linspace(0, 1, num_points), [0, 1], [eq_depth, 0]) - - # Loop through the interpolated coordinates and update the grid cells with the average P-wave velocity - for lat, lon, depth in zip(lat_deg, lon_deg, depth_interpolated): - lat_index = find_closest_index(lat_values, lat) - lon_index = find_closest_index(lon_values, lon) - depth_index = find_closest_index(depth_values, depth) - - if velocity_model[lat_index, lon_index, depth_index] == initial_velocity: - velocity_model[lat_index, lon_index, depth_index] = df['velocity_p, km/s'].iloc[i] - else: - velocity_model[lat_index, lon_index, depth_index] = (velocity_model[lat_index, lon_index, depth_index] + - df['velocity_p, km/s'].iloc[i]) / 2 + + ray_path = taup_model.get_ray_paths_geo(source_depth_in_km=eq_depth, + source_latitude_in_deg=eq_lat, + source_longitude_in_deg=eq_lon, + receiver_latitude_in_deg=df.st_lat.iloc[i], + receiver_longitude_in_deg=df.st_lon.iloc[i], + phase_list=['P', 'S']) + + # Create the interpolator objects for latitude, longitude, and depth + interp_latitude = interp1d(np.linspace(0, ray_path[0].path['lat'].max(), len(ray_path[0].path['lat'])), ray_path[0].path['lat']) + interp_longitude = interp1d(np.linspace(0, ray_path[0].path['lon'].max(), len(ray_path[0].path['lon'])), ray_path[0].path['lon']) + interp_depth = interp1d(np.linspace(0, ray_path[0].path['depth'].max(), len(ray_path[0].path['depth'])), ray_path[0].path['depth']) + + # Resample the ray path to N points + lat_values_interp = interp_latitude(np.linspace(0, ray_path[0].path['lat'].max(), num_points)) + lon_values_interp = interp_longitude(np.linspace(0, ray_path[0].path['lon'].max(), num_points)) + depth_values_interp = interp_depth(np.linspace(0, ray_path[0].path['depth'].max(), num_points)) + + # Loop through the interpolated coordinates and update the grid cells with the average P-wave velocity + for lat, lon, depth in zip(lat_values_interp, lon_values_interp, depth_values_interp): + lat_index = find_closest_index(lat_values, lat) + lon_index = find_closest_index(lon_values, lon) + depth_index = find_closest_index(depth_values, depth) + if velocity_model[lat_index, lon_index, depth_index] == initial_velocity: + velocity_model[lat_index, lon_index, depth_index] = df['velocity_p, km/s'].iloc[i] + else: + velocity_model[lat_index, lon_index, depth_index] = (velocity_model[lat_index, lon_index, depth_index] + + df['velocity_p, km/s'].iloc[i]) / 2 + # Create the figure and axis fig = plt.figure(figsize=(8, 8)) ax = fig.add_subplot(111, projection='3d') @@ -515,11 +571,16 @@ def compute_velocity_model(azimuth, elevation): ) # Create the color array - norm = plt.Normalize(vmin=velocity_model.min(), vmax=velocity_model.max()) - colors = plt.cm.plasma(norm(velocity_model)) - + norm = plt.Normalize(vmin=2, vmax=8) + colors_vel = plt.cm.plasma(norm(velocity_model)) + # Plot the voxels - ax.voxels(x, y, z, velocity_model > 0, facecolors=colors, alpha=0.5, edgecolor='k') + if interpolate: + interpolated_velocity_model = interpolate_vel_model(velocity_model, initial_velocity, lat_values, lon_values, depth_values, n_lat, n_lon, n_depth) + colors_interp = plt.cm.plasma(norm(interpolated_velocity_model)) + ax.voxels(x, y, z, interpolated_velocity_model > 0, facecolors=colors_interp, alpha=0.5, edgecolor='k') + + ax.voxels(x, y, z, velocity_model > 0, facecolors=colors_vel, alpha=1, edgecolor='black') # Set the view angle ax.view_init(elev=elevation, azim=azimuth) @@ -585,7 +646,7 @@ with gr.Blocks() as demo: P_thres_inputs = gr.Slider(minimum=0.01, maximum=1, value=0.1, - label="P uncertainty threshold, s", + label="P uncertainty threshold (s)", step=0.01, info="Acceptable uncertainty for P picks expressed in std() seconds", interactive=True, @@ -594,13 +655,13 @@ with gr.Blocks() as demo: S_thres_inputs = gr.Slider(minimum=0.01, maximum=1, value=0.2, - label="S uncertainty threshold, s", + label="S uncertainty threshold (s)", step=0.01, info="Acceptable uncertainty for S picks expressed in std() seconds", interactive=True, ) with gr.Column(scale=1): - upload = gr.File(label="Or upload your own waveform") + upload = gr.File(label="Upload your waveform") with gr.Row(): sampling_rate_inputs = gr.Slider(minimum=10, maximum=1000, @@ -730,15 +791,22 @@ with gr.Blocks() as demo: with gr.Row(): with gr.Column(scale=2): - inputs_vel_model = [ - gr.Slider(minimum=-180, maximum=180, value=0, step=5, label="Azimuth", interactive=True), - gr.Slider(minimum=-90, maximum=90, value=30, step=5, label="Elevation", interactive=True) - ] + azimuth_input = gr.Slider(minimum=-180, maximum=180, value=0, step=5, label="Azimuth", interactive=True) + elevation_input = gr.Slider(minimum=-90, maximum=90, value=30, step=5, label="Elevation", interactive=True) + + with gr.Row(): + interpolate_input = gr.Checkbox(label="Interpolate", info="Interpolate velocity model") + n_lat_input = gr.Slider(minimum=5, maximum=100, value=50, step=5, label="N lat", info='Number of Lat grid points', interactive=True) + n_lon_input = gr.Slider(minimum=5, maximum=100, value=50, step=5, label="N lon", info='Number of Lon grid points', interactive=True) + n_depth_input = gr.Slider(minimum=5, maximum=100, value=50, step=5, label="N depth", info='Number of Depth grid points', interactive=True) + button = gr.Button("Look at 3D Velocities") outputs_vel_model = gr.Image(label="3D Velocity Model") - button.click(compute_velocity_model, - inputs=inputs_vel_model, - outputs=outputs_vel_model) + button.click(compute_velocity_model, + inputs=[azimuth_input, elevation_input, + interpolate_input, n_lat_input, + n_lon_input, n_depth_input], + outputs=[outputs_vel_model]) demo.launch() \ No newline at end of file diff --git a/data/cached/CI_BAK_2019-07-04T17:33:54.617418Z.mseed b/data/cached/CI_BAK_2019-07-04T17:33:54.617418Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..8f49723606787e09fa1df94d69387d98d6352c20 Binary files /dev/null and b/data/cached/CI_BAK_2019-07-04T17:33:54.617418Z.mseed differ diff --git a/data/cached/CI_BBR_2019-07-04T17:33:59.141726Z.mseed b/data/cached/CI_BBR_2019-07-04T17:33:59.141726Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..f1d0fb505e77921b9a65bcedfd97281d6f0713cc Binary files /dev/null and b/data/cached/CI_BBR_2019-07-04T17:33:59.141726Z.mseed differ diff --git a/data/cached/CI_BFS_2019-07-04T17:33:58.033722Z.mseed b/data/cached/CI_BFS_2019-07-04T17:33:58.033722Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..3171dbf0394fe2318399b8d5a42c925a20723ff8 Binary files /dev/null and b/data/cached/CI_BFS_2019-07-04T17:33:58.033722Z.mseed differ diff --git a/data/cached/CI_CHF_2019-07-04T17:33:57.250415Z.mseed b/data/cached/CI_CHF_2019-07-04T17:33:57.250415Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..1edda93da352648aaf4835abcf08d502089ab520 Binary files /dev/null and b/data/cached/CI_CHF_2019-07-04T17:33:57.250415Z.mseed differ diff --git a/data/cached/CI_DEC_2019-07-04T17:33:59.448227Z.mseed b/data/cached/CI_DEC_2019-07-04T17:33:59.448227Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..55b10db631384b899646107d3f07c787b417600c Binary files /dev/null and b/data/cached/CI_DEC_2019-07-04T17:33:59.448227Z.mseed differ diff --git a/data/cached/CI_DJJ_2019-07-04T17:34:01.956593Z.mseed b/data/cached/CI_DJJ_2019-07-04T17:34:01.956593Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..77c4a2af98a3d572fb7724fb4f47cc2cc993a9a0 Binary files /dev/null and b/data/cached/CI_DJJ_2019-07-04T17:34:01.956593Z.mseed differ diff --git a/data/cached/CI_MWC_2019-07-04T17:33:58.878567Z.mseed b/data/cached/CI_MWC_2019-07-04T17:33:58.878567Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..a3933d2d5f34f97eb15e15121d0736ea43f28486 Binary files /dev/null and b/data/cached/CI_MWC_2019-07-04T17:33:58.878567Z.mseed differ diff --git a/data/cached/CI_PASC_2019-07-04T17:33:59.995038Z.mseed b/data/cached/CI_PASC_2019-07-04T17:33:59.995038Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..8ee03c56644e8c48da64eaa61ef2cb74b670d442 Binary files /dev/null and b/data/cached/CI_PASC_2019-07-04T17:33:59.995038Z.mseed differ diff --git a/data/cached/CI_Q0000_2019-07-04T17:33:59.542086Z.mseed b/data/cached/CI_Q0000_2019-07-04T17:33:59.542086Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..8405002c335a1b73aca7b3eb09202e130b795a35 Binary files /dev/null and b/data/cached/CI_Q0000_2019-07-04T17:33:59.542086Z.mseed differ diff --git a/data/cached/CI_Q0001_2019-07-04T17:33:59.848010Z.mseed b/data/cached/CI_Q0001_2019-07-04T17:33:59.848010Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..42c4b6b6da13d74b9223534dbe499e0ce367a26b Binary files /dev/null and b/data/cached/CI_Q0001_2019-07-04T17:33:59.848010Z.mseed differ diff --git a/data/cached/CI_Q0002_2019-07-04T17:34:02.161273Z.mseed b/data/cached/CI_Q0002_2019-07-04T17:34:02.161273Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..376ef837d9a2e0dcd2fe025745153b69df1b767c Binary files /dev/null and b/data/cached/CI_Q0002_2019-07-04T17:34:02.161273Z.mseed differ diff --git a/data/cached/CI_Q0015_2019-07-04T17:33:58.949256Z.mseed b/data/cached/CI_Q0015_2019-07-04T17:33:58.949256Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..ad78dd8bace4f4b0906de77429b6db528973faca Binary files /dev/null and b/data/cached/CI_Q0015_2019-07-04T17:33:58.949256Z.mseed differ diff --git a/data/cached/CI_Q0031_2019-07-04T17:34:01.066693Z.mseed b/data/cached/CI_Q0031_2019-07-04T17:34:01.066693Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..fe875ea3ffb3eaea300c463b2c994cf239dfb561 Binary files /dev/null and b/data/cached/CI_Q0031_2019-07-04T17:34:01.066693Z.mseed differ diff --git a/data/cached/CI_Q0049_2019-07-04T17:33:59.323575Z.mseed b/data/cached/CI_Q0049_2019-07-04T17:33:59.323575Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..3ef1127a73886b98e76053e2570bd0845e23070b Binary files /dev/null and b/data/cached/CI_Q0049_2019-07-04T17:33:59.323575Z.mseed differ diff --git a/data/cached/CI_Q0050_2019-07-04T17:34:03.767760Z.mseed b/data/cached/CI_Q0050_2019-07-04T17:34:03.767760Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..a0460707a73a24438a9a63752cdedaf7a1fbf0e4 Binary files /dev/null and b/data/cached/CI_Q0050_2019-07-04T17:34:03.767760Z.mseed differ diff --git a/data/cached/CI_Q0057_2019-07-04T17:34:00.984409Z.mseed b/data/cached/CI_Q0057_2019-07-04T17:34:00.984409Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..65516814f645938911291604fec087031bb5245e Binary files /dev/null and b/data/cached/CI_Q0057_2019-07-04T17:34:00.984409Z.mseed differ diff --git a/data/cached/CI_Q0073_2019-07-04T17:34:03.226784Z.mseed b/data/cached/CI_Q0073_2019-07-04T17:34:03.226784Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..cb6d788d6cc41c34df660a8f8cd302cd9fee20d2 Binary files /dev/null and b/data/cached/CI_Q0073_2019-07-04T17:34:03.226784Z.mseed differ diff --git a/data/cached/CI_Q0077_2019-07-04T17:34:03.800544Z.mseed b/data/cached/CI_Q0077_2019-07-04T17:34:03.800544Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..bae26938c7092197b3b69e92e10b3ccf61c5499b Binary files /dev/null and b/data/cached/CI_Q0077_2019-07-04T17:34:03.800544Z.mseed differ diff --git a/data/cached/CI_Q0080_2019-07-04T17:34:01.906420Z.mseed b/data/cached/CI_Q0080_2019-07-04T17:34:01.906420Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..caf624f1bc5f173388cce5faf1994027e3066efe Binary files /dev/null and b/data/cached/CI_Q0080_2019-07-04T17:34:01.906420Z.mseed differ diff --git a/data/cached/CI_SVD_2019-07-04T17:34:00.668795Z.mseed b/data/cached/CI_SVD_2019-07-04T17:34:00.668795Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..e5c277c001193e0433383dfc0f8ab2ede5d08e0a Binary files /dev/null and b/data/cached/CI_SVD_2019-07-04T17:34:00.668795Z.mseed differ diff --git a/data/cached/CI_TUQ_2019-07-04T17:33:56.281687Z.mseed b/data/cached/CI_TUQ_2019-07-04T17:33:56.281687Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..689775752f3ec57636ff776e3cf867b67ba837c6 Binary files /dev/null and b/data/cached/CI_TUQ_2019-07-04T17:33:56.281687Z.mseed differ diff --git a/data/cached/CI_USC_2019-07-04T17:34:02.444223Z.mseed b/data/cached/CI_USC_2019-07-04T17:34:02.444223Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b0204f19de2487ebc095dd7684dc7331d7efdfea Binary files /dev/null and b/data/cached/CI_USC_2019-07-04T17:34:02.444223Z.mseed differ diff --git a/data/cached/CI_VES_2019-07-04T17:33:53.346003Z.mseed b/data/cached/CI_VES_2019-07-04T17:33:53.346003Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..9d350fd4126bc1e3fe583f541975de57b88abc5c Binary files /dev/null and b/data/cached/CI_VES_2019-07-04T17:33:53.346003Z.mseed differ diff --git a/data/cached/CI_VOG_2019-07-04T17:33:58.215994Z.mseed b/data/cached/CI_VOG_2019-07-04T17:33:58.215994Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..c6673bc2fdb00529b037512fd87645b0e157ab6a Binary files /dev/null and b/data/cached/CI_VOG_2019-07-04T17:33:58.215994Z.mseed differ diff --git a/data/cached/GS_COM_2000-09-03T08:36:34.034702Z.mseed b/data/cached/GS_COM_2000-09-03T08:36:34.034702Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..2e2ede26f4f314bcb8f77d73b6d8d68ac94ba4e8 Binary files /dev/null and b/data/cached/GS_COM_2000-09-03T08:36:34.034702Z.mseed differ diff --git a/data/cached/GS_FAI_2000-09-03T08:36:33.897223Z.mseed b/data/cached/GS_FAI_2000-09-03T08:36:33.897223Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b47788c74d099c7e7deb23ea7398a730e40d03ba Binary files /dev/null and b/data/cached/GS_FAI_2000-09-03T08:36:33.897223Z.mseed differ diff --git a/data/cached/GS_N10_2000-09-03T08:36:32.693278Z.mseed b/data/cached/GS_N10_2000-09-03T08:36:32.693278Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..63785128e7577942cd38bb2fafa8ab2ae51db2c1 Binary files /dev/null and b/data/cached/GS_N10_2000-09-03T08:36:32.693278Z.mseed differ diff --git a/data/cached/GS_N20_2000-09-03T08:36:32.659822Z.mseed b/data/cached/GS_N20_2000-09-03T08:36:32.659822Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..93a7ae43d39ebe185d046176f90dead550a0bf38 Binary files /dev/null and b/data/cached/GS_N20_2000-09-03T08:36:32.659822Z.mseed differ diff --git a/data/cached/GS_N30_2000-09-03T08:36:32.556386Z.mseed b/data/cached/GS_N30_2000-09-03T08:36:32.556386Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..2b93c7ed45115b94900254cc4029d020eabea8a5 Binary files /dev/null and b/data/cached/GS_N30_2000-09-03T08:36:32.556386Z.mseed differ diff --git a/data/cached/GS_N40_2000-09-03T08:36:32.571201Z.mseed b/data/cached/GS_N40_2000-09-03T08:36:32.571201Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..067796c5b2e1e9cc5de446baf60ef1595585da73 Binary files /dev/null and b/data/cached/GS_N40_2000-09-03T08:36:32.571201Z.mseed differ diff --git a/data/cached/GS_N50_2000-09-03T08:36:32.517254Z.mseed b/data/cached/GS_N50_2000-09-03T08:36:32.517254Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..e08c6ceffac320a1a4b0324a8600ac9da40f10b3 Binary files /dev/null and b/data/cached/GS_N50_2000-09-03T08:36:32.517254Z.mseed differ diff --git a/data/cached/GS_N60_2000-09-03T08:36:32.499849Z.mseed b/data/cached/GS_N60_2000-09-03T08:36:32.499849Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..c03dd2f9d4c7e0059ac43fe0d0e8ef99b77e24c7 Binary files /dev/null and b/data/cached/GS_N60_2000-09-03T08:36:32.499849Z.mseed differ diff --git a/data/cached/GS_O10_2000-09-03T08:36:32.796101Z.mseed b/data/cached/GS_O10_2000-09-03T08:36:32.796101Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..4691257d4a20e767297197b15a2a649213cb81c8 Binary files /dev/null and b/data/cached/GS_O10_2000-09-03T08:36:32.796101Z.mseed differ diff --git a/data/cached/GS_O50_2000-09-03T08:36:32.656750Z.mseed b/data/cached/GS_O50_2000-09-03T08:36:32.656750Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..65fb676ba40efeea36949eece341ff853aa3a53e Binary files /dev/null and b/data/cached/GS_O50_2000-09-03T08:36:32.656750Z.mseed differ diff --git a/data/cached/GS_O60_2000-09-03T08:36:32.626776Z.mseed b/data/cached/GS_O60_2000-09-03T08:36:32.626776Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..377d96e39b4c8556dc89a12b70419f2790fb0033 Binary files /dev/null and b/data/cached/GS_O60_2000-09-03T08:36:32.626776Z.mseed differ diff --git a/data/cached/GS_P10_2000-09-03T08:36:32.900030Z.mseed b/data/cached/GS_P10_2000-09-03T08:36:32.900030Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..bda62fd759cb169e9f6d538e9a2275746bda8335 Binary files /dev/null and b/data/cached/GS_P10_2000-09-03T08:36:32.900030Z.mseed differ diff --git a/data/cached/GS_P20_2000-09-03T08:36:32.838345Z.mseed b/data/cached/GS_P20_2000-09-03T08:36:32.838345Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..984fa13fce827b08f028fa338305c33cc8ec7eef Binary files /dev/null and b/data/cached/GS_P20_2000-09-03T08:36:32.838345Z.mseed differ diff --git a/data/cached/GS_P30_2000-09-03T08:36:32.820809Z.mseed b/data/cached/GS_P30_2000-09-03T08:36:32.820809Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..63003254a5d85029f91c334f3b6567f8c9d6c045 Binary files /dev/null and b/data/cached/GS_P30_2000-09-03T08:36:32.820809Z.mseed differ diff --git a/data/cached/GS_P40_2000-09-03T08:36:32.774233Z.mseed b/data/cached/GS_P40_2000-09-03T08:36:32.774233Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..9fb23a8e3b7a2fff82bcee33b0419f50c2fb7a0b Binary files /dev/null and b/data/cached/GS_P40_2000-09-03T08:36:32.774233Z.mseed differ diff --git a/data/cached/GS_P60_2000-09-03T08:36:32.712966Z.mseed b/data/cached/GS_P60_2000-09-03T08:36:32.712966Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..bfc4a2375d295ed6fc7509f90020f6dc4608a6db Binary files /dev/null and b/data/cached/GS_P60_2000-09-03T08:36:32.712966Z.mseed differ diff --git a/data/cached/GS_Q10_2000-09-03T08:36:33.032313Z.mseed b/data/cached/GS_Q10_2000-09-03T08:36:33.032313Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..4992d9306009137e6ae337c79a1a9c6aa979cfc9 Binary files /dev/null and b/data/cached/GS_Q10_2000-09-03T08:36:33.032313Z.mseed differ diff --git a/data/cached/GS_Q20_2000-09-03T08:36:32.982191Z.mseed b/data/cached/GS_Q20_2000-09-03T08:36:32.982191Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b09474296b4946d0590622c3076fbf52cae5c5fa Binary files /dev/null and b/data/cached/GS_Q20_2000-09-03T08:36:32.982191Z.mseed differ diff --git a/data/cached/GS_Q30_2000-09-03T08:36:32.962975Z.mseed b/data/cached/GS_Q30_2000-09-03T08:36:32.962975Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..34e8bc2ce0a446005d44a53d71ce0192105d107d Binary files /dev/null and b/data/cached/GS_Q30_2000-09-03T08:36:32.962975Z.mseed differ diff --git a/data/cached/GS_Q40_2000-09-03T08:36:32.907654Z.mseed b/data/cached/GS_Q40_2000-09-03T08:36:32.907654Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..139d9b833aa52b282845916e825f236c2737e39c Binary files /dev/null and b/data/cached/GS_Q40_2000-09-03T08:36:32.907654Z.mseed differ diff --git a/data/cached/GS_Q50_2000-09-03T08:36:32.896534Z.mseed b/data/cached/GS_Q50_2000-09-03T08:36:32.896534Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..4d23395fae7d5d1f71766b8f12cda445dc795ffb Binary files /dev/null and b/data/cached/GS_Q50_2000-09-03T08:36:32.896534Z.mseed differ diff --git a/data/cached/GS_Q60_2000-09-03T08:36:32.832100Z.mseed b/data/cached/GS_Q60_2000-09-03T08:36:32.832100Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..0039aae832979bb0c27f7e1dd1c3c1a568a83a3d Binary files /dev/null and b/data/cached/GS_Q60_2000-09-03T08:36:32.832100Z.mseed differ diff --git a/data/cached/GS_R10_2000-09-03T08:36:33.107196Z.mseed b/data/cached/GS_R10_2000-09-03T08:36:33.107196Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..da503c99d6d5a53daa0c46d5fd383387b6d59e96 Binary files /dev/null and b/data/cached/GS_R10_2000-09-03T08:36:33.107196Z.mseed differ diff --git a/data/cached/GS_R20_2000-09-03T08:36:33.065548Z.mseed b/data/cached/GS_R20_2000-09-03T08:36:33.065548Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..e0113cd2b72a2a876b8eca6f33e21a4107517189 Binary files /dev/null and b/data/cached/GS_R20_2000-09-03T08:36:33.065548Z.mseed differ diff --git a/data/cached/GS_R30_2000-09-03T08:36:33.032988Z.mseed b/data/cached/GS_R30_2000-09-03T08:36:33.032988Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..d89115d6e9bb6e896013d0ac7f6d3fc258a6ac50 Binary files /dev/null and b/data/cached/GS_R30_2000-09-03T08:36:33.032988Z.mseed differ diff --git a/data/cached/GS_R40_2000-09-03T08:36:33.012859Z.mseed b/data/cached/GS_R40_2000-09-03T08:36:33.012859Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..ac140c30e6e236511628a69c46767188ac1e8095 Binary files /dev/null and b/data/cached/GS_R40_2000-09-03T08:36:33.012859Z.mseed differ diff --git a/data/cached/GS_R60_2000-09-03T08:36:32.943845Z.mseed b/data/cached/GS_R60_2000-09-03T08:36:32.943845Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..f55e76be90d4d4ae41fb3f496a4d2ac544022048 Binary files /dev/null and b/data/cached/GS_R60_2000-09-03T08:36:32.943845Z.mseed differ diff --git a/data/cached/GS_RCK_2000-09-03T08:36:32.690055Z.mseed b/data/cached/GS_RCK_2000-09-03T08:36:32.690055Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..395ea3fe3a541da8860e4f4dd1788a00e118851e Binary files /dev/null and b/data/cached/GS_RCK_2000-09-03T08:36:32.690055Z.mseed differ diff --git a/data/cached/GS_ROC_2000-09-03T08:36:32.709666Z.mseed b/data/cached/GS_ROC_2000-09-03T08:36:32.709666Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..0aa77ce84fb19e392cb6d90b71702724670eea15 Binary files /dev/null and b/data/cached/GS_ROC_2000-09-03T08:36:32.709666Z.mseed differ diff --git a/data/cached/GS_S10_2000-09-03T08:36:33.226985Z.mseed b/data/cached/GS_S10_2000-09-03T08:36:33.226985Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..818c6ea4120414f01c502b435c909171e5f4fe84 Binary files /dev/null and b/data/cached/GS_S10_2000-09-03T08:36:33.226985Z.mseed differ diff --git a/data/cached/GS_S20_2000-09-03T08:36:33.189907Z.mseed b/data/cached/GS_S20_2000-09-03T08:36:33.189907Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..62147262a936b8329e93346d1f743fd99bdd1cf2 Binary files /dev/null and b/data/cached/GS_S20_2000-09-03T08:36:33.189907Z.mseed differ diff --git a/data/cached/GS_S30_2000-09-03T08:36:33.147596Z.mseed b/data/cached/GS_S30_2000-09-03T08:36:33.147596Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..34bcfe2a88b856ca10bb778d9b6fb63a3fc23372 Binary files /dev/null and b/data/cached/GS_S30_2000-09-03T08:36:33.147596Z.mseed differ diff --git a/data/cached/GS_S40_2000-09-03T08:36:33.118622Z.mseed b/data/cached/GS_S40_2000-09-03T08:36:33.118622Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..aa93af6d496c79b06352be57c2ae7e68c0524632 Binary files /dev/null and b/data/cached/GS_S40_2000-09-03T08:36:33.118622Z.mseed differ diff --git a/data/cached/GS_S50_2000-09-03T08:36:33.087670Z.mseed b/data/cached/GS_S50_2000-09-03T08:36:33.087670Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b8ef6ccdf843815d266072e720a5ff3a2541cc71 Binary files /dev/null and b/data/cached/GS_S50_2000-09-03T08:36:33.087670Z.mseed differ diff --git a/data/cached/GS_S60_2000-09-03T08:36:33.069610Z.mseed b/data/cached/GS_S60_2000-09-03T08:36:33.069610Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..2d7f4dca7586e9aa10e23e748bf49a7a402be32a Binary files /dev/null and b/data/cached/GS_S60_2000-09-03T08:36:33.069610Z.mseed differ diff --git a/data/cached/NN_BHP_2019-07-04T17:34:00.373160Z.mseed b/data/cached/NN_BHP_2019-07-04T17:34:00.373160Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..83e65086b54ca6f03c97d607d4154bc79e17df80 Binary files /dev/null and b/data/cached/NN_BHP_2019-07-04T17:34:00.373160Z.mseed differ diff --git a/data/cached/NN_CPYB_2019-07-04T17:34:00.619199Z.mseed b/data/cached/NN_CPYB_2019-07-04T17:34:00.619199Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b28c90d1d8a9cd40e0b255c3d5728ba3d06e0ef5 Binary files /dev/null and b/data/cached/NN_CPYB_2019-07-04T17:34:00.619199Z.mseed differ diff --git a/data/cached/NN_DSP_2019-07-04T17:33:59.490257Z.mseed b/data/cached/NN_DSP_2019-07-04T17:33:59.490257Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b0c035d32abfe09eea6b1131623d7db5f7553063 Binary files /dev/null and b/data/cached/NN_DSP_2019-07-04T17:33:59.490257Z.mseed differ diff --git a/data/cached/NN_GMN_2019-07-04T17:33:58.483987Z.mseed b/data/cached/NN_GMN_2019-07-04T17:33:58.483987Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..3de777d0498082ab5318cecbd91e97bc2936dd41 Binary files /dev/null and b/data/cached/NN_GMN_2019-07-04T17:33:58.483987Z.mseed differ diff --git a/data/cached/NN_LCH_2019-07-04T17:33:57.161615Z.mseed b/data/cached/NN_LCH_2019-07-04T17:33:57.161615Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..eea5f89d3d9bd2830669ab1e6abc7b244065b9a7 Binary files /dev/null and b/data/cached/NN_LCH_2019-07-04T17:33:57.161615Z.mseed differ diff --git a/data/cached/NN_POC_2019-07-04T17:34:00.309208Z.mseed b/data/cached/NN_POC_2019-07-04T17:34:00.309208Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..1878d740bf0dacc84df65e03786ab183c6a004d7 Binary files /dev/null and b/data/cached/NN_POC_2019-07-04T17:34:00.309208Z.mseed differ diff --git a/data/cached/NN_RCC_2019-07-04T17:34:03.980210Z.mseed b/data/cached/NN_RCC_2019-07-04T17:34:03.980210Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..01fb4a56aeded3ff0c3c41dec9bb6f8eea225c19 Binary files /dev/null and b/data/cached/NN_RCC_2019-07-04T17:34:03.980210Z.mseed differ diff --git a/data/cached/NN_SCH_2019-07-04T17:34:02.176635Z.mseed b/data/cached/NN_SCH_2019-07-04T17:34:02.176635Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..975b9bb94fcd5b4e8acbddec497d676354ee1418 Binary files /dev/null and b/data/cached/NN_SCH_2019-07-04T17:34:02.176635Z.mseed differ diff --git a/data/cached/NN_WMD_2019-07-04T17:34:02.983187Z.mseed b/data/cached/NN_WMD_2019-07-04T17:34:02.983187Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..bb0b01ef9ba3afef1cb4e41c8e85effbd1fc7617 Binary files /dev/null and b/data/cached/NN_WMD_2019-07-04T17:34:02.983187Z.mseed differ diff --git a/data/cached/RE_CSTS_2019-07-04T17:34:04.658380Z.mseed b/data/cached/RE_CSTS_2019-07-04T17:34:04.658380Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..fef16b72033ca915112be11205db963ebf3b03d5 Binary files /dev/null and b/data/cached/RE_CSTS_2019-07-04T17:34:04.658380Z.mseed differ diff --git a/data/cached/SN_AF001_2019-07-04T17:34:02.780693Z.mseed b/data/cached/SN_AF001_2019-07-04T17:34:02.780693Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..4c9ce51c9e6bf15943b45c33a65a91a4d662f591 Binary files /dev/null and b/data/cached/SN_AF001_2019-07-04T17:34:02.780693Z.mseed differ diff --git a/data/cached/SN_AF004_2019-07-04T17:34:03.732887Z.mseed b/data/cached/SN_AF004_2019-07-04T17:34:03.732887Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..d14b933b924f8a98e312a389ee8c969012f61a0e Binary files /dev/null and b/data/cached/SN_AF004_2019-07-04T17:34:03.732887Z.mseed differ diff --git a/data/cached/SN_AF005_2019-07-04T17:34:03.543108Z.mseed b/data/cached/SN_AF005_2019-07-04T17:34:03.543108Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..4f4aa91819a883ae68cd01ae2dd89dfb3f5a54ad Binary files /dev/null and b/data/cached/SN_AF005_2019-07-04T17:34:03.543108Z.mseed differ diff --git a/data/cached/SN_EASTA_2019-07-04T17:34:02.920878Z.mseed b/data/cached/SN_EASTA_2019-07-04T17:34:02.920878Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..fba7f26f31c3041a5871961faaffbf85ecd469aa Binary files /dev/null and b/data/cached/SN_EASTA_2019-07-04T17:34:02.920878Z.mseed differ diff --git a/data/cached/SN_EASTB_2019-07-04T17:34:03.112399Z.mseed b/data/cached/SN_EASTB_2019-07-04T17:34:03.112399Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..fba8a7ddb1664c4f62784607e30e8e381aede351 Binary files /dev/null and b/data/cached/SN_EASTB_2019-07-04T17:34:03.112399Z.mseed differ diff --git a/data/cached/SN_EASTC_2019-07-04T17:34:03.240829Z.mseed b/data/cached/SN_EASTC_2019-07-04T17:34:03.240829Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..5340a42e4e9b085a9be304ec8e29b716791ad292 Binary files /dev/null and b/data/cached/SN_EASTC_2019-07-04T17:34:03.240829Z.mseed differ diff --git a/data/cached/SN_EASTD_2019-07-04T17:34:03.318931Z.mseed b/data/cached/SN_EASTD_2019-07-04T17:34:03.318931Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..0470d21323ee27a81fcdcf32926908b169e40abf Binary files /dev/null and b/data/cached/SN_EASTD_2019-07-04T17:34:03.318931Z.mseed differ diff --git a/data/cached/SN_ECO_2019-07-04T17:34:01.540101Z.mseed b/data/cached/SN_ECO_2019-07-04T17:34:01.540101Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..c2169658d0952ce820ae75834df6a5c28ff037b6 Binary files /dev/null and b/data/cached/SN_ECO_2019-07-04T17:34:01.540101Z.mseed differ diff --git a/data/cached/SN_I20M0_2019-07-04T17:34:02.504236Z.mseed b/data/cached/SN_I20M0_2019-07-04T17:34:02.504236Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..d6663d3e005b27b1f7da20b544219726320b9e9e Binary files /dev/null and b/data/cached/SN_I20M0_2019-07-04T17:34:02.504236Z.mseed differ diff --git a/data/cached/SN_I20M3_2019-07-04T17:34:02.563334Z.mseed b/data/cached/SN_I20M3_2019-07-04T17:34:02.563334Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..89131b9d1698460c4f25db4f8a0d4640d4e50507 Binary files /dev/null and b/data/cached/SN_I20M3_2019-07-04T17:34:02.563334Z.mseed differ diff --git a/data/cached/SN_I20M9_2019-07-04T17:34:02.181773Z.mseed b/data/cached/SN_I20M9_2019-07-04T17:34:02.181773Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..9d8846e88185800225037c891f99ff8cd6eca2f8 Binary files /dev/null and b/data/cached/SN_I20M9_2019-07-04T17:34:02.181773Z.mseed differ diff --git a/data/cached/SN_JFR2_2019-07-04T17:33:57.498866Z.mseed b/data/cached/SN_JFR2_2019-07-04T17:33:57.498866Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..e740ff37a2f1a238210f336f65b94329067f53cc Binary files /dev/null and b/data/cached/SN_JFR2_2019-07-04T17:33:57.498866Z.mseed differ diff --git a/data/cached/SN_L3023_2019-07-04T17:34:03.275439Z.mseed b/data/cached/SN_L3023_2019-07-04T17:34:03.275439Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..55117097dc770150c0d40515fbe22bc40f9c791f Binary files /dev/null and b/data/cached/SN_L3023_2019-07-04T17:34:03.275439Z.mseed differ diff --git a/data/cached/SN_L5026_2019-07-04T17:34:03.288901Z.mseed b/data/cached/SN_L5026_2019-07-04T17:34:03.288901Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..25207093f16638a157120300fe26d45ff5ab2400 Binary files /dev/null and b/data/cached/SN_L5026_2019-07-04T17:34:03.288901Z.mseed differ diff --git a/data/cached/SN_MCY_2019-07-04T17:33:59.068777Z.mseed b/data/cached/SN_MCY_2019-07-04T17:33:59.068777Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b557cb2b3cfddba588cbb300e577e2f0c51335a7 Binary files /dev/null and b/data/cached/SN_MCY_2019-07-04T17:33:59.068777Z.mseed differ diff --git a/data/cached/SN_NORA_2019-07-04T17:34:02.979479Z.mseed b/data/cached/SN_NORA_2019-07-04T17:34:02.979479Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..f58c4e1da6e1bddc135b1be176e4c90627bf63fa Binary files /dev/null and b/data/cached/SN_NORA_2019-07-04T17:34:02.979479Z.mseed differ diff --git a/data/cached/SN_NSP_2019-07-04T17:33:57.325111Z.mseed b/data/cached/SN_NSP_2019-07-04T17:33:57.325111Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..a4ff1f66995fabd96305aee33a2d8d53444591d7 Binary files /dev/null and b/data/cached/SN_NSP_2019-07-04T17:33:57.325111Z.mseed differ diff --git a/data/cached/SN_RTPP_2019-07-04T17:33:58.012862Z.mseed b/data/cached/SN_RTPP_2019-07-04T17:33:58.012862Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..9109a42278eb95a808656d5e346f2c349d5ee483 Binary files /dev/null and b/data/cached/SN_RTPP_2019-07-04T17:33:58.012862Z.mseed differ diff --git a/data/cached/SN_RV157_2019-07-04T17:34:00.806177Z.mseed b/data/cached/SN_RV157_2019-07-04T17:34:00.806177Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..1dcc663962036da3479a06d76e3816b96c57ec93 Binary files /dev/null and b/data/cached/SN_RV157_2019-07-04T17:34:00.806177Z.mseed differ diff --git a/data/cached/SN_RV196_2019-07-04T17:34:00.483629Z.mseed b/data/cached/SN_RV196_2019-07-04T17:34:00.483629Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..0092fdea639f94421feaccc3a63335f01303ef15 Binary files /dev/null and b/data/cached/SN_RV196_2019-07-04T17:34:00.483629Z.mseed differ diff --git a/data/cached/SN_RV339_2019-07-04T17:33:59.156053Z.mseed b/data/cached/SN_RV339_2019-07-04T17:33:59.156053Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..9f08338855eae4bd463e9a8663d84e43f0030301 Binary files /dev/null and b/data/cached/SN_RV339_2019-07-04T17:33:59.156053Z.mseed differ diff --git a/data/cached/SN_RVEE_2019-07-04T17:33:58.128206Z.mseed b/data/cached/SN_RVEE_2019-07-04T17:33:58.128206Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..895b95c25fad3e7f8af189176c0597b4bb1e77ff Binary files /dev/null and b/data/cached/SN_RVEE_2019-07-04T17:33:58.128206Z.mseed differ diff --git a/data/cached/SN_RVFF_2019-07-04T17:33:59.397106Z.mseed b/data/cached/SN_RVFF_2019-07-04T17:33:59.397106Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..63b1992273d814cf23e0e335d461b119da3cc393 Binary files /dev/null and b/data/cached/SN_RVFF_2019-07-04T17:33:59.397106Z.mseed differ diff --git a/data/cached/SN_RVNE_2019-07-04T17:33:58.579209Z.mseed b/data/cached/SN_RVNE_2019-07-04T17:33:58.579209Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..78cee004cf824c591b15d745fcca838c6d4f48d8 Binary files /dev/null and b/data/cached/SN_RVNE_2019-07-04T17:33:58.579209Z.mseed differ diff --git a/data/cached/SN_RVSE_2019-07-04T17:33:58.068372Z.mseed b/data/cached/SN_RVSE_2019-07-04T17:33:58.068372Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..70316e51fb50cab626d4ac03325886805292b7f3 Binary files /dev/null and b/data/cached/SN_RVSE_2019-07-04T17:33:58.068372Z.mseed differ diff --git a/data/cached/SN_SOUB_2019-07-04T17:34:01.016021Z.mseed b/data/cached/SN_SOUB_2019-07-04T17:34:01.016021Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..a0d782c63e78990377140c05e96895316619dfa4 Binary files /dev/null and b/data/cached/SN_SOUB_2019-07-04T17:34:01.016021Z.mseed differ diff --git a/data/cached/SN_SOUC_2019-07-04T17:34:00.929820Z.mseed b/data/cached/SN_SOUC_2019-07-04T17:34:00.929820Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..8cb187a629360da253ef2464835c5e24ab9327ca Binary files /dev/null and b/data/cached/SN_SOUC_2019-07-04T17:34:00.929820Z.mseed differ diff --git a/data/cached/SN_SOUD_2019-07-04T17:34:00.677472Z.mseed b/data/cached/SN_SOUD_2019-07-04T17:34:00.677472Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..2541efc0912198fb7464485a3b9db8dd6e1b31d1 Binary files /dev/null and b/data/cached/SN_SOUD_2019-07-04T17:34:00.677472Z.mseed differ diff --git a/data/cached/SN_SOUE_2019-07-04T17:34:00.577733Z.mseed b/data/cached/SN_SOUE_2019-07-04T17:34:00.577733Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..aa8cdf94f436a002d7aec4961a2573d96c06d04f Binary files /dev/null and b/data/cached/SN_SOUE_2019-07-04T17:34:00.577733Z.mseed differ diff --git a/data/cached/SN_SOUF_2019-07-04T17:34:00.387104Z.mseed b/data/cached/SN_SOUF_2019-07-04T17:34:00.387104Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..8cd6f05c8565235c8e43fbcb359e2e7a8193767c Binary files /dev/null and b/data/cached/SN_SOUF_2019-07-04T17:34:00.387104Z.mseed differ diff --git a/data/cached/SN_SPRS_2019-07-04T17:33:57.271299Z.mseed b/data/cached/SN_SPRS_2019-07-04T17:33:57.271299Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..292e42bd42120e8b0422281af2a6efa156d79001 Binary files /dev/null and b/data/cached/SN_SPRS_2019-07-04T17:33:57.271299Z.mseed differ diff --git a/data/cached/SN_STC_2019-07-04T17:34:01.855594Z.mseed b/data/cached/SN_STC_2019-07-04T17:34:01.855594Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..0768793ef4279b23f6fbba65d7d225d2f4eb4d82 Binary files /dev/null and b/data/cached/SN_STC_2019-07-04T17:34:01.855594Z.mseed differ diff --git a/data/cached/SN_SW119_2019-07-04T17:34:00.827942Z.mseed b/data/cached/SN_SW119_2019-07-04T17:34:00.827942Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..794f043bc63c1c938d6967c1157e1f2dcd038fee Binary files /dev/null and b/data/cached/SN_SW119_2019-07-04T17:34:00.827942Z.mseed differ diff --git a/data/cached/SN_SW157_2019-07-04T17:34:00.285282Z.mseed b/data/cached/SN_SW157_2019-07-04T17:34:00.285282Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..1ca7849ea09bc24ac01d1a2059fae12ecdf94756 Binary files /dev/null and b/data/cached/SN_SW157_2019-07-04T17:34:00.285282Z.mseed differ diff --git a/data/cached/SN_SW522_2019-07-04T17:34:01.627675Z.mseed b/data/cached/SN_SW522_2019-07-04T17:34:01.627675Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..5fe2eeca809346a1b8111f4483a6c77fe59f5fdf Binary files /dev/null and b/data/cached/SN_SW522_2019-07-04T17:34:01.627675Z.mseed differ diff --git a/data/cached/SN_TPW_2019-07-04T17:33:58.692695Z.mseed b/data/cached/SN_TPW_2019-07-04T17:33:58.692695Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..e5f5b25d21e8df3fa791ff5c95d63ee59f88769a Binary files /dev/null and b/data/cached/SN_TPW_2019-07-04T17:33:58.692695Z.mseed differ diff --git a/data/cached/SN_TWP_2019-07-04T17:34:02.924259Z.mseed b/data/cached/SN_TWP_2019-07-04T17:34:02.924259Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..17475c204ae8d48f965510b182057d49c4a0664c Binary files /dev/null and b/data/cached/SN_TWP_2019-07-04T17:34:02.924259Z.mseed differ diff --git a/data/cached/SN_U1AS_2019-07-04T17:34:01.345572Z.mseed b/data/cached/SN_U1AS_2019-07-04T17:34:01.345572Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..773a4f1de314f32169cb810b494985b0720728fc Binary files /dev/null and b/data/cached/SN_U1AS_2019-07-04T17:34:01.345572Z.mseed differ diff --git a/data/cached/SN_U1AU_2019-07-04T17:34:01.351215Z.mseed b/data/cached/SN_U1AU_2019-07-04T17:34:01.351215Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..f170dfe565d6f2ffd466ccf0c905e7024dd5b5e8 Binary files /dev/null and b/data/cached/SN_U1AU_2019-07-04T17:34:01.351215Z.mseed differ diff --git a/data/cached/SN_WESTA_2019-07-04T17:34:00.939546Z.mseed b/data/cached/SN_WESTA_2019-07-04T17:34:00.939546Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..db7a7004287157ae41b931ec9084a1947b27a38c Binary files /dev/null and b/data/cached/SN_WESTA_2019-07-04T17:34:00.939546Z.mseed differ diff --git a/data/cached/SN_YFT_2019-07-04T17:34:02.734929Z.mseed b/data/cached/SN_YFT_2019-07-04T17:34:02.734929Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..2cdeecace7ba987135b7365fba06a4676571eecc Binary files /dev/null and b/data/cached/SN_YFT_2019-07-04T17:34:02.734929Z.mseed differ diff --git a/data/cached/US_TPNV_2019-07-04T17:33:59.210827Z.mseed b/data/cached/US_TPNV_2019-07-04T17:33:59.210827Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..f5dd286a5a741cc0b1da5b2c28edb0c3bab796ce Binary files /dev/null and b/data/cached/US_TPNV_2019-07-04T17:33:59.210827Z.mseed differ diff --git a/data/cached/YB_MOJA_2019-07-04T17:33:59.109183Z.mseed b/data/cached/YB_MOJA_2019-07-04T17:33:59.109183Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..e318ea771a3bbed6520aec46dea53cab6e03bb83 Binary files /dev/null and b/data/cached/YB_MOJA_2019-07-04T17:33:59.109183Z.mseed differ diff --git a/data/cached/YG_BMT_2000-09-03T08:36:32.692570Z.mseed b/data/cached/YG_BMT_2000-09-03T08:36:32.692570Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..b781b92a18f20258fb84b00d318c05ea9e633051 Binary files /dev/null and b/data/cached/YG_BMT_2000-09-03T08:36:32.692570Z.mseed differ diff --git a/data/cached/YG_FIT_2000-09-03T08:36:33.075862Z.mseed b/data/cached/YG_FIT_2000-09-03T08:36:33.075862Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..1c03a847b6f4a90455ac83bdf0e38d38c74b7222 Binary files /dev/null and b/data/cached/YG_FIT_2000-09-03T08:36:33.075862Z.mseed differ diff --git a/data/cached/YG_IAN_2000-09-03T08:36:32.115658Z.mseed b/data/cached/YG_IAN_2000-09-03T08:36:32.115658Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..62d475a5b39ec39b7f84eed85727098a25991fa3 Binary files /dev/null and b/data/cached/YG_IAN_2000-09-03T08:36:32.115658Z.mseed differ diff --git a/data/cached/YG_KAT_2000-09-03T08:36:32.636001Z.mseed b/data/cached/YG_KAT_2000-09-03T08:36:32.636001Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..d15ee308bfdb550ae220d488b138de6b414ae38e Binary files /dev/null and b/data/cached/YG_KAT_2000-09-03T08:36:32.636001Z.mseed differ diff --git a/data/cached/YG_LEX_2000-09-03T08:36:34.746037Z.mseed b/data/cached/YG_LEX_2000-09-03T08:36:34.746037Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..28d248ad92a0d2285a6e52c52c9e39cde05d4acb Binary files /dev/null and b/data/cached/YG_LEX_2000-09-03T08:36:34.746037Z.mseed differ diff --git a/data/cached/YG_MCL_2000-09-03T08:36:32.128026Z.mseed b/data/cached/YG_MCL_2000-09-03T08:36:32.128026Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..f66b7217bfe73ecbcb52058fe3912c6f89f96adf Binary files /dev/null and b/data/cached/YG_MCL_2000-09-03T08:36:32.128026Z.mseed differ diff --git a/data/cached/YG_PRS_2000-09-03T08:36:33.486444Z.mseed b/data/cached/YG_PRS_2000-09-03T08:36:33.486444Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..e85a72931e2800fdd592b2cecebc0dd4d0974732 Binary files /dev/null and b/data/cached/YG_PRS_2000-09-03T08:36:33.486444Z.mseed differ diff --git a/data/cached/YG_WVC_2000-09-03T08:36:33.867341Z.mseed b/data/cached/YG_WVC_2000-09-03T08:36:33.867341Z.mseed new file mode 100644 index 0000000000000000000000000000000000000000..3fba4e1f0face0ed7bf193d4a927aaee439d9a2c Binary files /dev/null and b/data/cached/YG_WVC_2000-09-03T08:36:33.867341Z.mseed differ diff --git a/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_15.csv b/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_15.csv new file mode 100644 index 0000000000000000000000000000000000000000..098e5a096f4471fce64d29ea0166e7a91d04d853 --- /dev/null +++ b/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_15.csv @@ -0,0 +1,16 @@ +station_name,st_lat,st_lon,starttime,"p_phase, s","p_uncertainty, s","s_phase, s","s_uncertainty, s","velocity_p, km/s","velocity_s, km/s" +LB.DAC,36.277,-117.593697,2019-07-04T17:33:43.387184Z,34.439029693603516,0.23750784806907177,41.48210525512695,0.84033178165555,, +CI.ISA,35.66278,-118.47403,2019-07-04T17:33:46.297658Z,14.392077445983887,0.031968383118510246,26.656494140625,0.06666059140115976,5.509786370336251,2.9747824951914903 +CI.JRC2,35.98249,-117.80885,2019-07-04T17:33:39.947494Z,7.330288887023926,0.016060356865637004,13.382941246032715,0.03524674102663994,4.130917960194064,2.262643275505274 +NN.GWY,36.186001,-116.6698,2019-07-04T17:33:48.493781Z,15.728899002075195,0.045239757746458054,27.405405044555664,0.012221475772093982,6.119231109018811,3.5120359625275515 +NN.STHB,36.645401,-116.338799,2019-07-04T17:33:55.443778Z,23.352947235107422,0.3744226321578026,44.04683303833008,0.1678685937076807,6.418864645982177,3.40318240942485 +CI.RRX,34.875332,-116.996841,2019-07-04T17:33:50.712219Z,17.300827026367188,0.046564643271267414,30.308242797851562,0.07697680732235312,6.553167458647257,3.7407386971609977 +NN.QSM,35.965,-116.869102,2019-07-04T17:33:45.081547Z,10.853179931640625,0.03833597875200212,19.083938598632812,0.020896304631605744,6.441474783566184,3.6633153313634157 +CI.SRT,35.69235,-117.75051,2019-07-04T17:33:38.029990Z,4.525603294372559,0.015247567207552493,9.212132453918457,0.017153594526462257,3.4203901487527526,1.680319839371246 +CI.CWC,36.439049,-118.080498,2019-07-04T17:33:47.189005Z,16.30278205871582,0.03326277597807348,28.5207576751709,0.025247696321457624,5.286053905666142,3.0215671601782677 +CI.SHO,35.899529,-116.275299,2019-07-04T17:33:51.673022Z,19.154117584228516,0.029428565176203847,33.864654541015625,0.038687243359163404,6.306307564126418,3.5668976471999314 +CI.OSI,34.6145,-118.7235,2019-07-04T17:33:57.203547Z,26.982280731201172,0.26682447642087936,49.88245391845703,0.21120380144566298,, +CI.ADO,34.550461,-117.433907,2019-07-04T17:33:53.650962Z,21.616382598876953,0.04179573501460254,39.828887939453125,0.11273605981841683,6.294295200951223,3.416110775195922 +CI.EDW2,34.8811,-117.993881,2019-07-04T17:33:49.567241Z,17.19280242919922,0.023178785922937095,31.17211151123047,0.14238633681088686,6.080147521998276,3.3534711002313884 +CI.HEC,34.8294,-116.335,2019-07-04T17:33:56.148977Z,23.503509521484375,0.16815592534840107,41.08108901977539,0.05570112029090524,6.6093598323533715,3.7813786210938956 +CI.WMF,36.11758,-117.85486,2019-07-04T17:33:41.867962Z,9.510456085205078,0.018548613879829645,17.035369873046875,0.035437317565083504,4.7426953739315625,2.6477379954424243 diff --git a/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_19.csv b/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_19.csv new file mode 100644 index 0000000000000000000000000000000000000000..ed9fae7519a68372c323f0e9faf31559b91d098f --- /dev/null +++ b/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_19.csv @@ -0,0 +1,20 @@ +station_name,st_lat,st_lon,starttime,"p_phase, s","p_uncertainty, s","s_phase, s","s_uncertainty, s","velocity_p, km/s","velocity_s, km/s" +CI.RRX,34.875332,-116.996841,2019-07-04T17:33:50.712219Z,17.26609230041504,0.01999325060751289,30.311491012573242,0.053286688635125756,6.566350666047879,3.7403378352403145 +CI.ISA,35.66278,-118.47403,2019-07-04T17:33:46.297658Z,14.404366493225098,0.038277864223346114,26.667644500732422,0.03612099797464907,5.50508571064213,2.9735386696987014 +CI.CWC,36.439049,-118.080498,2019-07-04T17:33:47.189005Z,16.308765411376953,0.03776653320528567,28.54163932800293,0.05438004853203893,5.284114560540649,3.0193565192363647 +CI.SRT,35.69235,-117.75051,2019-07-04T17:33:38.029990Z,4.5269575119018555,0.011725481890607625,9.215554237365723,0.010158613440580666,3.4193669555188206,1.6796959278338193 +CI.EDW2,34.8811,-117.993881,2019-07-04T17:33:49.567241Z,17.17991828918457,0.0628892658278346,31.307424545288086,0.18126913346350193,6.084707349970942,3.3389771469347687 +CI.DJJ,34.10618,-118.45505,2019-07-04T17:34:01.956593Z,30.000263214111328,0.347661254927516,56.981781005859375,0.21276529412716627,, +CI.SVD,34.10647,-117.09822,2019-07-04T17:34:00.668795Z,28.283260345458984,0.3603836987167597,52.81038284301758,0.1510767498984933,6.726014774674426,3.6022012475274554 +CI.ADO,34.550461,-117.433907,2019-07-04T17:33:53.650962Z,21.651683807373047,0.09646778460592031,39.87929153442383,0.02957542659714818,6.284032893908429,3.411793139218377 +CI.JRC2,35.98249,-117.80885,2019-07-04T17:33:39.947494Z,7.314583778381348,0.021924254251644015,13.388041496276855,0.027581736794672906,4.139787434838701,2.2617813087327994 +CI.BAK,35.34444,-119.104446,2019-07-04T17:33:54.617418Z,24.565580368041992,0.03401762223802507,46.200660705566406,0.23733587935566902,5.842337436232189,3.106457951794842 +CI.BBR,34.2623,-116.92075,2019-07-04T17:33:59.141726Z,28.10399055480957,0.1285839406773448,49.22570037841797,0.034670617897063494,6.349447559001124,3.625033526280956 +NN.GWY,36.186001,-116.6698,2019-07-04T17:33:48.493781Z,15.723100662231445,0.08844907628372312,27.40696144104004,0.022286682506091893,6.121487749252488,3.5118365197532464 +CI.BFS,34.23883,-117.65853,2019-07-04T17:33:58.033722Z,26.031116485595703,0.3012958914041519,47.595970153808594,0.07795811165124178,6.5264690963738525,3.5694466724459386 +NN.QSM,35.965,-116.869102,2019-07-04T17:33:45.081547Z,10.825481414794922,0.030407473677769303,19.073392868041992,0.01883336983155459,6.457956202818351,3.665340788334866 +CI.HEC,34.8294,-116.335,2019-07-04T17:33:56.148977Z,23.591991424560547,0.08986699394881725,41.083412170410156,0.05884413840249181,6.58457138929413,3.7811647948394587 +LB.DAC,36.277,-117.593697,2019-07-04T17:33:43.387184Z,34.324581146240234,0.3142671938985586,40.98020935058594,0.7438081316649914,, +CI.DEC,34.253529,-118.333832,2019-07-04T17:33:59.448227Z,29.22709846496582,0.37216429598629475,51.75123596191406,0.15198043081909418,6.186414587152959,3.493847923108288 +CI.WMF,36.11758,-117.85486,2019-07-04T17:33:41.867962Z,9.494861602783203,0.006664922257186845,17.034446716308594,0.02735861053224653,4.750484837615731,2.6478814857014505 +CI.SHO,35.899529,-116.275299,2019-07-04T17:33:51.673022Z,19.16595458984375,0.03903473261743784,33.81660842895508,0.026658850838430226,6.30241275170275,3.571965439980686 diff --git a/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_3.csv b/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_3.csv index 7e9d219d97f97529f3c22df3c571f0b018bb1300..d9f81ed908cb3b084963a1ce16fc69b6109873d6 100644 --- a/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_3.csv +++ b/data/velocity/35.766_-117.605_10.0_2019-07-04T17:33:49-00_3.csv @@ -1,4 +1,4 @@ station_name,st_lat,st_lon,starttime,"p_phase, s","p_uncertainty, s","s_phase, s","s_uncertainty, s","velocity_p, km/s","velocity_s, km/s" -CI.JRC2,35.98249,-117.80885,2019-07-04T17:33:39.947494Z,7.320212364196777,0.020417090272530913,13.38510799407959,0.028438671142794192,4.13660431013202,2.2622770044299756 -CI.WMF,36.11758,-117.85486,2019-07-04T17:33:41.867962Z,9.509395599365234,0.017237872816622257,17.024826049804688,0.04319542204029858,4.743224278343435,2.6493777937777434 -CI.SRT,35.69235,-117.75051,2019-07-04T17:33:38.029990Z,4.530284881591797,0.01301152427913621,9.212895393371582,0.01826027117203921,3.4168555245020182,1.6801806885131727 +CI.WMF,36.11758,-117.85486,2019-07-04T17:33:41.867962Z,9.503650665283203,0.016685163136571646,17.022592544555664,0.04997979383915663,4.746091546067712,2.649725414106055 +CI.SRT,35.69235,-117.75051,2019-07-04T17:33:38.029990Z,4.53201961517334,0.01748959010001272,9.215676307678223,0.019567650742828846,3.4155476453388767,1.67967367867923 +CI.JRC2,35.98249,-117.80885,2019-07-04T17:33:39.947494Z,7.3213396072387695,0.014792646397836506,13.395279884338379,0.02523316943552345,4.135967410510336,2.2605591132307814 diff --git a/data/velocity/38.38_-122.41_9.4_2000-09-03T08:36:30-00_3.csv b/data/velocity/38.38_-122.41_9.4_2000-09-03T08:36:30-00_3.csv new file mode 100644 index 0000000000000000000000000000000000000000..62cb57b5933842d4b4fc53e297de1ab76847fa51 --- /dev/null +++ b/data/velocity/38.38_-122.41_9.4_2000-09-03T08:36:30-00_3.csv @@ -0,0 +1,4 @@ +station_name,st_lat,st_lon,starttime,"p_phase, s","p_uncertainty, s","s_phase, s","s_uncertainty, s","velocity_p, km/s","velocity_s, km/s" +YG.IAN,37.37822,-122.053497,2000-09-03T08:36:32.115658Z,13.042083740234375,1.3291988521814346,12.836393356323242,2.4260426312685013,, +YG.BMT,37.318611,-122.15313,2000-09-03T08:36:32.692570Z,18.609819412231445,1.7255506664514542,22.838241577148438,4.067991524934769,, +YG.LEX,37.205791,-121.976562,2000-09-03T08:36:34.746037Z,9.203312873840332,1.3033630326390266,14.400150299072266,0.11303140316158533,14.778722714192403,9.445263152788494