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