# Loop over subset_events
        for kk in range(0,len(cat_subset)):
            ev_info.otime = cat_subset[kk].origins[0].time
            ev_info.elat = cat_subset[kk].origins[0].latitude
            ev_info.elon = cat_subset[kk].origins[0].longitude
            ev_info.edep = cat_subset[kk].origins[0].depth
            ev_info.emag = cat_subset[kk].magnitudes[0].mag
            ev_info.rtime = cat_subset[kk].origins[0].time
            ev_info.ev = cat_subset[kk]      # get event object
            ev_info.reference_time_place()   # get stations around a reference origin (rlat, rlon - each station in this case)
            
            ev_info.use_catalog = 0
            ev_info.overwrite_dir = 0

            # Delete existing data directory
            ev_info.evname = util_helpers.otime2eid(ev_info.ev.origins[0].time)
            ddir = './'+ ev_info.evname
            if ev_info.overwrite_ddir and os.path.exists(ddir):
                print("WARNING. %s already exists. Deleting ..." % ddir)
                shutil.rmtree(ddir)

            # Get waveforms for this event-reciever pair
            try:
                ev_info.run_get_waveform()
            except:
                "WARNING: NO WAVEFORMS COULD BE EXTRACTED" # you might want to save this event and station info
                continue

            # move contents from event directory to station directory
            new_path =  odir + '/' + ev_info.evname
            if ev_info.overwrite_ddir and os.path.exists(new_path):
def getwf_iris_ncedc_llnl(origin0, client_pick):

    print("Running function getwf_iris_ncedc_llnl")

    # parameters for waveform request
    tbefore_sec = 100
    tafter_sec = 600

    # DEFAULT SETTINGS (see getwaveform_iris.py)
    rotateRTZ = True
    rotateUVW = False  # works only if 'rotateRTZ = True'
    output_cap_weight_file = True
    detrend = True
    demean = True
    output_event_info = True
    taper = False
    ifplot_spectrogram = False

    # for CAP all waveforms need to have the same sample rate
    resample_TF = True
    resample_freq = 20.0  # 0 for no resampling
    scale_factor = 10**2  # for CAP use 10**2  (to convert m/s to cm/s)

    # event parameters
    sec_before_after_event = 10  # time window to search for a target event in a catalog
    min_dist = 0
    max_dist = 1200

    # station parameters
    # 20170321 [email protected] -- I disabled retrieving data for the
    # networks listed below
    # reason 1 some are dense/local and don't improve station coverage
    # reason 2 many have crappy data (noisy)
    # reason 3 some have very large amplitudes. Bad response?
    network = '*,-XK,-XM,-XS,-XC,-XU,-XT,-XE'
    station = '*,-PURD,-NV33,-GPO'  # all stations
    channel = 'BH?,LH?'

    overwrite_ddir = 1  # 1 = delete data directory if it already exists
    icreateNull = 0  # create Null traces so that rotation can work (obsby stream.rotate require 3 traces)

    # filter
    # set ipre_filt = 0 to prevent extra filtering
    ifFilter = False
    filter_type = 'bandpass'
    # LLNL filter 10-50 sec is most stable. Some waveforms >= 100 sec show
    # oscillations. Use factor of 2 limit = 200 sec for prefilter
    f1 = 1 / 200
    f2 = 1 / 10
    zerophase = True  # False = causal, True = acausal
    corners = 4  # Is corner in Obspy same as Pole in SAC?
    remove_response = True
    iplot_response = False
    ipre_filt = 2  # 0 No pre_filter
    # 1 default pre_filter (see getwaveform_iris.py)
    # 2 user-defined pre_filter
    f0 = 0.5 * f1
    f3 = 2.0 * f2
    # The following are for the FMTU paper
    f0 = 0.005
    f1 = 0.006
    f3 = 10
    f4 = 15
    pre_filt = (f0, f1, f2, f3)  # applies for ipre_filt = 2 only

    # NOTE event data from user-defined catalog!
    # initialize objects
    ev = Event()
    org = Origin()
    mag = Magnitude()

    # build objects
    org.time = UTCDateTime(origin0[0])
    org.longitude = origin0[1]
    org.latitude = origin0[2]
    org.depth = origin0[3]
    mag.mag = origin0[5]
    mag.magnitude_type = origin0[6]  # Mw, ml, mb, ...

    ev.origins.append(org)
    ev.magnitudes.append(mag)

    # Delete existing data directory
    eid = util_helpers.otime2eid(ev.origins[0].time)
    ddir = './' + eid
    if os.path.exists('RAW'):
        print("WARNING. %s already exists. Deleting ..." % ddir)
        shutil.rmtree('RAW')
    if overwrite_ddir and os.path.exists(ddir):
        print("WARNING. %s already exists. Deleting ..." % ddir)
        shutil.rmtree(ddir)

    if client_pick is "IRIS":
        print('Using client %s' % client_pick)
        idb = 1
        client_list = ["IRIS", "NCEDC"]
        print("WARNING using event data from user-defined catalog")

    # LLNL
    if client_pick is "LLNL":
        print('Using client %s' % client_pick)
        idb = 3
        client_list = ["LLNL"]

        client = llnl_db_client.LLNLDBClient(
            "/store/raw/LLNL/UCRL-MI-222502/westernus.wfdisc")
        # get event time and event ID
        otime = obspy.UTCDateTime(origin0[0])
        cat = client.get_catalog()
        mintime_str = "time > %s" % (otime - sec_before_after_event)
        maxtime_str = "time < %s" % (otime + sec_before_after_event)
        print(mintime_str + "\n" + maxtime_str)
        ev = cat.filter(mintime_str, maxtime_str)
        nev = len(ev)
        if nev == 1:
            ev = ev[0]  # doesn't have magnitude (ATRISCO)
        elif nev > 1:
            ev = ev[1]  # [0] may not include magnitude. [1] may (LLNL)
        else:
            print("No events in the catalog for the given time period. Stop.")

    # The IRIS requests include BK data, but it has to be requested through
    # the NCEDC client
    for iclient in client_list:
        if iclient is "IRIS":
            network = network
            client = Client(iclient)
        elif iclient is "NCEDC":
            network = 'BK'
            station = '*'  # doesn't like "-staX"
            client = Client(iclient)

        try:
            gw.run_get_waveform(c=client,
                                event=ev,
                                idb=idb,
                                ref_time_place=ev,
                                min_dist=min_dist,
                                max_dist=max_dist,
                                before=tbefore_sec,
                                after=tafter_sec,
                                network=network,
                                station=station,
                                channel=channel,
                                resample_freq=resample_freq,
                                ifrotateRTZ=rotateRTZ,
                                ifrotateUVW=rotateUVW,
                                ifCapInp=output_cap_weight_file,
                                ifRemoveResponse=remove_response,
                                ifDetrend=detrend,
                                ifDemean=demean,
                                Taper=taper,
                                ifEvInfo=output_event_info,
                                scale_factor=scale_factor,
                                icreateNull=icreateNull,
                                ipre_filt=ipre_filt,
                                pre_filt=pre_filt,
                                ifFilter=ifFilter,
                                fmin=f1,
                                fmax=f2,
                                filter_type=filter_type,
                                zerophase=zerophase,
                                corners=corners,
                                iplot_response=iplot_response,
                                ifplot_spectrogram=ifplot_spectrogram)
        except:
            print("~~~~~ SOMETHING HAPPENED ~~~~~~~~~~")
            print(ev, client)
            print("Continuing")
            continue
