def test_process_synt(): staxmlfile = os.path.join(DATA_DIR, "stationxml", "IU.KBL.syn.xml") inv = obspy.read_inventory(staxmlfile) st = testsyn.copy() event = obspy.readEvents(testquakeml)[0] origin = event.preferred_origin() or event.origins[0] event_lat = origin.latitude event_lon = origin.longitude event_time = origin.time pre_filt = [1/90., 1/60., 1/27.0, 1/22.5] t1 = event_time t2 = event_time + 6000.0 st_new = proc.process_stream( st, remove_response_flag=False, inventory=inv, filter_flag=True, pre_filt=pre_filt, starttime=t1, endtime=t2, resample_flag=True, sampling_rate=2.0, taper_type="hann", taper_percentage=0.05, rotate_flag=True, event_latitude=event_lat, event_longitude=event_lon) bmfile = os.path.join(DATA_DIR, "proc", "IU.KBL.syn.proc.mseed") st_compare = obspy.read(bmfile) assert compare_stream_kernel(st_new, st_compare)
def test_process_obsd_2(): st = testobs.copy() inv = deepcopy(teststaxml) event = obspy.readEvents(testquakeml)[0] origin = event.preferred_origin() or event.origins[0] event_lat = origin.latitude event_lon = origin.longitude event_time = origin.time pre_filt = [1/90., 1/60., 1/27.0, 1/22.5] t1 = event_time t2 = event_time + 6000.0 st_new = proc.process_stream( st, remove_response_flag=True, water_level=60, inventory=inv, filter_flag=True, pre_filt=pre_filt, starttime=t1, endtime=t2, resample_flag=True, sampling_rate=2.0, taper_type="hann", taper_percentage=0.05, rotate_flag=True, event_latitude=event_lat, event_longitude=event_lon, sanity_check=True) bmfile = os.path.join(DATA_DIR, "proc", "IU.KBL.obs.proc.mseed") st_compare = obspy.read(bmfile) assert len(st_new) == 3 assert compare_trace_kernel(st_new.select(channel="BHZ")[0], st_compare.select(channel="BHZ")[0])
def test_process_synt(): staxmlfile = os.path.join(DATA_DIR, "stationxml", "IU.KBL.syn.xml") inv = obspy.read_inventory(staxmlfile) st = testsyn.copy() event = obspy.read_events(testquakeml)[0] origin = event.preferred_origin() or event.origins[0] event_lat = origin.latitude event_lon = origin.longitude event_time = origin.time pre_filt = [1/90., 1/60., 1/27.0, 1/22.5] t1 = event_time t2 = event_time + 6000.0 st_new = proc.process_stream( st, remove_response_flag=False, inventory=inv, filter_flag=True, pre_filt=pre_filt, starttime=t1, endtime=t2, resample_flag=True, sampling_rate=2.0, taper_type="hann", taper_percentage=0.05, rotate_flag=True, event_latitude=event_lat, event_longitude=event_lon) bmfile = os.path.join(DATA_DIR, "proc", "IU.KBL.syn.proc.mseed") st_compare = obspy.read(bmfile) assert compare_stream_kernel(st_new, st_compare)
def test_process_obsd_2(): st = testobs.copy() inv = deepcopy(teststaxml) event = obspy.read_events(testquakeml)[0] origin = event.preferred_origin() or event.origins[0] event_lat = origin.latitude event_lon = origin.longitude event_time = origin.time pre_filt = [1/90., 1/60., 1/27.0, 1/22.5] t1 = event_time t2 = event_time + 6000.0 st_new = proc.process_stream( st, remove_response_flag=True, water_level=60, inventory=inv, filter_flag=True, pre_filt=pre_filt, starttime=t1, endtime=t2, resample_flag=True, sampling_rate=2.0, taper_type="hann", taper_percentage=0.05, rotate_flag=True, event_latitude=event_lat, event_longitude=event_lon, sanity_check=True) bmfile = os.path.join(DATA_DIR, "proc", "IU.KBL.obs.proc.mseed") st_compare = obspy.read(bmfile) assert len(st_new) == 3 assert compare_trace_kernel(st_new.select(channel="BHZ")[0], st_compare.select(channel="BHZ")[0])
def process_wrapper(stream, inv, param=None): """ Process function wrapper for pyasdf :param stream: :param inv: :param param: :return: """ param["inventory"] = inv return process_stream(stream, **param)
def func_wrapper(obsd_station_group, synt_station_group, obsd_tag=None, synt_tag=None, event=None, param=None, _verbose=False, figure_mode=False, figure_dir=None): """ combo function, including: 1) observed data signal processing 2) synthetic data signal processing 3) window selection based on a pair of data 4) adjoint source constructor """ # Make sure everything thats required is there. _station_name = obsd_station_group._station_name if not hasattr(obsd_station_group, "StationXML"): raise ValueError("obsd station group '%s' missing 'StationXML'" % _station_name) if not hasattr(synt_station_group, "StationXML"): raise ValueError("synt station group '%s' missing 'StationXML'" % _station_name) if not hasattr(obsd_station_group, obsd_tag): raise ValueError("obsd station group '%s' missing '%s'" % (_station_name, obsd_tag)) if not hasattr(synt_station_group, synt_tag): raise ValueError("synt station group '%s' missing '%s'" % (_station_name, synt_tag)) param = copy.deepcopy(param) obsd_staxml = obsd_station_group.StationXML synt_staxml = synt_station_group.StationXML observed = getattr(obsd_station_group, obsd_tag) synthetic = getattr(synt_station_group, synt_tag) # keep a reference for construct adjoint source, which # should be same length and dt as raw synt _raw_synt_tr = synthetic[0].copy() obsd_param = param["proc_obsd_param"] new_obsd = process_stream(observed, inventory=obsd_staxml, **obsd_param) synt_param = param["proc_synt_param"] new_synt = process_stream(synthetic, inventory=synt_staxml, **synt_param) window_config = load_window_config(param["window_param"]) windows = window_on_stream(new_obsd, new_synt, window_config, station=synt_staxml, event=event, figure_mode=figure_mode, figure_dir=figure_dir, _verbose=_verbose) if len(windows) == 0: # No windows selected return windows = smart_transform_window(windows) adj_config, adj_src_type = load_adjoint_config(param["adjsrc_param"]) adjsrcs = calculate_adjsrc_on_stream(new_obsd, new_synt, windows, adj_config, adj_src_type, figure_mode=figure_mode, figure_dir=figure_dir, adjoint_src_flag=True) chan_weight_dict = calculate_chan_weight(adjsrcs, windows) interp_starttime = _raw_synt_tr.stats.starttime interp_delta = _raw_synt_tr.stats.delta interp_npts = _raw_synt_tr.stats.npts pre_filt = obsd_param["pre_filt"] new_adjsrcs = process_adjoint(adjsrcs, interp_starttime, interp_delta, interp_npts, rotate_flag=True, inventory=synt_staxml, event=event, sum_over_comp_flag=True, weight_flag=True, weight_dict=chan_weight_dict, filter_flag=True, pre_filt=pre_filt) origin = event.preferred_origin() or event.origins[0] time_offset = interp_starttime - origin.time results = reshape_adj(new_adjsrcs, time_offset, synt_staxml) return results
def func_wrapper(obsd_station_group, synt_station_group, obsd_tag=None, synt_tag=None, event=None, param=None, _verbose=False, figure_mode=False, figure_dir=None): """ combo function, including: 1) observed data signal processing 2) synthetic data signal processing 3) window selection based on a pair of data 4) adjoint source constructor """ # Make sure everything thats required is there. _station_name = obsd_station_group._station_name if not hasattr(obsd_station_group, "StationXML"): raise ValueError("obsd station group '%s' missing 'StationXML'" % _station_name) if not hasattr(synt_station_group, "StationXML"): raise ValueError("synt station group '%s' missing 'StationXML'" % _station_name) if not hasattr(obsd_station_group, obsd_tag): raise ValueError("obsd station group '%s' missing '%s'" % (_station_name, obsd_tag)) if not hasattr(synt_station_group, synt_tag): raise ValueError("synt station group '%s' missing '%s'" % (_station_name, synt_tag)) param = copy.deepcopy(param) obsd_staxml = obsd_station_group.StationXML synt_staxml = synt_station_group.StationXML observed = getattr(obsd_station_group, obsd_tag) synthetic = getattr(synt_station_group, synt_tag) # keep a reference for construct adjoint source, which # should be same length and dt as raw synt _raw_synt_tr = synthetic[0].copy() obsd_param = param["proc_obsd_param"] new_obsd = process_stream(observed, inventory=obsd_staxml, **obsd_param) synt_param = param["proc_synt_param"] new_synt = process_stream(synthetic, inventory=synt_staxml, **synt_param) window_config = load_window_config(param["window_param"]) windows = window_on_stream(new_obsd, new_synt, window_config, station=synt_staxml, event=event, figure_mode=figure_mode, figure_dir=figure_dir, _verbose=_verbose) if len(windows) == 0: # No windows selected return windows = smart_transform_window(windows) adj_config, adj_src_type = load_adjoint_config(param["adjsrc_param"]) adjsrcs = calculate_adjsrc_on_stream( new_obsd, new_synt, windows, adj_config, adj_src_type, figure_mode=figure_mode, figure_dir=figure_dir, adjoint_src_flag=True) chan_weight_dict = calculate_chan_weight(adjsrcs, windows) interp_starttime = _raw_synt_tr.stats.starttime interp_delta = _raw_synt_tr.stats.delta interp_npts = _raw_synt_tr.stats.npts pre_filt = obsd_param["pre_filt"] new_adjsrcs = process_adjoint( adjsrcs, interp_starttime, interp_delta, interp_npts, rotate_flag=True, inventory=synt_staxml, event=event, sum_over_comp_flag=True, weight_flag=True, weight_dict=chan_weight_dict, filter_flag=True, pre_filt=pre_filt) origin = event.preferred_origin() or event.origins[0] time_offset = interp_starttime - origin.time results = reshape_adj(new_adjsrcs, time_offset, synt_staxml) return results