zhuwq0 commited on
Commit
f587001
·
1 Parent(s): 4a945b5
Files changed (1) hide show
  1. example_interactive.ipynb +971 -0
example_interactive.ipynb ADDED
@@ -0,0 +1,971 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "attachments": {},
5
+ "cell_type": "markdown",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Interactive Example"
9
+ ]
10
+ },
11
+ {
12
+ "cell_type": "code",
13
+ "execution_count": 1,
14
+ "metadata": {},
15
+ "outputs": [],
16
+ "source": [
17
+ "import requests\n",
18
+ "import json\n",
19
+ "import pandas as pd\n",
20
+ "import os\n",
21
+ "import warnings\n",
22
+ "import numpy as np"
23
+ ]
24
+ },
25
+ {
26
+ "cell_type": "code",
27
+ "execution_count": 2,
28
+ "metadata": {},
29
+ "outputs": [],
30
+ "source": [
31
+ "ADLOC_API_URL = \"http://127.0.0.1:8000\"\n"
32
+ ]
33
+ },
34
+ {
35
+ "cell_type": "markdown",
36
+ "metadata": {},
37
+ "source": [
38
+ "## 2. Prepare test data\n",
39
+ "\n",
40
+ "- Download test data: PhaseNet picks of the 2019 Ridgecrest earthquake sequence\n",
41
+ "1. picks file: picks.json\n",
42
+ "2. station information: stations.csv\n",
43
+ "3. events in SCSN catalog: events.csv\n",
44
+ "4. config file: config.pkl\n",
45
+ "\n",
46
+ "```bash\n",
47
+ "wget https://github.com/wayneweiqiang/GMMA/releases/download/test_data/test_data.zip\n",
48
+ "unzip test_data.zip\n",
49
+ "```"
50
+ ]
51
+ },
52
+ {
53
+ "cell_type": "code",
54
+ "execution_count": 3,
55
+ "metadata": {},
56
+ "outputs": [],
57
+ "source": [
58
+ "# !wget https://github.com/wayneweiqiang/GMMA/releases/download/test_data/test_data.zip\n",
59
+ "# !unzip test_data.zip"
60
+ ]
61
+ },
62
+ {
63
+ "cell_type": "code",
64
+ "execution_count": 4,
65
+ "metadata": {},
66
+ "outputs": [],
67
+ "source": [
68
+ "data_dir = lambda x: os.path.join(\"test_data\", x)\n",
69
+ "station_csv = data_dir(\"stations.csv\")\n",
70
+ "pick_json = data_dir(\"picks.json\")\n",
71
+ "catalog_csv = data_dir(\"catalog_gamma.csv\")\n",
72
+ "picks_csv = data_dir(\"picks_gamma.csv\")\n",
73
+ "if not os.path.exists(\"figures\"):\n",
74
+ " os.makedirs(\"figures\")\n",
75
+ "figure_dir = lambda x: os.path.join(\"figures\", x)\n",
76
+ "\n",
77
+ "## set config\n",
78
+ "config = {'xlim_degree': [-118.004, -117.004], \n",
79
+ " 'ylim_degree': [35.205, 36.205],\n",
80
+ " 'z(km)': [0, 41]}\n",
81
+ "\n",
82
+ "## read stations\n",
83
+ "stations = pd.read_csv(station_csv, delimiter=\"\\t\")\n",
84
+ "stations = stations.rename(columns={\"station\":\"id\"})\n",
85
+ "stations_json = json.loads(stations.to_json(orient=\"records\"))\n",
86
+ "\n",
87
+ "## read picks\n",
88
+ "picks = pd.read_json(pick_json).sort_values(\"timestamp\").iloc[:200]\n",
89
+ "picks[\"timestamp\"] = picks[\"timestamp\"].apply(lambda x: x.isoformat(timespec='milliseconds'))\n",
90
+ "picks_json = json.loads(picks.to_json(orient=\"records\"))\n"
91
+ ]
92
+ },
93
+ {
94
+ "cell_type": "code",
95
+ "execution_count": 5,
96
+ "metadata": {},
97
+ "outputs": [
98
+ {
99
+ "name": "stdout",
100
+ "output_type": "stream",
101
+ "text": [
102
+ " id timestamp prob amp type\n",
103
+ "51368 CI.WCS2..HH 2019-07-04T17:00:00.004 0.371902 1.576248e-06 p\n",
104
+ "50738 CI.WBM..BH 2019-07-04T17:00:00.004 0.429425 4.883445e-07 p\n",
105
+ "51254 CI.WCS2..BH 2019-07-04T17:00:00.004 0.570932 1.388111e-06 p\n",
106
+ "51643 CI.WMF..BH 2019-07-04T17:00:00.004 0.325480 1.930339e-07 p\n",
107
+ "51727 CI.WMF..HH 2019-07-04T17:00:00.004 0.499070 1.795238e-07 p\n",
108
+ "... ... ... ... ... ...\n",
109
+ "52664 CI.WRV2..EH 2019-07-04T17:05:13.634 0.565324 6.402773e-07 p\n",
110
+ "53676 PB.B918..EH 2019-07-04T17:05:13.754 0.621534 6.146262e-07 s\n",
111
+ "53083 CI.WVP2..HN 2019-07-04T17:05:13.894 0.891210 4.123632e-06 p\n",
112
+ "46727 CI.CCC..HN 2019-07-04T17:05:14.004 0.791852 5.821601e-06 s\n",
113
+ "46543 CI.CCC..HH 2019-07-04T17:05:14.004 0.827445 5.868008e-06 s\n",
114
+ "\n",
115
+ "[200 rows x 5 columns]\n"
116
+ ]
117
+ }
118
+ ],
119
+ "source": [
120
+ "print(picks)"
121
+ ]
122
+ },
123
+ {
124
+ "cell_type": "code",
125
+ "execution_count": 6,
126
+ "metadata": {},
127
+ "outputs": [],
128
+ "source": [
129
+ "picks.rename(columns={\"id\": \"station_id\", \"timestamp\": \"phase_time\", \"prob\": \"phase_score\", \"amp\": \"phase_amplitude\", \"type\": \"phase_type\"}, inplace=True)\n",
130
+ "stations.rename(columns={\"id\": \"station_id\"}, inplace=True)"
131
+ ]
132
+ },
133
+ {
134
+ "cell_type": "code",
135
+ "execution_count": 7,
136
+ "metadata": {},
137
+ "outputs": [],
138
+ "source": [
139
+ "picks[\"phase_time\"] = pd.to_datetime(picks[\"phase_time\"])\n",
140
+ "picks[\"timestamp\"] = picks[\"phase_time\"]\n",
141
+ "picks[\"phase_type\"] = picks[\"phase_type\"].str.upper()"
142
+ ]
143
+ },
144
+ {
145
+ "cell_type": "code",
146
+ "execution_count": 8,
147
+ "metadata": {},
148
+ "outputs": [],
149
+ "source": [
150
+ "picks = picks.merge(stations, on=\"station_id\")"
151
+ ]
152
+ },
153
+ {
154
+ "cell_type": "code",
155
+ "execution_count": 9,
156
+ "metadata": {},
157
+ "outputs": [],
158
+ "source": [
159
+ "# picks = picks[(picks[\"timestamp\"] > \"2019-07-04T17:02:00.000Z\") & (picks[\"timestamp\"] < \"2019-07-04T17:04:00.000Z\")]\n",
160
+ "picks = picks[(picks[\"timestamp\"] > pd.to_datetime(\"2019-07-04T17:02:00.000\")) & (picks[\"timestamp\"] < pd.to_datetime(\"2019-07-04T17:04:00.000\"))]"
161
+ ]
162
+ },
163
+ {
164
+ "cell_type": "code",
165
+ "execution_count": 10,
166
+ "metadata": {},
167
+ "outputs": [
168
+ {
169
+ "data": {
170
+ "image/png": "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",
171
+ "text/plain": [
172
+ "<Figure size 640x480 with 1 Axes>"
173
+ ]
174
+ },
175
+ "metadata": {},
176
+ "output_type": "display_data"
177
+ }
178
+ ],
179
+ "source": [
180
+ "plt.figure()\n",
181
+ "# plt.scatter(picks[\"longitude\"], picks[\"latitude\"], c=picks[\"timestamp\"], cmap=\"viridis\")\n",
182
+ "color = {\"P\": \"red\", \"S\": \"blue\"}\n",
183
+ "plt.scatter(picks[\"timestamp\"], picks[\"latitude\"], c=picks[\"phase_type\"].apply(lambda x: color[x]), s=10)\n",
184
+ "plt.scatter([], [], c=\"red\", label=\"P\")\n",
185
+ "plt.scatter([], [], c=\"blue\", label=\"S\")\n",
186
+ "plt.legend()\n",
187
+ "plt.show()"
188
+ ]
189
+ },
190
+ {
191
+ "cell_type": "code",
192
+ "execution_count": 11,
193
+ "metadata": {},
194
+ "outputs": [
195
+ {
196
+ "data": {
197
+ "text/html": [
198
+ "<div>\n",
199
+ "<style scoped>\n",
200
+ " .dataframe tbody tr th:only-of-type {\n",
201
+ " vertical-align: middle;\n",
202
+ " }\n",
203
+ "\n",
204
+ " .dataframe tbody tr th {\n",
205
+ " vertical-align: top;\n",
206
+ " }\n",
207
+ "\n",
208
+ " .dataframe thead th {\n",
209
+ " text-align: right;\n",
210
+ " }\n",
211
+ "</style>\n",
212
+ "<table border=\"1\" class=\"dataframe\">\n",
213
+ " <thead>\n",
214
+ " <tr style=\"text-align: right;\">\n",
215
+ " <th></th>\n",
216
+ " <th>station_id</th>\n",
217
+ " <th>phase_time</th>\n",
218
+ " <th>phase_score</th>\n",
219
+ " <th>phase_amplitude</th>\n",
220
+ " <th>phase_type</th>\n",
221
+ " <th>timestamp</th>\n",
222
+ " <th>longitude</th>\n",
223
+ " <th>latitude</th>\n",
224
+ " <th>elevation(m)</th>\n",
225
+ " <th>unit</th>\n",
226
+ " <th>component</th>\n",
227
+ " <th>response</th>\n",
228
+ " </tr>\n",
229
+ " </thead>\n",
230
+ " <tbody>\n",
231
+ " <tr>\n",
232
+ " <th>1</th>\n",
233
+ " <td>CI.WCS2..HH</td>\n",
234
+ " <td>2019-07-04 17:03:02.664</td>\n",
235
+ " <td>0.948111</td>\n",
236
+ " <td>0.001982</td>\n",
237
+ " <td>P</td>\n",
238
+ " <td>2019-07-04 17:03:02.664</td>\n",
239
+ " <td>-117.765</td>\n",
240
+ " <td>36.025</td>\n",
241
+ " <td>1143.0</td>\n",
242
+ " <td>m/s</td>\n",
243
+ " <td>E,N,Z</td>\n",
244
+ " <td>626910000.00,626910000.00,626838000.00</td>\n",
245
+ " </tr>\n",
246
+ " <tr>\n",
247
+ " <th>2</th>\n",
248
+ " <td>CI.WCS2..HH</td>\n",
249
+ " <td>2019-07-04 17:03:08.144</td>\n",
250
+ " <td>0.753875</td>\n",
251
+ " <td>0.001982</td>\n",
252
+ " <td>S</td>\n",
253
+ " <td>2019-07-04 17:03:08.144</td>\n",
254
+ " <td>-117.765</td>\n",
255
+ " <td>36.025</td>\n",
256
+ " <td>1143.0</td>\n",
257
+ " <td>m/s</td>\n",
258
+ " <td>E,N,Z</td>\n",
259
+ " <td>626910000.00,626910000.00,626838000.00</td>\n",
260
+ " </tr>\n",
261
+ " <tr>\n",
262
+ " <th>4</th>\n",
263
+ " <td>CI.WBM..BH</td>\n",
264
+ " <td>2019-07-04 17:03:02.174</td>\n",
265
+ " <td>0.954165</td>\n",
266
+ " <td>0.002353</td>\n",
267
+ " <td>P</td>\n",
268
+ " <td>2019-07-04 17:03:02.174</td>\n",
269
+ " <td>-117.890</td>\n",
270
+ " <td>35.608</td>\n",
271
+ " <td>892.0</td>\n",
272
+ " <td>m/s</td>\n",
273
+ " <td>E,N,Z</td>\n",
274
+ " <td>314573000.00,314573000.00,314573000.00</td>\n",
275
+ " </tr>\n",
276
+ " <tr>\n",
277
+ " <th>5</th>\n",
278
+ " <td>CI.WBM..BH</td>\n",
279
+ " <td>2019-07-04 17:03:07.254</td>\n",
280
+ " <td>0.931752</td>\n",
281
+ " <td>0.002353</td>\n",
282
+ " <td>S</td>\n",
283
+ " <td>2019-07-04 17:03:07.254</td>\n",
284
+ " <td>-117.890</td>\n",
285
+ " <td>35.608</td>\n",
286
+ " <td>892.0</td>\n",
287
+ " <td>m/s</td>\n",
288
+ " <td>E,N,Z</td>\n",
289
+ " <td>314573000.00,314573000.00,314573000.00</td>\n",
290
+ " </tr>\n",
291
+ " <tr>\n",
292
+ " <th>6</th>\n",
293
+ " <td>CI.WBM..BH</td>\n",
294
+ " <td>2019-07-04 17:03:21.834</td>\n",
295
+ " <td>0.511648</td>\n",
296
+ " <td>0.000096</td>\n",
297
+ " <td>P</td>\n",
298
+ " <td>2019-07-04 17:03:21.834</td>\n",
299
+ " <td>-117.890</td>\n",
300
+ " <td>35.608</td>\n",
301
+ " <td>892.0</td>\n",
302
+ " <td>m/s</td>\n",
303
+ " <td>E,N,Z</td>\n",
304
+ " <td>314573000.00,314573000.00,314573000.00</td>\n",
305
+ " </tr>\n",
306
+ " <tr>\n",
307
+ " <th>...</th>\n",
308
+ " <td>...</td>\n",
309
+ " <td>...</td>\n",
310
+ " <td>...</td>\n",
311
+ " <td>...</td>\n",
312
+ " <td>...</td>\n",
313
+ " <td>...</td>\n",
314
+ " <td>...</td>\n",
315
+ " <td>...</td>\n",
316
+ " <td>...</td>\n",
317
+ " <td>...</td>\n",
318
+ " <td>...</td>\n",
319
+ " <td>...</td>\n",
320
+ " </tr>\n",
321
+ " <tr>\n",
322
+ " <th>194</th>\n",
323
+ " <td>CI.DTP..BH</td>\n",
324
+ " <td>2019-07-04 17:03:04.984</td>\n",
325
+ " <td>0.948384</td>\n",
326
+ " <td>0.000483</td>\n",
327
+ " <td>P</td>\n",
328
+ " <td>2019-07-04 17:03:04.984</td>\n",
329
+ " <td>-117.846</td>\n",
330
+ " <td>35.267</td>\n",
331
+ " <td>908.0</td>\n",
332
+ " <td>m/s</td>\n",
333
+ " <td>E,N,Z</td>\n",
334
+ " <td>627368000.00,627368000.00,627368000.00</td>\n",
335
+ " </tr>\n",
336
+ " <tr>\n",
337
+ " <th>195</th>\n",
338
+ " <td>CI.DTP..BH</td>\n",
339
+ " <td>2019-07-04 17:03:12.134</td>\n",
340
+ " <td>0.616461</td>\n",
341
+ " <td>0.000483</td>\n",
342
+ " <td>S</td>\n",
343
+ " <td>2019-07-04 17:03:12.134</td>\n",
344
+ " <td>-117.846</td>\n",
345
+ " <td>35.267</td>\n",
346
+ " <td>908.0</td>\n",
347
+ " <td>m/s</td>\n",
348
+ " <td>E,N,Z</td>\n",
349
+ " <td>627368000.00,627368000.00,627368000.00</td>\n",
350
+ " </tr>\n",
351
+ " <tr>\n",
352
+ " <th>196</th>\n",
353
+ " <td>CI.DTP..HN</td>\n",
354
+ " <td>2019-07-04 17:03:04.984</td>\n",
355
+ " <td>0.967691</td>\n",
356
+ " <td>0.000484</td>\n",
357
+ " <td>P</td>\n",
358
+ " <td>2019-07-04 17:03:04.984</td>\n",
359
+ " <td>-117.846</td>\n",
360
+ " <td>35.267</td>\n",
361
+ " <td>908.0</td>\n",
362
+ " <td>m/s**2</td>\n",
363
+ " <td>E,N,Z</td>\n",
364
+ " <td>214399.00,213971.00,214484.00</td>\n",
365
+ " </tr>\n",
366
+ " <tr>\n",
367
+ " <th>197</th>\n",
368
+ " <td>CI.DTP..HN</td>\n",
369
+ " <td>2019-07-04 17:03:12.154</td>\n",
370
+ " <td>0.672017</td>\n",
371
+ " <td>0.000484</td>\n",
372
+ " <td>S</td>\n",
373
+ " <td>2019-07-04 17:03:12.154</td>\n",
374
+ " <td>-117.846</td>\n",
375
+ " <td>35.267</td>\n",
376
+ " <td>908.0</td>\n",
377
+ " <td>m/s**2</td>\n",
378
+ " <td>E,N,Z</td>\n",
379
+ " <td>214399.00,213971.00,214484.00</td>\n",
380
+ " </tr>\n",
381
+ " <tr>\n",
382
+ " <th>198</th>\n",
383
+ " <td>CI.DTP..HN</td>\n",
384
+ " <td>2019-07-04 17:03:43.354</td>\n",
385
+ " <td>0.401861</td>\n",
386
+ " <td>0.000014</td>\n",
387
+ " <td>P</td>\n",
388
+ " <td>2019-07-04 17:03:43.354</td>\n",
389
+ " <td>-117.846</td>\n",
390
+ " <td>35.267</td>\n",
391
+ " <td>908.0</td>\n",
392
+ " <td>m/s**2</td>\n",
393
+ " <td>E,N,Z</td>\n",
394
+ " <td>214399.00,213971.00,214484.00</td>\n",
395
+ " </tr>\n",
396
+ " </tbody>\n",
397
+ "</table>\n",
398
+ "<p>108 rows × 12 columns</p>\n",
399
+ "</div>"
400
+ ],
401
+ "text/plain": [
402
+ " station_id phase_time phase_score phase_amplitude \\\n",
403
+ "1 CI.WCS2..HH 2019-07-04 17:03:02.664 0.948111 0.001982 \n",
404
+ "2 CI.WCS2..HH 2019-07-04 17:03:08.144 0.753875 0.001982 \n",
405
+ "4 CI.WBM..BH 2019-07-04 17:03:02.174 0.954165 0.002353 \n",
406
+ "5 CI.WBM..BH 2019-07-04 17:03:07.254 0.931752 0.002353 \n",
407
+ "6 CI.WBM..BH 2019-07-04 17:03:21.834 0.511648 0.000096 \n",
408
+ ".. ... ... ... ... \n",
409
+ "194 CI.DTP..BH 2019-07-04 17:03:04.984 0.948384 0.000483 \n",
410
+ "195 CI.DTP..BH 2019-07-04 17:03:12.134 0.616461 0.000483 \n",
411
+ "196 CI.DTP..HN 2019-07-04 17:03:04.984 0.967691 0.000484 \n",
412
+ "197 CI.DTP..HN 2019-07-04 17:03:12.154 0.672017 0.000484 \n",
413
+ "198 CI.DTP..HN 2019-07-04 17:03:43.354 0.401861 0.000014 \n",
414
+ "\n",
415
+ " phase_type timestamp longitude latitude elevation(m) \\\n",
416
+ "1 P 2019-07-04 17:03:02.664 -117.765 36.025 1143.0 \n",
417
+ "2 S 2019-07-04 17:03:08.144 -117.765 36.025 1143.0 \n",
418
+ "4 P 2019-07-04 17:03:02.174 -117.890 35.608 892.0 \n",
419
+ "5 S 2019-07-04 17:03:07.254 -117.890 35.608 892.0 \n",
420
+ "6 P 2019-07-04 17:03:21.834 -117.890 35.608 892.0 \n",
421
+ ".. ... ... ... ... ... \n",
422
+ "194 P 2019-07-04 17:03:04.984 -117.846 35.267 908.0 \n",
423
+ "195 S 2019-07-04 17:03:12.134 -117.846 35.267 908.0 \n",
424
+ "196 P 2019-07-04 17:03:04.984 -117.846 35.267 908.0 \n",
425
+ "197 S 2019-07-04 17:03:12.154 -117.846 35.267 908.0 \n",
426
+ "198 P 2019-07-04 17:03:43.354 -117.846 35.267 908.0 \n",
427
+ "\n",
428
+ " unit component response \n",
429
+ "1 m/s E,N,Z 626910000.00,626910000.00,626838000.00 \n",
430
+ "2 m/s E,N,Z 626910000.00,626910000.00,626838000.00 \n",
431
+ "4 m/s E,N,Z 314573000.00,314573000.00,314573000.00 \n",
432
+ "5 m/s E,N,Z 314573000.00,314573000.00,314573000.00 \n",
433
+ "6 m/s E,N,Z 314573000.00,314573000.00,314573000.00 \n",
434
+ ".. ... ... ... \n",
435
+ "194 m/s E,N,Z 627368000.00,627368000.00,627368000.00 \n",
436
+ "195 m/s E,N,Z 627368000.00,627368000.00,627368000.00 \n",
437
+ "196 m/s**2 E,N,Z 214399.00,213971.00,214484.00 \n",
438
+ "197 m/s**2 E,N,Z 214399.00,213971.00,214484.00 \n",
439
+ "198 m/s**2 E,N,Z 214399.00,213971.00,214484.00 \n",
440
+ "\n",
441
+ "[108 rows x 12 columns]"
442
+ ]
443
+ },
444
+ "execution_count": 11,
445
+ "metadata": {},
446
+ "output_type": "execute_result"
447
+ }
448
+ ],
449
+ "source": [
450
+ "picks"
451
+ ]
452
+ },
453
+ {
454
+ "cell_type": "code",
455
+ "execution_count": 12,
456
+ "metadata": {},
457
+ "outputs": [],
458
+ "source": [
459
+ "# stations.rename(columns={\"elevation(m)\", \"elevation_m\"}, inplace=True)\n",
460
+ "stations.rename(columns={\"elevation(m)\": \"elevation_m\"}, inplace=True)\n"
461
+ ]
462
+ },
463
+ {
464
+ "cell_type": "code",
465
+ "execution_count": 13,
466
+ "metadata": {},
467
+ "outputs": [
468
+ {
469
+ "data": {
470
+ "text/html": [
471
+ "<div>\n",
472
+ "<style scoped>\n",
473
+ " .dataframe tbody tr th:only-of-type {\n",
474
+ " vertical-align: middle;\n",
475
+ " }\n",
476
+ "\n",
477
+ " .dataframe tbody tr th {\n",
478
+ " vertical-align: top;\n",
479
+ " }\n",
480
+ "\n",
481
+ " .dataframe thead th {\n",
482
+ " text-align: right;\n",
483
+ " }\n",
484
+ "</style>\n",
485
+ "<table border=\"1\" class=\"dataframe\">\n",
486
+ " <thead>\n",
487
+ " <tr style=\"text-align: right;\">\n",
488
+ " <th></th>\n",
489
+ " <th>station_id</th>\n",
490
+ " <th>phase_time</th>\n",
491
+ " <th>phase_score</th>\n",
492
+ " <th>phase_amplitude</th>\n",
493
+ " <th>phase_type</th>\n",
494
+ " <th>timestamp</th>\n",
495
+ " <th>longitude</th>\n",
496
+ " <th>latitude</th>\n",
497
+ " <th>elevation(m)</th>\n",
498
+ " <th>unit</th>\n",
499
+ " <th>component</th>\n",
500
+ " <th>response</th>\n",
501
+ " </tr>\n",
502
+ " </thead>\n",
503
+ " <tbody>\n",
504
+ " <tr>\n",
505
+ " <th>1</th>\n",
506
+ " <td>CI.WCS2..HH</td>\n",
507
+ " <td>2019-07-04 17:03:02.664</td>\n",
508
+ " <td>0.948111</td>\n",
509
+ " <td>0.001982</td>\n",
510
+ " <td>P</td>\n",
511
+ " <td>2019-07-04 17:03:02.664</td>\n",
512
+ " <td>-117.765</td>\n",
513
+ " <td>36.025</td>\n",
514
+ " <td>1143.0</td>\n",
515
+ " <td>m/s</td>\n",
516
+ " <td>E,N,Z</td>\n",
517
+ " <td>626910000.00,626910000.00,626838000.00</td>\n",
518
+ " </tr>\n",
519
+ " <tr>\n",
520
+ " <th>2</th>\n",
521
+ " <td>CI.WCS2..HH</td>\n",
522
+ " <td>2019-07-04 17:03:08.144</td>\n",
523
+ " <td>0.753875</td>\n",
524
+ " <td>0.001982</td>\n",
525
+ " <td>S</td>\n",
526
+ " <td>2019-07-04 17:03:08.144</td>\n",
527
+ " <td>-117.765</td>\n",
528
+ " <td>36.025</td>\n",
529
+ " <td>1143.0</td>\n",
530
+ " <td>m/s</td>\n",
531
+ " <td>E,N,Z</td>\n",
532
+ " <td>626910000.00,626910000.00,626838000.00</td>\n",
533
+ " </tr>\n",
534
+ " <tr>\n",
535
+ " <th>4</th>\n",
536
+ " <td>CI.WBM..BH</td>\n",
537
+ " <td>2019-07-04 17:03:02.174</td>\n",
538
+ " <td>0.954165</td>\n",
539
+ " <td>0.002353</td>\n",
540
+ " <td>P</td>\n",
541
+ " <td>2019-07-04 17:03:02.174</td>\n",
542
+ " <td>-117.890</td>\n",
543
+ " <td>35.608</td>\n",
544
+ " <td>892.0</td>\n",
545
+ " <td>m/s</td>\n",
546
+ " <td>E,N,Z</td>\n",
547
+ " <td>314573000.00,314573000.00,314573000.00</td>\n",
548
+ " </tr>\n",
549
+ " <tr>\n",
550
+ " <th>5</th>\n",
551
+ " <td>CI.WBM..BH</td>\n",
552
+ " <td>2019-07-04 17:03:07.254</td>\n",
553
+ " <td>0.931752</td>\n",
554
+ " <td>0.002353</td>\n",
555
+ " <td>S</td>\n",
556
+ " <td>2019-07-04 17:03:07.254</td>\n",
557
+ " <td>-117.890</td>\n",
558
+ " <td>35.608</td>\n",
559
+ " <td>892.0</td>\n",
560
+ " <td>m/s</td>\n",
561
+ " <td>E,N,Z</td>\n",
562
+ " <td>314573000.00,314573000.00,314573000.00</td>\n",
563
+ " </tr>\n",
564
+ " <tr>\n",
565
+ " <th>6</th>\n",
566
+ " <td>CI.WBM..BH</td>\n",
567
+ " <td>2019-07-04 17:03:21.834</td>\n",
568
+ " <td>0.511648</td>\n",
569
+ " <td>0.000096</td>\n",
570
+ " <td>P</td>\n",
571
+ " <td>2019-07-04 17:03:21.834</td>\n",
572
+ " <td>-117.890</td>\n",
573
+ " <td>35.608</td>\n",
574
+ " <td>892.0</td>\n",
575
+ " <td>m/s</td>\n",
576
+ " <td>E,N,Z</td>\n",
577
+ " <td>314573000.00,314573000.00,314573000.00</td>\n",
578
+ " </tr>\n",
579
+ " <tr>\n",
580
+ " <th>...</th>\n",
581
+ " <td>...</td>\n",
582
+ " <td>...</td>\n",
583
+ " <td>...</td>\n",
584
+ " <td>...</td>\n",
585
+ " <td>...</td>\n",
586
+ " <td>...</td>\n",
587
+ " <td>...</td>\n",
588
+ " <td>...</td>\n",
589
+ " <td>...</td>\n",
590
+ " <td>...</td>\n",
591
+ " <td>...</td>\n",
592
+ " <td>...</td>\n",
593
+ " </tr>\n",
594
+ " <tr>\n",
595
+ " <th>194</th>\n",
596
+ " <td>CI.DTP..BH</td>\n",
597
+ " <td>2019-07-04 17:03:04.984</td>\n",
598
+ " <td>0.948384</td>\n",
599
+ " <td>0.000483</td>\n",
600
+ " <td>P</td>\n",
601
+ " <td>2019-07-04 17:03:04.984</td>\n",
602
+ " <td>-117.846</td>\n",
603
+ " <td>35.267</td>\n",
604
+ " <td>908.0</td>\n",
605
+ " <td>m/s</td>\n",
606
+ " <td>E,N,Z</td>\n",
607
+ " <td>627368000.00,627368000.00,627368000.00</td>\n",
608
+ " </tr>\n",
609
+ " <tr>\n",
610
+ " <th>195</th>\n",
611
+ " <td>CI.DTP..BH</td>\n",
612
+ " <td>2019-07-04 17:03:12.134</td>\n",
613
+ " <td>0.616461</td>\n",
614
+ " <td>0.000483</td>\n",
615
+ " <td>S</td>\n",
616
+ " <td>2019-07-04 17:03:12.134</td>\n",
617
+ " <td>-117.846</td>\n",
618
+ " <td>35.267</td>\n",
619
+ " <td>908.0</td>\n",
620
+ " <td>m/s</td>\n",
621
+ " <td>E,N,Z</td>\n",
622
+ " <td>627368000.00,627368000.00,627368000.00</td>\n",
623
+ " </tr>\n",
624
+ " <tr>\n",
625
+ " <th>196</th>\n",
626
+ " <td>CI.DTP..HN</td>\n",
627
+ " <td>2019-07-04 17:03:04.984</td>\n",
628
+ " <td>0.967691</td>\n",
629
+ " <td>0.000484</td>\n",
630
+ " <td>P</td>\n",
631
+ " <td>2019-07-04 17:03:04.984</td>\n",
632
+ " <td>-117.846</td>\n",
633
+ " <td>35.267</td>\n",
634
+ " <td>908.0</td>\n",
635
+ " <td>m/s**2</td>\n",
636
+ " <td>E,N,Z</td>\n",
637
+ " <td>214399.00,213971.00,214484.00</td>\n",
638
+ " </tr>\n",
639
+ " <tr>\n",
640
+ " <th>197</th>\n",
641
+ " <td>CI.DTP..HN</td>\n",
642
+ " <td>2019-07-04 17:03:12.154</td>\n",
643
+ " <td>0.672017</td>\n",
644
+ " <td>0.000484</td>\n",
645
+ " <td>S</td>\n",
646
+ " <td>2019-07-04 17:03:12.154</td>\n",
647
+ " <td>-117.846</td>\n",
648
+ " <td>35.267</td>\n",
649
+ " <td>908.0</td>\n",
650
+ " <td>m/s**2</td>\n",
651
+ " <td>E,N,Z</td>\n",
652
+ " <td>214399.00,213971.00,214484.00</td>\n",
653
+ " </tr>\n",
654
+ " <tr>\n",
655
+ " <th>198</th>\n",
656
+ " <td>CI.DTP..HN</td>\n",
657
+ " <td>2019-07-04 17:03:43.354</td>\n",
658
+ " <td>0.401861</td>\n",
659
+ " <td>0.000014</td>\n",
660
+ " <td>P</td>\n",
661
+ " <td>2019-07-04 17:03:43.354</td>\n",
662
+ " <td>-117.846</td>\n",
663
+ " <td>35.267</td>\n",
664
+ " <td>908.0</td>\n",
665
+ " <td>m/s**2</td>\n",
666
+ " <td>E,N,Z</td>\n",
667
+ " <td>214399.00,213971.00,214484.00</td>\n",
668
+ " </tr>\n",
669
+ " </tbody>\n",
670
+ "</table>\n",
671
+ "<p>108 rows × 12 columns</p>\n",
672
+ "</div>"
673
+ ],
674
+ "text/plain": [
675
+ " station_id phase_time phase_score phase_amplitude \\\n",
676
+ "1 CI.WCS2..HH 2019-07-04 17:03:02.664 0.948111 0.001982 \n",
677
+ "2 CI.WCS2..HH 2019-07-04 17:03:08.144 0.753875 0.001982 \n",
678
+ "4 CI.WBM..BH 2019-07-04 17:03:02.174 0.954165 0.002353 \n",
679
+ "5 CI.WBM..BH 2019-07-04 17:03:07.254 0.931752 0.002353 \n",
680
+ "6 CI.WBM..BH 2019-07-04 17:03:21.834 0.511648 0.000096 \n",
681
+ ".. ... ... ... ... \n",
682
+ "194 CI.DTP..BH 2019-07-04 17:03:04.984 0.948384 0.000483 \n",
683
+ "195 CI.DTP..BH 2019-07-04 17:03:12.134 0.616461 0.000483 \n",
684
+ "196 CI.DTP..HN 2019-07-04 17:03:04.984 0.967691 0.000484 \n",
685
+ "197 CI.DTP..HN 2019-07-04 17:03:12.154 0.672017 0.000484 \n",
686
+ "198 CI.DTP..HN 2019-07-04 17:03:43.354 0.401861 0.000014 \n",
687
+ "\n",
688
+ " phase_type timestamp longitude latitude elevation(m) \\\n",
689
+ "1 P 2019-07-04 17:03:02.664 -117.765 36.025 1143.0 \n",
690
+ "2 S 2019-07-04 17:03:08.144 -117.765 36.025 1143.0 \n",
691
+ "4 P 2019-07-04 17:03:02.174 -117.890 35.608 892.0 \n",
692
+ "5 S 2019-07-04 17:03:07.254 -117.890 35.608 892.0 \n",
693
+ "6 P 2019-07-04 17:03:21.834 -117.890 35.608 892.0 \n",
694
+ ".. ... ... ... ... ... \n",
695
+ "194 P 2019-07-04 17:03:04.984 -117.846 35.267 908.0 \n",
696
+ "195 S 2019-07-04 17:03:12.134 -117.846 35.267 908.0 \n",
697
+ "196 P 2019-07-04 17:03:04.984 -117.846 35.267 908.0 \n",
698
+ "197 S 2019-07-04 17:03:12.154 -117.846 35.267 908.0 \n",
699
+ "198 P 2019-07-04 17:03:43.354 -117.846 35.267 908.0 \n",
700
+ "\n",
701
+ " unit component response \n",
702
+ "1 m/s E,N,Z 626910000.00,626910000.00,626838000.00 \n",
703
+ "2 m/s E,N,Z 626910000.00,626910000.00,626838000.00 \n",
704
+ "4 m/s E,N,Z 314573000.00,314573000.00,314573000.00 \n",
705
+ "5 m/s E,N,Z 314573000.00,314573000.00,314573000.00 \n",
706
+ "6 m/s E,N,Z 314573000.00,314573000.00,314573000.00 \n",
707
+ ".. ... ... ... \n",
708
+ "194 m/s E,N,Z 627368000.00,627368000.00,627368000.00 \n",
709
+ "195 m/s E,N,Z 627368000.00,627368000.00,627368000.00 \n",
710
+ "196 m/s**2 E,N,Z 214399.00,213971.00,214484.00 \n",
711
+ "197 m/s**2 E,N,Z 214399.00,213971.00,214484.00 \n",
712
+ "198 m/s**2 E,N,Z 214399.00,213971.00,214484.00 \n",
713
+ "\n",
714
+ "[108 rows x 12 columns]"
715
+ ]
716
+ },
717
+ "execution_count": 13,
718
+ "metadata": {},
719
+ "output_type": "execute_result"
720
+ }
721
+ ],
722
+ "source": [
723
+ "picks"
724
+ ]
725
+ },
726
+ {
727
+ "cell_type": "code",
728
+ "execution_count": 14,
729
+ "metadata": {},
730
+ "outputs": [
731
+ {
732
+ "name": "stdout",
733
+ "output_type": "stream",
734
+ "text": [
735
+ "Eikonal Solver: \n",
736
+ "Iter 0, error = 999.937\n",
737
+ "Iter 1, error = 0.000\n",
738
+ "Time: 1.424\n",
739
+ "Eikonal Solver: \n",
740
+ "Iter 0, error = 999.879\n",
741
+ "Iter 1, error = 0.000\n",
742
+ "Time: 0.093\n"
743
+ ]
744
+ }
745
+ ],
746
+ "source": [
747
+ "from app import run_adloc"
748
+ ]
749
+ },
750
+ {
751
+ "cell_type": "code",
752
+ "execution_count": 15,
753
+ "metadata": {},
754
+ "outputs": [],
755
+ "source": [
756
+ "# call loalhost:8000/predict\n",
757
+ "picks_ = picks.copy()\n",
758
+ "picks_.drop(columns=[\"timestamp\", \"latitude\", \"longitude\", \"elevation(m)\", \"unit\", \"component\", \"response\"], inplace=True, errors=\"ignore\")\n",
759
+ "picks_[\"phase_time\"] = picks_[\"phase_time\"].apply(lambda x: x.isoformat())\n",
760
+ "stations_ = stations.copy()\n",
761
+ "stations_.drop(columns=[\"component\", \"unit\", \"response\"], inplace=True, errors=\"ignore\")\n",
762
+ "picks_ = picks_.to_dict(orient=\"records\")\n",
763
+ "stations_ = stations.to_dict(orient=\"records\")\n",
764
+ "\n",
765
+ "response = requests.post(f\"{ADLOC_API_URL}/predict/\", json={\"stations\": {\"data\": stations_}, \"picks\": {\"data\":picks_}, \"config\": config})\n",
766
+ "\n",
767
+ "if response.status_code == 200:\n",
768
+ " result = response.json()\n",
769
+ " # Process the result as needed\n",
770
+ "else:\n",
771
+ " print(f\"Request failed with status code: {response.status_code}\")\n",
772
+ " print(f\"Error message: {response.text}\")"
773
+ ]
774
+ },
775
+ {
776
+ "cell_type": "code",
777
+ "execution_count": 16,
778
+ "metadata": {},
779
+ "outputs": [
780
+ {
781
+ "name": "stdout",
782
+ "output_type": "stream",
783
+ "text": [
784
+ "[{'time': '2019-07-04T17:02:55.148967757', 'adloc_score': 0.9949418137109317, 'adloc_residual_time': 0.195455895248725, 'num_picks': 98, 'event_index': 0, 'longitude': -117.49587484976774, 'latitude': 35.7090950366934, 'depth_km': 0.0}]\n"
785
+ ]
786
+ }
787
+ ],
788
+ "source": [
789
+ "print(result[\"events\"])"
790
+ ]
791
+ },
792
+ {
793
+ "cell_type": "code",
794
+ "execution_count": 17,
795
+ "metadata": {},
796
+ "outputs": [
797
+ {
798
+ "name": "stderr",
799
+ "output_type": "stream",
800
+ "text": [
801
+ "Iter 0: 100%|██████████| 1/1 [00:00<00:00, 1.19it/s]"
802
+ ]
803
+ },
804
+ {
805
+ "name": "stdout",
806
+ "output_type": "stream",
807
+ "text": [
808
+ "ADLoc using 98 picks outof 108 picks\n"
809
+ ]
810
+ },
811
+ {
812
+ "name": "stderr",
813
+ "output_type": "stream",
814
+ "text": [
815
+ "\n"
816
+ ]
817
+ }
818
+ ],
819
+ "source": [
820
+ "config[\"region\"] = \"Ridgecrest\"\n",
821
+ "config[\"event_index\"] = 1\n",
822
+ "\n",
823
+ "picks_, events_ = run_adloc(picks, stations, config)"
824
+ ]
825
+ },
826
+ {
827
+ "cell_type": "code",
828
+ "execution_count": 18,
829
+ "metadata": {},
830
+ "outputs": [],
831
+ "source": [
832
+ "picks_ = pd.DataFrame(picks_)"
833
+ ]
834
+ },
835
+ {
836
+ "cell_type": "code",
837
+ "execution_count": 19,
838
+ "metadata": {},
839
+ "outputs": [
840
+ {
841
+ "data": {
842
+ "text/plain": [
843
+ "<matplotlib.collections.PathCollection at 0x326714670>"
844
+ ]
845
+ },
846
+ "execution_count": 19,
847
+ "metadata": {},
848
+ "output_type": "execute_result"
849
+ },
850
+ {
851
+ "data": {
852
+ "image/png": "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n33W8ng81tGjR31tGRkZVnx8vFVeXl7l80aNGmXdcsstVc4vKCiwIiMjrczMTF/bt99+a4WFhVlZWVmWZVnWf/7zH0uStX79et8yOTk5liTr888/r7ZumKM+bIuWZVlJSUnW008/XW2NMJfp22FF77//viXJ+vHHH/3a+Uw8MxxhqaP27dunZcuWacKECX7t48eP1xVXXOGbzsnJ0eWXX+43CNKQIUO0Z88e7dq1K+C6t2zZonXr1unyyy/3tWVnZ8vlcvmes3nzZh07dkxXX321b5n4+HhdcMEFWrdune+1PR6P+vbt61smJSVFHo/HtwzqvrqwLR43a9YstWjRQhdeeKEee+wxlZSUnOa7hmmc3g5rgs/EM1Nvbn7Y0Lz44ouKiYnR6NGj/drj4uJUXl7um967d6/atWvnt0zr1q19884//3xfe9u2bfXdd9+ptLRUM2bM0G233eab17RpU3Xp0kWRkZG+5zZq1EjNmzevtO69e/f6lmnVqlWl2lu1auVbBnVfXdgWJWnSpEm66KKL1Lx5c23cuFEPPvigdu7cqQULFpzZDwBGcHo7rAk+E88MgaWOWrhwocaOHavGjRv7tWdkZFRa1uVy+U1b/+1cdnL7mjVrdPDgQa1fv16TJ09Wx44ddfPNN0uSLr30Un3++eenrMuyLL/1nvwagZZB3VZXtsX77rvP9//k5GQ1b95cN9xwg++oC+o2U7fDU7328dfnM/HUCCx10Jo1a7Rt2zYtXrz4lMu2adOmUnLfv3+/pBPfKo47/s2iZ8+e2rdvn2bMmOH74wy03pKSEv34449+32z379+vfv36+ZbZt29fped+9913lV4bdVNd2RYDSUlJkSR98cUXBJY6zoTtsCb4TDwz9GGpg1544QVdfPHF6tWr1ymXTU1N1erVq/3O1b/99tuKj4+vdFi0IsuyVFxcXOX8iy++WJGRkXrnnXd8bfn5+frkk098O4nU1FQVFhZq48aNvmU2bNigwsLCanckqDvqyrYYyJYtWyTZpwxQt5mwHdYEn4lnyKnevqisqKjI2rJli7VlyxZLkvXUU09ZW7Zssb7++mvfMoWFhVbTpk2tefPmBVzH5MmTrfT0dN90QUGB1bp1a+vmm2+2cnNzrddee81yu93Wk08+6VvmmWeesd544w1r+/bt1vbt262FCxdabrfbeuihh3zLbNiwwerSpYv1zTff+NruvPNOq23bttbKlSutf//731ZaWprVq1cvq7S01LfM0KFDreTkZCsnJ8fKycmxevbsaV177bW18vPC2VPftsV169b53sNXX31lLV682IqPj7dGjBhRaz8z1L66th3m5+dbW7ZssZ5//nlLkrV69Wpry5Yt1oEDB3zL8Jl4+ggsBjl+KdzJj1tvvdW3zPz5860mTZpYBQUFAddx6623Wpdffrlf28cff2wNHDjQioqKstq0aWPNmDHD7/K9P/3pT1aPHj2spk2bWm632+rdu7f17LPPWmVlZZVq27lzp6/tyJEj1t13323FxsZaTZo0sa699lorLy/P77UPHDhgjR071oqJibFiYmKssWPHVrrUD+apb9vi5s2brb59+1oej8dq3Lix1aVLF2v69OnWoUOHzuwHhbOqrm2H06dPD1jvokWLfMvwmXj6XJZVYXg/AAAAA9GHBQAAGI/AAgAAjEdgAQAAxiOwAAAA4xFYAACA8QgsAADAeAQWAABgPAILAAAwHoEFAAAYj8ACAACMR2ABAADGI7AAAADj/X92hNcrMFko+AAAAABJRU5ErkJggg==",
853
+ "text/plain": [
854
+ "<Figure size 640x480 with 1 Axes>"
855
+ ]
856
+ },
857
+ "metadata": {},
858
+ "output_type": "display_data"
859
+ }
860
+ ],
861
+ "source": [
862
+ "plt.figure()\n",
863
+ "idx = picks_[\"adloc_mask\"] == 1\n",
864
+ "plt.scatter(picks_[idx][\"timestamp\"], picks_[idx][\"latitude\"], c=picks_[idx][\"phase_type\"].apply(lambda x: color[x]), s=10)"
865
+ ]
866
+ },
867
+ {
868
+ "cell_type": "code",
869
+ "execution_count": 20,
870
+ "metadata": {},
871
+ "outputs": [
872
+ {
873
+ "data": {
874
+ "text/html": [
875
+ "<div>\n",
876
+ "<style scoped>\n",
877
+ " .dataframe tbody tr th:only-of-type {\n",
878
+ " vertical-align: middle;\n",
879
+ " }\n",
880
+ "\n",
881
+ " .dataframe tbody tr th {\n",
882
+ " vertical-align: top;\n",
883
+ " }\n",
884
+ "\n",
885
+ " .dataframe thead th {\n",
886
+ " text-align: right;\n",
887
+ " }\n",
888
+ "</style>\n",
889
+ "<table border=\"1\" class=\"dataframe\">\n",
890
+ " <thead>\n",
891
+ " <tr style=\"text-align: right;\">\n",
892
+ " <th></th>\n",
893
+ " <th>time</th>\n",
894
+ " <th>adloc_score</th>\n",
895
+ " <th>adloc_residual_time</th>\n",
896
+ " <th>num_picks</th>\n",
897
+ " <th>event_index</th>\n",
898
+ " <th>longitude</th>\n",
899
+ " <th>latitude</th>\n",
900
+ " <th>depth_km</th>\n",
901
+ " </tr>\n",
902
+ " </thead>\n",
903
+ " <tbody>\n",
904
+ " <tr>\n",
905
+ " <th>0</th>\n",
906
+ " <td>2019-07-04 17:02:55.148967757</td>\n",
907
+ " <td>0.994942</td>\n",
908
+ " <td>0.195456</td>\n",
909
+ " <td>98</td>\n",
910
+ " <td>1</td>\n",
911
+ " <td>-117.495875</td>\n",
912
+ " <td>35.709095</td>\n",
913
+ " <td>0.0</td>\n",
914
+ " </tr>\n",
915
+ " </tbody>\n",
916
+ "</table>\n",
917
+ "</div>"
918
+ ],
919
+ "text/plain": [
920
+ " time adloc_score adloc_residual_time num_picks \\\n",
921
+ "0 2019-07-04 17:02:55.148967757 0.994942 0.195456 98 \n",
922
+ "\n",
923
+ " event_index longitude latitude depth_km \n",
924
+ "0 1 -117.495875 35.709095 0.0 "
925
+ ]
926
+ },
927
+ "execution_count": 20,
928
+ "metadata": {},
929
+ "output_type": "execute_result"
930
+ }
931
+ ],
932
+ "source": [
933
+ "events_"
934
+ ]
935
+ },
936
+ {
937
+ "cell_type": "code",
938
+ "execution_count": null,
939
+ "metadata": {},
940
+ "outputs": [],
941
+ "source": []
942
+ }
943
+ ],
944
+ "metadata": {
945
+ "kernelspec": {
946
+ "display_name": "base",
947
+ "language": "python",
948
+ "name": "python3"
949
+ },
950
+ "language_info": {
951
+ "codemirror_mode": {
952
+ "name": "ipython",
953
+ "version": 3
954
+ },
955
+ "file_extension": ".py",
956
+ "mimetype": "text/x-python",
957
+ "name": "python",
958
+ "nbconvert_exporter": "python",
959
+ "pygments_lexer": "ipython3",
960
+ "version": "3.10.12"
961
+ },
962
+ "orig_nbformat": 4,
963
+ "vscode": {
964
+ "interpreter": {
965
+ "hash": "cd49b9d623d06aa0c5f872a997e70207e179b28bd8e4cd8fec363e5d29096c9c"
966
+ }
967
+ }
968
+ },
969
+ "nbformat": 4,
970
+ "nbformat_minor": 2
971
+ }