Beispiel #3
0
    maxtime_str = "time < %s" % (otime + sec_before_after_event)
    print(mintime_str + "\n" + maxtime_str)
    #ev = cat.filter(mintime_str, maxtime_str)[0]
    ev = cat.filter(mintime_str, maxtime_str)
    
    if len(ev) > 0:
        ev = ev[0]
        # Nothing happens here.  We can change later
        ref_time_place = ev
        print(len(ev))
    else:
        print("No events in the catalog for the given time period. Stop.")
        sys.exit(0)

# Delete existing data directory
eid = util_helpers.otime2eid(ev.origins[0].time)
ddir = './'+ eid
# track git commit
os.system('git log | head -12 > ./' + eid + '_last_2git_commits.txt')
#if os.path.exists('RAW'):
#    print("WARNING. %s already exists. Deleting ..." % ddir)
#    shutil.rmtree('RAW')
if overwrite_ddir and os.path.exists(ddir):
    print("WARNING. %s already exists. Deleting ..." % ddir)
    shutil.rmtree(ddir)

# Extract waveforms, IRIS
getwaveform.run_get_waveform(c = client, event = ev, idb = idb, ref_time_place = ref_time_place,
                             min_dist = min_dist, max_dist = max_dist, min_az = min_az, max_az = max_az,  
                             before = tbefore_sec, after = tafter_sec, 
                             network = network, station = station, channel = channel, ifresample = resample_TF,
Beispiel #4
0
    # =============================================================================
    # fetch and process waveforms

    nev = len(ev_info_list)

    for ii in range(nev):
        ev_info = ev_info_list[ii]

        # Get event and client info
        # create event objects and reference origin object
        # (same type as event object) for station selection
        ev_info.get_events_client()

        # Delete existing data directory
        # set ev_info.overwrite_ddir=false to extract data from multiple clients
        ev_info.evname = util_helpers.otime2eid(
            ev_info.ref_time_place.origins[0].time)
        ddir = './' + ev_info.evname
        if ev_info.overwrite_ddir and os.path.exists(ddir):
            print("\n*** WARNING *** . Deleted existing directory", ddir)
            shutil.rmtree(ddir)

        # KEY: Extract waveforms, IRIS
        # use try to recover nicely when there are multiple event requests
        ev_info.run_get_waveform()
        '''
        try:
            ev_info.run_get_waveform()
        except Exception as e:
            print("FATAL. Unable to get data for event", ev_info.evname)
            print(e)
            print("Continuing with next event\n")