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
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
# 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]))
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
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