コード例 #1
0
ファイル: locations_trigger.py プロジェクト: ablkvo/waveloc
def number_good_kurtosis_for_location(kurt_files,data_files,loc,time_dict,snr_limit=10.0,snr_tr_limit=10.0,sn_time=10.0):

  o_time=loc['o_time']
  stack_x=loc['x_mean']
  stack_y=loc['y_mean']
  stack_z=loc['z_mean']
  # TODO - Fix this to estimate K-time from o_time and propagation time to station
  n_good_kurt=0
  wf=Waveform()

  for ifile in xrange(len(kurt_files)):
    kfilename=kurt_files[ifile]
    dfilename=data_files[ifile]

    st=read(kfilename,headonly=True)
    staname=st.traces[0].stats.station

    if staname in time_dict.keys():
      traveltime=time_dict[staname].value_at_point(stack_x,stack_y,stack_z)
      start_time=o_time+traveltime-sn_time
      end_time=o_time+traveltime+sn_time
      try:
        wf.read_from_file(kfilename,starttime=start_time,endtime=end_time)
        snr=wf.get_snr(o_time+traveltime,start_time,end_time)

        wf.read_from_file(dfilename,starttime=start_time,endtime=end_time)
        snr_tr=wf.get_snr(o_time+traveltime,start_time,end_time)

        if snr > snr_limit and snr_tr > snr_tr_limit:
          n_good_kurt = n_good_kurt + 1
      except UserWarning:
        logging.info('No data around %s for file %s.'%(o_time.isoformat(),kfilename))

  return n_good_kurt
コード例 #2
0
def number_good_kurtosis_for_location(kurt_files,
                                      data_files,
                                      loc,
                                      time_dict,
                                      snr_limit=10.0,
                                      snr_tr_limit=10.0,
                                      sn_time=10.0):

    o_time = loc['o_time']
    stack_x = loc['x_mean']
    stack_y = loc['y_mean']
    stack_z = loc['z_mean']
    # TODO - Fix this to estimate K-time from o_time and propagation time to station
    n_good_kurt = 0
    wf = Waveform()

    for ifile in xrange(len(kurt_files)):
        kfilename = kurt_files[ifile]
        dfilename = data_files[ifile]

        st = read(kfilename, headonly=True)
        staname = st.traces[0].stats.station

        if staname in time_dict.keys():
            traveltime = time_dict[staname].value_at_point(
                stack_x, stack_y, stack_z)
            start_time = o_time + traveltime - sn_time
            end_time = o_time + traveltime + sn_time
            try:
                wf.read_from_file(kfilename,
                                  starttime=start_time,
                                  endtime=end_time)
                snr = wf.get_snr(o_time + traveltime, start_time, end_time)

                wf.read_from_file(dfilename,
                                  starttime=start_time,
                                  endtime=end_time)
                snr_tr = wf.get_snr(o_time + traveltime, start_time, end_time)

                if snr > snr_limit and snr_tr > snr_tr_limit:
                    n_good_kurt = n_good_kurt + 1
            except UserWarning:
                logging.info('No data around %s for file %s.' %
                             (o_time.isoformat(), kfilename))

    return n_good_kurt
コード例 #3
0
  # set start and end time of plot
  start_time=stack_time-10.0
  end_time=stack_time+20.0

  start_time_migration=stack_time-60.0
  end_time_migration=stack_time+60.0


  # make dictionary of station names with snr ratios
  snr_start_time=stack_time-options.sn_time
  snr_end_time=stack_time+options.sn_time
  snr_dict={}
  wf=Waveform()
  for filename in kurt_files:
    wf.read_from_file(filename,starttime=snr_start_time,endtime=snr_end_time)
    snr=wf.get_snr(stack_time,snr_start_time,snr_end_time)
    station_name=wf.trace.stats.station
    snr_dict[station_name]=snr

  logging.debug("Signal to noise ratios on kurtosis")
  logging.debug(snr_dict)

  # set output filename
  plot_filename=os.path.join(loc_path,"loc_%s.png"%stack_time.isoformat())

  # select grad files for which the snr is > snr_limit
  grad_files_selected=[]
  for filename in grad_files:
    st=read(filename,headonly=True)
    station_name=st.traces[0].stats.station
    logging.debug("Checking station %s : snr_value = %.2f"%(station_name,snr_dict[station_name]))
