diff --git a/QtPyLoT.py b/QtPyLoT.py index dacfa693..e429307e 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -675,7 +675,24 @@ class MainWindow(QMainWindow): if not event: event = self.get_current_event() data = Data(self, event) - data += Data(self, evtdata=fname) + try: + data_new = Data(self, evtdata=fname) + data += data_new + except ValueError: + qmb = QMessageBox(self, icon=QMessageBox.Question, + text='Warning: Missmatch in event identifiers {} and {}. Continue?'.format( + data_new.get_evt_data().resource_id, + data.get_evt_data().resource_id), + windowTitle='PyLoT - Load data warning') + qmb.setStandardButtons(QMessageBox.Yes | QMessageBox.No) + qmb.setDefaultButton(QMessageBox.No) + ret = qmb.exec_() + if ret == qmb.Yes: + data_new.setNew() + data += data_new + else: + return + self.data = data print('Loading {} picks from file {}.'.format(type, fname)) if not loc: diff --git a/pylot/core/io/data.py b/pylot/core/io/data.py index 2efcb4c9..47e74053 100644 --- a/pylot/core/io/data.py +++ b/pylot/core/io/data.py @@ -74,6 +74,8 @@ class Data(object): def __add__(self, other): assert isinstance(other, Data), "operands must be of same type 'Data'" + rs_id = self.get_evt_data().get('resource_id') + rs_id_other = other.get_evt_data().get('resource_id') if other.isNew() and not self.isNew(): picks_to_add = other.get_evt_data().picks old_picks = self.get_evt_data().picks @@ -85,7 +87,7 @@ class Data(object): self.evtdata = new.get_evt_data() elif self.isNew() and other.isNew(): pass - elif self.get_evt_data().get('id') == other.get_evt_data().get('id'): + elif rs_id == rs_id_other: other.setNew() return self + other else: @@ -354,10 +356,16 @@ class Data(object): self.setEvtData(event) else: # prevent overwriting original pick information - picks = copy.deepcopy(self.get_evt_data().picks) + event_old = self.get_evt_data() + print(event_old.resource_id, event.resource_id) + if not event_old.resource_id == event.resource_id: + print("WARNING: Missmatch in event resource id's: {} and {}".format( + event_old.resource_id, + event.resource_id)) + picks = copy.deepcopy(event_old.picks) event = merge_picks(event, picks) # apply event information from location - self.get_evt_data().update(event) + event_old.update(event) applydata = {'pick': applyPicks, 'event': applyEvent} diff --git a/pylot/core/util/event.py b/pylot/core/util/event.py index 48667a07..1db5fac7 100644 --- a/pylot/core/util/event.py +++ b/pylot/core/util/event.py @@ -15,8 +15,9 @@ class Event(ObsPyEvent): Pickable class derived from ~obspy.core.event.Event containing information on a single event. ''' def __init__(self, path): + self.pylot_id = path.split('/')[-1] # initialize super class - super(Event, self).__init__(resource_id=ResourceIdentifier(path.split('/')[-1])) + super(Event, self).__init__(resource_id=ResourceIdentifier('smi:local/'+self.pylot_id)) self.path = path self.database = path.split('/')[-2] self.datapath = path.split('/')[-3]