From 3c9e25cf102c49415e53810cd17d8fd975df0a33 Mon Sep 17 00:00:00 2001 From: Natalia Poiata Date: Tue, 16 May 2017 18:15:36 +0100 Subject: [PATCH 1/6] Adding RMS calculation for the estimated picks --- backtrackbb/bp_types.py | 23 ++++++++++++++++++++++- backtrackbb/mod_btbb.py | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/backtrackbb/bp_types.py b/backtrackbb/bp_types.py index 1690230..c9df78d 100644 --- a/backtrackbb/bp_types.py +++ b/backtrackbb/bp_types.py @@ -31,7 +31,8 @@ def __init__(self, max_grid=None, ntraces=None, beg_win=None, end_win=None, - center_win=None): + center_win=None, + RMS_P=None, RMS_S=None): self.eventid = None self.picks = [] self.x = x @@ -50,6 +51,8 @@ def __init__(self, self.lon = None self.origin_time = None self.valid = True + self.rms_p = RMS_P + self.rms_s = RMS_S def __str__(self): s = '%s ' % self.eventid @@ -67,6 +70,10 @@ def __str__(self): s += ' LAT %.5f LON %.5f' % (self.lat, self.lon) if (self.origin_time is not None): s += ' T_ORIG %s' % (self.origin_time) + if (self.rms_p is not None): + s += ' RMS-P %.2f' % self.rms_p + if (self.rms_s is not None): + s += ' RMS-S %.2f' % self.rms_s return s def from_str(self, string): @@ -88,6 +95,8 @@ def from_str(self, string): self.lat = float(word[16]) self.lon = float(word[18]) self.origin_time = UTCDateTime(word[20]) + self.rms_p = float(word[22]) + self.rms_s = float(word[24]) def add_pick(self, pick): self.picks.append(pick) @@ -145,6 +154,18 @@ def compute_origin_time(self, dt_min, update_evid=False): pick.theor_time = pick.theor_time_absolute - otime self.origin_time = otime + def compute_rms(self, wave_type): + for wave in wave_type: + sq_mean = [] + for pick in self.picks: + if pick.arrival_type == wave and pick.pick_time != -10.0: + sq_mean.append((pick.pick_time - pick.theor_time)**2) + rms = np.sqrt(np.mean(sq_mean)) + if wave == 'P': + self.rms_p = rms + elif wave == 'S': + self.rms_s = rms + def set_eventid(self, eventid=None): if eventid is None: try: diff --git a/backtrackbb/mod_btbb.py b/backtrackbb/mod_btbb.py index 06703e0..476ff3e 100644 --- a/backtrackbb/mod_btbb.py +++ b/backtrackbb/mod_btbb.py @@ -272,6 +272,7 @@ def _run_btbb(config, st, st_CF, t_begin, phase2 = list(set(config.grid_type) - set(config.wave_type)) trigger.make_picks(config.stations, phase2, grids=GRD_sta) trigger.compute_origin_time(config.dt_min) + trigger.compute_rms(config.wave_type) trigger.set_eventid() trigger.check_validity() From 83a720f5801a201998a351575c39d601c693ad20 Mon Sep 17 00:00:00 2001 From: Natalia Poiata Date: Tue, 16 May 2017 18:21:24 +0100 Subject: [PATCH 2/6] Parametrization of criteria for defining a noisy CF if ignore_noisy_CF=True --- backtrackbb/configspec.conf | 1 + backtrackbb/mod_btbb.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/backtrackbb/configspec.conf b/backtrackbb/configspec.conf index 62abac1..c2d1f0c 100644 --- a/backtrackbb/configspec.conf +++ b/backtrackbb/configspec.conf @@ -54,6 +54,7 @@ start_time = string(default=None) end_time = string(default=None) #------------------------------------------------------------------------ ignore_noisy_CF = boolean(default=False) +n_ignore_noisy_CF = integer(default=2) grid_power = string(default='1') grid_power_ellipsoid = string(default=None) trigger = float(default=None) diff --git a/backtrackbb/mod_btbb.py b/backtrackbb/mod_btbb.py index 476ff3e..724b12a 100644 --- a/backtrackbb/mod_btbb.py +++ b/backtrackbb/mod_btbb.py @@ -76,10 +76,10 @@ def _run_btbb(config, st, st_CF, t_begin, min_sum = min(s[2] for s in sums) - # A noisy CF has an integral at least two times larger than - # the smaller one - # TODO: parametrize? - noisy_sta_wave = [(s[0], s[1]) for s in sums if s[2] >= 2*min_sum] + # A noisy CF has an integral at least N (=config.n_ignore_noisy_CF) + # times larger than the smaller one + noisy_sta_wave = [(s[0], s[1]) for s in sums if s[2] >= + config.n_ignore_noisy_CF*min_sum] else: noisy_sta_wave = [] From 303cd2ff688e35e6a38cfbb13c4895a721ecd75c Mon Sep 17 00:00:00 2001 From: Natalia Poiata Date: Wed, 31 May 2017 12:08:16 +0100 Subject: [PATCH 3/6] Bug fix for reading trigger from string --- backtrackbb/bp_types.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/backtrackbb/bp_types.py b/backtrackbb/bp_types.py index c9df78d..3da23ce 100644 --- a/backtrackbb/bp_types.py +++ b/backtrackbb/bp_types.py @@ -95,8 +95,14 @@ def from_str(self, string): self.lat = float(word[16]) self.lon = float(word[18]) self.origin_time = UTCDateTime(word[20]) - self.rms_p = float(word[22]) - self.rms_s = float(word[24]) + try: + self.rms_p = float(word[22]) + except IndexError: + self.rms_p = None + try: + self.rms_s = float(word[24]) + except IndexError: + self.rms_s = None def add_pick(self, pick): self.picks.append(pick) From ac0548b7b7f2f0d2710cc69a6d98f82393ec7fb1 Mon Sep 17 00:00:00 2001 From: Natalia Poiata Date: Wed, 31 May 2017 12:53:04 +0100 Subject: [PATCH 4/6] Bug fix in grouping triggers module --- backtrackbb/mod_group_trigs.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/backtrackbb/mod_group_trigs.py b/backtrackbb/mod_group_trigs.py index 15e541b..51c67ab 100644 --- a/backtrackbb/mod_group_trigs.py +++ b/backtrackbb/mod_group_trigs.py @@ -12,18 +12,29 @@ def trig_dist(trg1, trg2): def group_triggers(config, triggers): + # Sorting triggers in the + sorted_trg = sorted(triggers, key=lambda x: x.max_grid, + reverse=True) - for n, trg1 in enumerate(triggers): - # we assume (for speed) than no more than - # 10 triggers need to be grouped - for trg2 in triggers[n+1:n+10]: + for n, trg1 in enumerate(sorted_trg): + # Currently, we compare all the triggers, + # because trigger list was sorted. + # + # For speed, number of triggers to be grouped can be reduced + # to a number N (ex N=50) + # for trg2 in sorted_trg[n+1:n+50]: + + for trg2 in sorted_trg[n+1:]: + dist, time_diff = trig_dist(trg1, trg2) + if (dist <= config.group_min_dist and time_diff <= config.group_min_time_diff): + if trg2.max_grid <= trg1.max_grid: - triggers.remove(trg2) + sorted_trg.remove(trg2) else: - triggers.remove(trg1) + sorted_trg.remove(trg1) break - return triggers + return sorted(sorted_trg, key=lambda x: x.eventid) From f15f24964a2692ee2ac6220b20bae6c127f9379b Mon Sep 17 00:00:00 2001 From: Natalia Poiata Date: Wed, 31 May 2017 14:45:40 +0100 Subject: [PATCH 5/6] Commented out message of running Rosenberger algorithm --- backtrackbb/mod_filter_picker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backtrackbb/mod_filter_picker.py b/backtrackbb/mod_filter_picker.py index 8bdd58c..2718a32 100644 --- a/backtrackbb/mod_filter_picker.py +++ b/backtrackbb/mod_filter_picker.py @@ -188,8 +188,8 @@ def MBfilter_CF(st, frequencies, # Define the decay constant rosenberger_decay_constant = 1 / rosenberger_decay_nsmps - print('Rosenberger in process {}/{}\r'.format(n+1, Nb), - sys.stdout.flush()) + # print('Rosenberger in process {}/{}\r'.format(n+1, Nb), + # sys.stdout.flush()) # third value returned by rosenberger() is the polarizaion filter, # which we do not use here From e02f8ff1418a639b9f707db93b5e270d185e8185 Mon Sep 17 00:00:00 2001 From: Natalia Poiata Date: Wed, 31 May 2017 17:03:30 +0100 Subject: [PATCH 6/6] Small fixies in bt2eventdata.py --- backtrackbb/scripts/bt2eventdata.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backtrackbb/scripts/bt2eventdata.py b/backtrackbb/scripts/bt2eventdata.py index 191f590..86da94f 100644 --- a/backtrackbb/scripts/bt2eventdata.py +++ b/backtrackbb/scripts/bt2eventdata.py @@ -74,7 +74,7 @@ def main(): for pick in trigger.picks: f.write('%-6s ? ? ? %-6s ? ' % (pick.station, pick.arrival_type)) - if pick.arrival_type is 'P': + if pick.arrival_type == 'P': time = trigger.origin_time + pick.pick_time else: time = trigger.origin_time + pick.theor_time @@ -92,7 +92,7 @@ def main(): # -----cutting events and saving data in specified format----- for pick in trigger.picks: - if pick.arrival_type is not 'P': + if pick.arrival_type != 'P': continue trim_starttime = (trigger.origin_time + pick.theor_time