def cut_sac(st, starttime='b+0', endtime='e+0'): '''Cut stream with specified time window. >>> st = read("test.sac") # doctest: +SKIP >>> st2 = cut_sac(st, 't0-10', 't0+10') # doctest: +SKIP ''' tmark0, offset0 = _parse_time(starttime) tmark1, offset1 = _parse_time(endtime) st2 = Stream() for tr in st: reftime = get_sac_reftime(tr.stats.sac) try: start = reftime + tr.stats.sac[tmark0] + offset0 except KeyError: msg = "{}: time marker {} undefined".format(tr.id, tmark0) raise KeyError(msg) try: end = reftime + tr.stats.sac[tmark1] + offset1 except KeyError: msg = "{}: time marker {} undefined".format(tr.id, tmark1) raise KeyError(msg) st2 += tr.slice(start, end) return st2
def __UTC2SAC(stats, head): from obspy.io.sac.util import get_sac_reftime return stats[head] - get_sac_reftime(stats.sac)
def __SAC2UTC(stats, head): from obspy.io.sac.util import get_sac_reftime return get_sac_reftime(stats.sac) + stats[head]
def _add_to_adsf_file(f, files, tag, verbose=False): count = 0 event_handler = _EventContainer() channel_information = {} min_starttime = None max_endtime = None for filename in files: if not verbose: print(".", end="") sys.stdout.flush() else: print("Attempting to add '%s'." % filename) try: tr = obspy.read(filename, format="SAC")[0] if verbose: print("Success.") except Exception: print("\nFailed to read '%s' as a SAC file." % filename) continue # Get to coordinates if possible: try: coords = (tr.stats.sac.stlo, tr.stats.sac.stla, tr.stats.sac.stel, tr.stats.sac.stdp) channel_information[tr.id] = coords except AttributeError: pass s, e = tr.stats.starttime, tr.stats.endtime if min_starttime is None or s < min_starttime: min_starttime = s if max_endtime is None or e < max_endtime: max_endtime = e try: ev = (tr.stats.sac.evlo, tr.stats.sac.evla, tr.stats.sac.evdp, tr.stats.sac.o) except AttributeError: ev = None if ev: event_id = event_handler.get_resource_identifier( latitude=ev[1], longitude=ev[0], depth=ev[2], origin_time=get_sac_reftime(tr.stats.sac) + ev[3]) else: event_id = None f.add_waveforms(tr, tag=tag, event_id=event_id) count += 1 # Add all events. event_handler.add_events_to_asdf_file(f) # Write all StationXML files at once. write_stationxmls(f, channel_information, starttime=min_starttime - 3600, endtime=max_endtime + 3600) print("\n\nWritten %i SAC files to '%s'." % (count, f.filename))
def time_Ppicks(trace): ref_time_event = get_sac_reftime(trace.stats.sac) ptime_pick = ref_time_event + trace.stats.sac.a return ptime_pick
def _add_to_adsf_file(f, files, tag, verbose=False): count = 0 event_handler = _EventContainer() channel_information = {} min_starttime = None max_endtime = None for filename in files: if not verbose: print(".", end="") sys.stdout.flush() else: print("Attempting to add '%s'." % filename) try: tr = obspy.read(filename, format="SAC")[0] if verbose: print("Success.") except Exception: print("\nFailed to read '%s' as a SAC file." % filename) continue # Get to coordinates if possible: try: coords = (tr.stats.sac.stlo, tr.stats.sac.stla, tr.stats.sac.stel, tr.stats.sac.stdp) channel_information[tr.id] = coords except AttributeError: pass s, e = tr.stats.starttime, tr.stats.endtime if min_starttime is None or s < min_starttime: min_starttime = s if max_endtime is None or e < max_endtime: max_endtime = e try: ev = (tr.stats.sac.evlo, tr.stats.sac.evla, tr.stats.sac.evdp, tr.stats.sac.o) except AttributeError: ev = None if ev: event_id = event_handler.get_resource_identifier( latitude=ev[1], longitude=ev[0], depth=ev[2], origin_time=get_sac_reftime(tr.stats.sac) + ev[3]) else: event_id = None f.add_waveforms(tr, tag=tag, event_id=event_id) count += 1 # Add all events. event_handler.add_events_to_asdf_file(f) # Write all StationXML files at once. write_stationxmls( f, channel_information, starttime=min_starttime - 3600, endtime=max_endtime + 3600) print("\n\nWritten %i SAC files to '%s'." % (count, f.filename))