def pk_baer(reltrc, samp_int, tdownmax, tupevent, thr1, thr2, preset_len, p_dur, return_cf=False): """ Wrapper for P-picker routine by M. Baer, Schweizer Erdbebendienst. :param reltrc: time series as numpy.ndarray float32 data, possibly filtered :param samp_int: number of samples per second :param tdownmax: if dtime exceeds tdownmax, the trigger is examined for validity :param tupevent: min nr of samples for itrm to be accepted as a pick :param thr1: threshold to trigger for pick (c.f. paper) :param thr2: threshold for updating sigma (c.f. paper) :param preset_len: no of points taken for the estimation of variance of SF(t) on preset() :param p_dur: p_dur defines the time interval for which the maximum amplitude is evaluated Originally set to 6 secs :type return_cf: bool :param return_cf: If ``True``, also return the characteristic function. :return: (pptime, pfm [,cf]) pptime sample number of parrival; pfm direction of first motion (U or D), optionally also the characteristic function. .. note:: currently the first sample is not taken into account .. seealso:: [Baer1987]_ """ pptime = C.c_int() # c_chcar_p strings are immutable, use string_buffer for pointers pfm = C.create_string_buffer(b" ", 5) # be nice and adapt type if necessary reltrc = np.ascontiguousarray(reltrc, np.float32) # Initiliaze CF array (MB) c_float_p = C.POINTER(C.c_float) cf_arr = np.zeros(len(reltrc) - 1, dtype=np.float32, order="C") cf_p = cf_arr.ctypes.data_as(c_float_p) # index in pk_mbaer.c starts with 1, 0 index is lost, length must be # one shorter args = (len(reltrc) - 1, C.byref(pptime), pfm, samp_int, tdownmax, tupevent, thr1, thr2, preset_len, p_dur, cf_p) errcode = clibsignal.ppick(reltrc, *args) if errcode != 0: raise MemoryError("Error in function ppick of mk_mbaer.c") # Switch cf_arr param (MB) # add the sample to the time which is not taken into account # pfm has to be decoded from byte to string if return_cf: return pptime.value + 1, pfm.value.decode('utf-8'), cf_arr else: return pptime.value + 1, pfm.value.decode('utf-8')
def pkBaer(reltrc, samp_int, tdownmax, tupevent, thr1, thr2, preset_len, p_dur): """ Wrapper for P-picker routine by M. Baer, Schweizer Erdbebendienst. :param reltrc: timeseries as numpy.ndarray float32 data, possibly filtered :param samp_int: number of samples per second :param tdownmax: if dtime exceeds tdownmax, the trigger is examined for validity :param tupevent: min nr of samples for itrm to be accepted as a pick :param thr1: threshold to trigger for pick (c.f. paper) :param thr2: threshold for updating sigma (c.f. paper) :param preset_len: no of points taken for the estimation of variance of SF(t) on preset() :param p_dur: p_dur defines the time interval for which the maximum amplitude is evaluated Originally set to 6 secs :return: (pptime, pfm) pptime sample number of parrival; pfm direction of first motion (U or D) .. note:: currently the first sample is not taken into account .. seealso:: [Baer1987]_ """ pptime = C.c_int() # c_chcar_p strings are immutable, use string_buffer for pointers pfm = C.create_string_buffer(" ", 5) # be nice and adapt type if necessary reltrc = np.require(reltrc, 'float32', ['C_CONTIGUOUS']) # intex in pk_mbaer.c starts with 1, 0 index is lost, length must be # one shorter args = (len(reltrc) - 1, C.byref(pptime), pfm, samp_int, tdownmax, tupevent, thr1, thr2, preset_len, p_dur) errcode = clibsignal.ppick(reltrc, *args) if errcode != 0: raise Exception("Error in function ppick of mk_mbaer.c") # add the sample to the time which is not taken into account # pfm has to be decoded from byte to string return pptime.value + 1, pfm.value.decode('utf-8')
def pkBaer(reltrc, samp_int, tdownmax, tupevent, thr1, thr2, preset_len, p_dur): """ Wrapper for P-picker routine by M. Baer, Schweizer Erdbebendienst. :param reltrc: timeseries as numpy.ndarray float32 data, possibly filtered :param samp_int: number of samples per second :param tdownmax: if dtime exceeds tdownmax, the trigger is examined for validity :param tupevent: min nr of samples for itrm to be accepted as a pick :param thr1: threshold to trigger for pick (c.f. paper) :param thr2: threshold for updating sigma (c.f. paper) :param preset_len: no of points taken for the estimation of variance of SF(t) on preset() :param p_dur: p_dur defines the time interval for which the maximum amplitude is evaluated Originally set to 6 secs :return: (pptime, pfm) pptime sample number of parrival; pfm direction of first motion (U or D) .. note:: currently the first sample is not take into account .. seealso:: [Baer1987]_ """ pptime = C.c_int() # c_chcar_p strings are immutable, use string_buffer for pointers pfm = C.create_string_buffer(" ", 5) # be nice and adapt type if necessary reltrc = np.require(reltrc, 'float32', ['C_CONTIGUOUS']) # intex in pk_mbaer.c starts with 1, 0 index is lost, length must be # one shorter args = (len(reltrc) - 1, C.byref(pptime), pfm, samp_int, tdownmax, tupevent, thr1, thr2, preset_len, p_dur) errcode = clibsignal.ppick(reltrc, *args) if errcode != 0: raise Exception("Error in function ppick of mk_mbaer.c") # add the sample to the time which is not taken into account # pfm has to be decoded from byte to string return pptime.value + 1, pfm.value.decode('utf-8')