snr_bias / code /utils /dataSeiPnSn.py
cangyeone's picture
Upload GRL reproducibility package
7170296 verified
Raw
History Blame Contribute Delete
3.68 kB
import os
import obspy
import pickle
import datetime
import h5py
from obspy.clients.fdsn.header import FDSNNoDataException
from obspy import UTCDateTime
import time
import pandas as pd
import multiprocessing
import numpy as np
import matplotlib.pyplot as plt
from obspy.signal.filter import bandpass
from scipy import signal
from obspy.geodetics.base import gps2dist_azimuth
class DataForSeiPnTest():
def __init__(self, file_name="models/h5test/all-gzip4.h5", maxdist = 2000, slatrang = [-90, 90], slonrang= [-180, 180]):
self.file_name = file_name
self.n_thread = 2
self.maxdist = maxdist
self.slatrang = slatrang
self.slonrang = slonrang
self.dqueue = multiprocessing.Queue(100)
for h5index in range(3):
multiprocessing.Process(target=self.feed_data, args=(self.dqueue, h5index)).start()
#multiprocessing.Process(target=self.batch_data, args=(dqueue, )).start()
def feed_data(self, dqueue, h5index):
file_name = f"SeisPnSn/Pn/SeisPnSn{h5index+1}.hdf5"
csvfile = pd.read_csv(f"seipnsn/pn_part_metadata/pn{h5index+1}.csv")
h5keys = csvfile["key"]
h5file = h5py.File(file_name, "r")
h5fileyears = h5file["pn"]
##pn/2000/2000.10.30.22.40.20.KN.TKM2
#print("Actual key types:", [type(k) for k in h5file["pn"].keys()])
print(f"{file_name}数据加载完成")
years = list(h5fileyears.keys())
#print(years)
for i in range(5):
year = years[i]
h5fileyear = h5fileyears[year]
print(f"当前数据年份为{year}")
for ekey in h5keys:
#print(ekey)
if ekey.startswith(year):
#print(ekey)
event = h5fileyear[ekey]
elat = event.attrs["event_la"]
elon = event.attrs["event_lo"]
slat = event.attrs["station_la"]
slon = event.attrs["station_lo"]
if slat < self.slatrang[0] or slat > self.slatrang[1]:continue
if slon < self.slonrang[0] or slon > self.slonrang[1]:continue
dist, abz, baz = gps2dist_azimuth(elat, elon, slat, slon)
#print(elat, elon, slat, slon, dist)
dist = dist/1000
if dist > self.maxdist:continue
#print(dist)
rdata = []
data = [0, 0, 0]
snr = event.attrs["snr_z_dB"]
skey = event.attrs["station"]
data[0] = event[:, 0]
data[1] = event[:, 1]
data[2] = event[:, 2]
data[0] = signal.resample(data[0], 18000)
data[1] = signal.resample(data[1], 18000)
data[2] = signal.resample(data[2], 18000)
if len(data)!=3:continue #data[HE数据,HN数据,HZ数据]
for d in data:
w = d[0:10240]
w = w - np.mean(w)
w = w / (np.max(np.abs(w))+1e-6)
rdata.append(w[np.newaxis, :, np.newaxis])
rdata = np.concatenate(rdata, axis=2)
dqueue.put([rdata, [dist, ekey, skey, snr]])
def batch_data(self, batch_size=50):
x1, x2 = [], []
for _ in range(batch_size):
data, infos = self.dqueue.get()
x1.append(data)
x2.append(infos)
x1 = np.concatenate(x1, axis=0)
return x1, x2