-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathread_mseed.py
115 lines (88 loc) · 3.01 KB
/
read_mseed.py
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
# Copyright 2023 Jonatan Haarala. All Rights Reserved.
# MIT Licensed & Apache License 2.0.
__author__ = 'Jonatan Haarala'
import math
import time
from obspy import read
import numpy as np
from save_thread_result import ThreadWithResult
import threading
def max_amplitude(eje):
return np.amax(eje)
def read_file(fileName):
st = read(fileName)
results = []
for trace in st:
trace_values = trace.data
results.extend(trace_values)
return results
def show_data(x, y, z):
t1 = ThreadWithResult(target=read_file, args=(x,))
t2 = ThreadWithResult(target=read_file, args=(y,))
t3 = ThreadWithResult(target=read_file, args=(z,))
data = []
#
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
dp2 = t1.result
dp1 = t2.result
dpz = t3.result
time.sleep(2)
for i in range(len(dp2) - 1):
data.append(f'{dpz[i]} {dp2[i]} {dp1[i]}\n')
return data
def read_metadata(fileName: str, maxVal: int):
header = []
st = read(fileName)
metadata = st[0].stats
starttime = str(metadata.starttime).split('T')
endtime = str(metadata.endtime).split('T')
hz = math.trunc(metadata.sampling_rate)
##
header.append(f"Original file name: {fileName}")
header.append(f"Transformed into: {metadata.network}{metadata.station}.txt")
header.append("ReadCity version: 1.0")
header.append(f"Station serial number: {metadata.station}")
header.append("Station software version: 0000")
header.append("Channel number: 3")
# time data
header.append(f"Starting date: {starttime[0]}")
header.append(f"Starting time: {starttime[1].split('.')[0]}")
header.append(f"Ending date: {endtime[0]}")
header.append(f"Ending time: {endtime[1].split('.')[0]}")
header.append(f"Sample rate: {hz} Hz")
header.append(f"Sample number: {metadata.npts}")
header.append("Recording duration: {0:.3f} mn".format((metadata.npts - 1) / (hz * 60)))
header.append("Conversion factor: 52428.8")
header.append("Gain: 512")
header.append("Clipped samples: 2.00%")
header.append("Latitude : 0 0.000")
header.append("Longitude: 0 0.000")
header.append("Altitude : 0 m")
header.append("No. satellites: 0")
header.append('Maximum amplitude: {} / {}'.format(maxVal, maxVal))
return header
def create_file(data: list[str], header: list[str], fileName: str, newName: str):
st = read(fileName)
metadata = st[0].stats
resultfilename = f'{newName}{metadata.network}{metadata.station}.txt'
with (open(resultfilename, 'w') as TXT_FILE):
for value in header:
TXT_FILE.write(f"{value}\n")
for value in data:
TXT_FILE.write(''.join(value))
TXT_FILE.write("0 ")
print(f"{resultfilename} created successfully")
TXT_FILE.close()
#
# PLOT SECTION
#
def plot_seismograms(x: str, y: str, z: str):
threechannels = read(x)
threechannels += read(y)
threechannels += read(z)
threechannels.plot(size=(800, 600))