def get_sta_date(event_list): sta_date_dict = {} for i, [event_loc, pha_dict] in enumerate(event_list): if i % 1e3 == 0: print('%s/%s events done/total' % (i, len(event_list))) # 1. get event info ot, lat, lon = event_loc[0:3] event_name = dtime2str(ot) train_dir = os.path.join(train_root, 'positive', event_name) valid_dir = os.path.join(valid_root, 'positive', event_name) if not os.path.exists(train_dir): os.makedirs(train_dir) if not os.path.exists(valid_dir): os.makedirs(valid_dir) for net_sta, [tp, ts] in pha_dict.items(): # 2. divide into train / valid rand = np.random.rand(1)[0] if rand < train_ratio: samp_class = 'train' elif rand < train_ratio + valid_ratio: samp_class = 'valid' else: continue date = str(tp.date) sta_date = '%s_%s' % (net_sta, date) # for one day's stream data if sta_date not in sta_date_dict: sta_date_dict[sta_date] = [[samp_class, event_name, tp, ts]] else: sta_date_dict[sta_date].append( [samp_class, event_name, tp, ts]) return sta_date_dict
def cut_event(event_id): # get event info [event_loc, pick_dict] = pha_list[event_id] if len(event_loc)==5: ot, lat, lon, dep, mag = event_loc if len(event_loc)==4: ot, lat, lon, mag = event_loc dep = -1 data_dict = get_data_dict(ot, data_dir) event_name = dtime2str(ot) event_dir = os.path.join(out_root, event_name) if not os.path.exists(event_dir): os.makedirs(event_dir) # cut event print('cutting {}'.format(event_name)) for net_sta, [tp, ts] in pick_dict.items(): time_range = [tp-event_win[0], tp+event_win[1]] t0 = event_win[0] t1 = ts - tp + event_win[0] if ts else None if net_sta not in data_dict: continue data_paths = data_dict[net_sta] chn_codes = [data_path.split('.')[3][0:3] for data_path in data_paths] out_paths = [os.path.join(event_dir,'%s.%s.sac'%(net_sta,chn)) for chn in chn_codes] # cut event for i in range(3): st = read(data_paths[i], starttime=time_range[0], endtime=time_range[1]) st.write(out_paths[i]) sac.ch_event(out_paths[i], lon, lat, dep, mag, [t0,t1])
def cut_event(event_id): # get event info [event_loc, pick_dict] = pha_list[event_id] ot, lat, lon, dep, mag = event_loc data_dict = get_data_dict(ot, data_dir) event_name = dtime2str(ot) event_dir = os.path.join(out_root, event_name) if not os.path.exists(event_dir): os.makedirs(event_dir) # cut event print('cutting {}'.format(event_name)) for net_sta, [tp, ts] in pick_dict.items(): b = tp - UTCDateTime(ot.date) - event_win[0] if net_sta not in data_dict: continue data_paths = data_dict[net_sta] chn_codes = [data_path.split('.')[-2] for data_path in data_paths] out_paths = [os.path.join(event_dir,'%s.%s'%(net_sta,chn)) for chn in chn_codes] # cut event sac.cut(data_paths[0], b, b+event_win[1], out_paths[0]) sac.cut(data_paths[1], b, b+event_win[1], out_paths[1]) sac.cut(data_paths[2], b, b+event_win[1], out_paths[2]) # write header t0 = event_win[0] t1 = ts - tp + event_win[0] if ts else ts sac.ch_event(out_paths[0], lon, lat, dep, mag, [t0,t1]) sac.ch_event(out_paths[1], lon, lat, dep, mag, [t0,t1]) sac.ch_event(out_paths[2], lon, lat, dep, mag, [t0,t1])
def get_sta_date(event_list): sta_date_dict = {} for i, [event_loc, pick_dict] in enumerate(event_list): if i % 1e3 == 0: print('%s/%s events done/total' % (i, len(event_list))) # 1. get event info event_name = dtime2str(event_loc[0]) event_dir = os.path.join(out_root, event_name) if not os.path.exists(event_dir): os.makedirs(event_dir) for net_sta, [tp, ts] in pick_dict.items(): date = str(tp.date) sta_date = '%s_%s' % (net_sta, date) # for one day's stream data if sta_date not in sta_date_dict: sta_date_dict[sta_date] = [[event_dir, tp, ts]] else: sta_date_dict[sta_date].append([event_dir, tp, ts]) return sta_date_dict
def get_sta_date(event_list, sta_dict): sta_date_dict = {} sta_list = list(sta_dict.keys()) for i, [event_loc, pha_dict] in enumerate(event_list): if i % 1e3 == 0: print('%s/%s events done/total' % (i, len(event_list))) # 1. get event info ot, lat, lon = event_loc[0:3] event_name = dtime2str(ot) train_dir = os.path.join(train_root, 'negative', event_name) valid_dir = os.path.join(valid_root, 'negative', event_name) if not os.path.exists(train_dir): os.makedirs(train_dir) if not os.path.exists(valid_dir): os.makedirs(valid_dir) for net_sta in sta_list: # if recorded in fpha if net_sta in pha_dict: tp, ts = pha_dict[net_sta] is_pick = True # if not detected (remote sta) else: sta_lat, sta_lon = sta_dict[net_sta][0:2] dist = calc_dist_km([lat, sta_lat], [lon, sta_lon]) tp, ts = ot + dist / vp, ot + dist / vs if np.random.rand(1)[0] > remote_ratio: continue is_pick = False # 2. divide into train / valid rand = np.random.rand(1)[0] if rand < train_ratio: samp_class = 'train' elif rand < train_ratio + valid_ratio: samp_class = 'valid' else: continue date = str(tp.date) sta_date = '%s_%s' % (net_sta, date) # for one day's stream data if sta_date not in sta_date_dict: sta_date_dict[sta_date] = [[ samp_class, event_name, tp, ts, is_pick ]] else: sta_date_dict[sta_date].append( [samp_class, event_name, tp, ts, is_pick]) return sta_date_dict
def cut_event(event_id): # get event info [event_loc, pick_dict] = pha_list[event_id] ot, lat, lon, dep, mag = event_loc data_dict = get_data_dict(ot, data_dir) event_name = dtime2str(ot) event_dir = os.path.join(out_root, event_name) if not os.path.exists(event_dir): os.makedirs(event_dir) # cut event print('cutting {}'.format(event_name)) for net_sta, [tp, ts] in pick_dict.items(): if net_sta not in data_dict: continue for data_path in data_dict[net_sta]: b = tp - read(data_path)[0].stats.starttime - event_win[0] chn_code = data_path.split('.')[-2] out_path = os.path.join(event_dir,'%s.%s'%(net_sta,chn_code)) # cut event sac.cut(data_path, b, b+event_win[1], out_path) # write header tn = {} tn['t0'] = event_win[0] if ts: tn['t1'] = ts - tp + event_win[0] sac.ch_event(out_path, lat, lon, dep, mag, tn)
from signal_lib import preprocess, calc_dist_km from reader import dtime2str import warnings warnings.filterwarnings("ignore") # i/o paths fsta = 'input/example.sta' data_root = '/data2/Example_data' get_data_dict = dp.get_data_dict get_sta_dict = dp.get_sta_dict sta_dict = get_sta_dict(fsta) # get event info event_line = '2019-07-07T08:08:48.100000Z,35.855,-117.6692,11.51,1.22' codes = event_line.split(',') ot = UTCDateTime(codes[0]) event_name = dtime2str(ot) lat, lon, dep, mag = [float(code) for code in codes[1:5]] fout = 'output/eg_waveform-dist-tt_%s-M%s.pdf' % (event_name, mag) data_dict = get_data_dict(ot, data_root) # data process freq_band = [1, 40] samp_rate = 100 win_len = 60 win_len_npts = int(win_len * samp_rate) time = np.arange(win_len_npts) / samp_rate max_dist = 200 dist_grid = [None, np.arange(0, max_dist + 0.1, 5)][0] #TODO chn_idx = 2 amp = 2 # fig config fig_size = (12, 14)
xy_pad = cfg.xy_pad lon_min -= xy_pad[0] lon_max += xy_pad[0] lat_min -= xy_pad[1] lat_max += xy_pad[1] # 1. get evid & event_name event_dict = {} f = open(fpha_name) lines = f.readlines() f.close() evid = 0 for line in lines: codes = line.split(',') if len(codes[0]) < 10: continue event_name = dtime2str(UTCDateTime(codes[0])) event_dict[str(evid)] = event_name evid += 1 # 2. get loc f = open(fpha_loc) lines = f.readlines() f.close() for line in lines: codes = line.split(',') if len(codes[0]) >= 10: evid = codes[-1][:-1] event_name = event_dict[evid] id_name = '%s_%s' % (evid, event_name) ot = UTCDateTime(codes[0]) lat, lon, dep, mag = [float(code) for code in codes[1:5]]
fbad = open('output/bad_cascadia_path.dat', 'w') # down params client = Client("IRIS") time_range = '20180301-20180401' start_date, end_date = [UTCDateTime(date) for date in time_range.split('-')] num_days = int((end_date - start_date) / 86400) + 1 # read fsta f = open(fsta) lines = f.readlines() f.close() net_sta_list = [line.split(',')[0].split('.') for line in lines] for day_i in range(num_days): for (net, sta) in net_sta_list: t0 = start_date + 86400 * day_i t1 = start_date + 86400 * (day_i + 1) print(net, sta, t0, t1) try: st = client.get_waveforms(net, sta, "*", "*", t0, t1) print(net, sta, st[0].stats["starttime"]) dtime = dtime2str(t0) msd_name = '.'.join([net, sta, dtime, 'mseed']) msd_dir = os.path.join(data_root, net, sta) out_path = os.path.join(msd_dir, msd_name) if not os.path.exists(msd_dir): os.makedirs(msd_dir) st.write(out_path, format="MSEED") except: print('no data') fbad.write('{},{},{}\n'.format(net, sta, t0)) fbad.close()