Source code for seismic.ASDFdatabase.create_small_chunks
import os
import numpy as np
from obspy import read_inventory, Stream
from obspy import UTCDateTime as UTC
from pyasdf import ASDFDataSet
import datetime
[docs]def create_chunk(out_dir, trace, st_time, end_time, sta):
trace.trim(starttime=st_time, endtime=end_time)
st_out = Stream(traces=[trace, ])
dest_dir = os.path.join(out_dir, str(trace.stats.starttime.timetuple().tm_year), str(trace.stats.starttime.timetuple().tm_yday))
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
st_out.write(os.path.join(dest_dir, sta.code+'_'+trace.stats.channel+'_'+str(st_time)+'_'+str(end_time)+'.ms'), format='MSEED')
[docs]def main():
base_dir = '/g/data/ha3/Passive/_ANU/7B(1993-1995)'
asdf_file = os.path.join(base_dir, 'ASDF', '7B(1993-1995).h5')
out_dir = os.path.join(base_dir, 'small_mseed_DATA')
inv = read_inventory(os.path.join(base_dir, '7B.xml'))
asdf = ASDFDataSet(asdf_file, mode='r')
for sta in inv.networks[0].stations:
if asdf.waveforms.__contains__(inv.networks[0].code+'.'+sta.code):
for i in asdf.waveforms[inv.networks[0].code+'.'+sta.code].list():
if i.endswith('raw_recording'):
start_time = UTC(i.split("__")[1])
st = asdf.waveforms[inv.networks[0].code+'.'+sta.code][i]
medn = np.median(st[0].data)
while (abs(st[0].data[np.argmax(st[0].data)]) > 1e8 or abs(st[0].data[np.argmin(st[0].data)]) > 1e8):
if abs(st[0].data[np.argmax(st[0].data)]) > 1e8:
st[0].data[np.argmax(st[0].data)] = abs(medn) if st[0].data[np.argmax(st[0].data)] > 0 else -abs(medn)
if abs(st[0].data[np.argmin(st[0].data)]) > 1e8:
st[0].data[np.argmin(st[0].data)] = abs(medn) if st[0].data[np.argmin(st[0].data)] > 0 else -abs(medn)
while (start_time+86400<UTC(i.split("__")[2])):
tr = st[0].copy()
create_chunk(out_dir, tr, start_time, start_time+86400, sta)
start_time += 86400
if start_time < UTC(i.split("__")[2]):
tr=st[0].copy()
create_chunk(out_dir, tr, start_time, UTC(i.split("__")[2]), sta)
if __name__ == "__main__":
main()