Exemplo n.º 1
0
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
Exemplo n.º 2
0
def __UTC2SAC(stats, head):
    from obspy.io.sac.util import get_sac_reftime
    return stats[head] - get_sac_reftime(stats.sac)
Exemplo n.º 3
0
def __SAC2UTC(stats, head):
    from obspy.io.sac.util import get_sac_reftime
    return get_sac_reftime(stats.sac) + stats[head]
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
def __UTC2SAC(stats, head):
    from obspy.io.sac.util import get_sac_reftime
    return stats[head] - get_sac_reftime(stats.sac)
Exemplo n.º 7
0
def __SAC2UTC(stats, head):
    from obspy.io.sac.util import get_sac_reftime
    return get_sac_reftime(stats.sac) + stats[head]
Exemplo n.º 8
0
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))