コード例 #4
0
def number_good_kurtosis_for_location(kurt_files,
                                      data_files,
                                      loc,
                                      time_dict,
                                      snr_limit=10.0,
                                      snr_tr_limit=10.0,
                                      sn_time=10.0):
    """
    Analyses the filtered data and the kurtosis time-series to determine the
    number of stations whose traces have sufficiently high signal-to-noise
    ratio (SNR) to be useful for the location. Both time-series need to satisfy
    the conditions for a station to be counted as contributing to the location.

    :param kurt_files: Filenames for kurtosis files. Depending on the filenames
        given in this list, the function will analyse kurtosis,
        kurtosis-gradient or gaussian waveforms.
    :param data_files: Filenames for filtered data.
    :param loc: Location dictionary for the event to be analysed
    :param time_dict: Dictionary of travel-times for the location to be
        analysed
    :param snr_limit: SNR limit for kurtosis-type data
    :param snr_limit_tr: SNR limit for filtered data
    :param snr_time: Length of time in seconds before the event for computation
        of SNR.

    :rtype: integer
    :returns: Numer of stations that have contributed to the location.
    """

    o_time = loc['o_time']
    stack_x = loc['x_mean']
    stack_y = loc['y_mean']
    stack_z = loc['z_mean']

    n_good_kurt = 0
    wf = Waveform()

    for ifile in xrange(len(kurt_files)):
        kfilename = kurt_files[ifile]
        dfilename = data_files[ifile]

        st = read(kfilename, headonly=True)
        staname = st.traces[0].stats.station

        if staname in time_dict.keys():
            traveltime = time_dict[staname].value_at_point(
                stack_x, stack_y, stack_z)
            start_time = o_time + traveltime - sn_time
            end_time = o_time + traveltime + sn_time
            try:
                wf.read_from_file(kfilename,
                                  starttime=start_time,
                                  endtime=end_time)
                snr = wf.get_snr(o_time + traveltime, start_time, end_time)

                wf.read_from_file(dfilename,
                                  starttime=start_time,
                                  endtime=end_time)
                snr_tr = wf.get_snr(o_time + traveltime, start_time, end_time)

                if snr > snr_limit and snr_tr > snr_tr_limit:
                    n_good_kurt = n_good_kurt + 1

            except UserWarning:
                logging.info('No data around %s for file %s.' %
                             (o_time.isoformat(), kfilename))

    return n_good_kurt
コード例 #5
0
ファイル: locations_trigger.py プロジェクト: amaggi/waveloc
def number_good_kurtosis_for_location(kurt_files, data_files, loc, time_dict,
                                      snr_limit=10.0, snr_tr_limit=10.0,
                                      sn_time=10.0):
    """
    Analyses the filtered data and the kurtosis time-series to determine the
    number of stations whose traces have sufficiently high signal-to-noise
    ratio (SNR) to be useful for the location. Both time-series need to satisfy
    the conditions for a station to be counted as contributing to the location.

    :param kurt_files: Filenames for kurtosis files. Depending on the filenames
        given in this list, the function will analyse kurtosis,
        kurtosis-gradient or gaussian waveforms.
    :param data_files: Filenames for filtered data.
    :param loc: Location dictionary for the event to be analysed
    :param time_dict: Dictionary of travel-times for the location to be
        analysed
    :param snr_limit: SNR limit for kurtosis-type data
    :param snr_limit_tr: SNR limit for filtered data
    :param snr_time: Length of time in seconds before the event for computation
        of SNR.

    :rtype: integer
    :returns: Numer of stations that have contributed to the location.
    """

    o_time = loc['o_time']
    stack_x = loc['x_mean']
    stack_y = loc['y_mean']
    stack_z = loc['z_mean']

    n_good_kurt = 0
    wf = Waveform()

    for ifile in xrange(len(kurt_files)):
        kfilename = kurt_files[ifile]
        dfilename = data_files[ifile]

        st = read(kfilename, headonly=True)
        staname = st.traces[0].stats.station

        if staname in time_dict.keys():
            traveltime = time_dict[staname].value_at_point(stack_x, stack_y,
                                                           stack_z)
            start_time = o_time+traveltime-sn_time
            end_time = o_time+traveltime+sn_time
            try:
                wf.read_from_file(kfilename, starttime=start_time,
                                  endtime=end_time)
                snr = wf.get_snr(o_time+traveltime, start_time, end_time)

                wf.read_from_file(dfilename, starttime=start_time,
                                  endtime=end_time)
                snr_tr = wf.get_snr(o_time+traveltime, start_time, end_time)

                if snr > snr_limit and snr_tr > snr_tr_limit:
                    n_good_kurt = n_good_kurt + 1

            except UserWarning:
                logging.info('No data around %s for file %s.' %
                             (o_time.isoformat(), kfilename))

    return n_good_kurt