[new] hybrid selection for array_map (plot automatic and manual picks, prefer manuals)

This commit is contained in:
Marcel Paffrath 2018-08-09 11:16:20 +02:00
parent a2af6b44f3
commit a0f9561bcf
3 changed files with 28 additions and 14 deletions

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import traceback
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
import obspy import obspy
@ -36,6 +37,15 @@ class Array_map(QtGui.QWidget):
self._style = parent._style self._style = parent._style
# self.show() # self.show()
@property
def hybrids_dict(self):
hybrids_dict = self.picks_dict.copy()
for station, pick in self.autopicks_dict.items():
if not station in hybrids_dict.keys():
hybrids_dict[station] = pick
return hybrids_dict
def init_map(self): def init_map(self):
self.init_lat_lon_dimensions() self.init_lat_lon_dimensions()
self.init_lat_lon_grid() self.init_lat_lon_grid()
@ -51,15 +61,14 @@ class Array_map(QtGui.QWidget):
return return
data = self._parent.get_data().getWFData() data = self._parent.get_data().getWFData()
for index in ind: for index in ind:
station = str(self._station_onpick_ids[index].split('.')[-1]) network, station = self._station_onpick_ids[index].split('.')[:2]
try: try:
data = data.select(station=station) data = data.select(station=station)
if not data: if not data:
self._warn('No data for station {}'.format(station)) self._warn('No data for station {}'.format(station))
return return
pickDlg = PickDlg(self._parent, parameter=self._parent._inputs, pickDlg = PickDlg(self._parent, parameter=self._parent._inputs,
data=data, data=data, network=network, station=station,
station=station,
picks=self._parent.get_current_event().getPick(station), picks=self._parent.get_current_event().getPick(station),
autopicks=self._parent.get_current_event().getAutopick(station), autopicks=self._parent.get_current_event().getAutopick(station),
filteroptions=self._parent.filteroptions) filteroptions=self._parent.filteroptions)
@ -67,6 +76,7 @@ class Array_map(QtGui.QWidget):
message = 'Could not generate Plot for station {st}.\n {er}'.format(st=station, er=e) message = 'Could not generate Plot for station {st}.\n {er}'.format(st=station, er=e)
self._warn(message) self._warn(message)
print(message, e) print(message, e)
print(traceback.format_exc())
return return
pyl_mw = self._parent pyl_mw = self._parent
try: try:
@ -115,9 +125,10 @@ class Array_map(QtGui.QWidget):
self.status_label.setText('Latitude: {}, Longitude: {}'.format(lat, lon)) self.status_label.setText('Latitude: {}, Longitude: {}'.format(lat, lon))
def current_picks_dict(self): def current_picks_dict(self):
picktype = self.comboBox_am.currentText() picktype = self.comboBox_am.currentText().split(' ')[0]
auto_manu = {'auto': self.autopicks_dict, auto_manu = {'auto': self.autopicks_dict,
'manual': self.picks_dict} 'manual': self.picks_dict,
'hybrid': self.hybrids_dict}
return auto_manu[picktype] return auto_manu[picktype]
def init_graphics(self): def init_graphics(self):
@ -141,8 +152,9 @@ class Array_map(QtGui.QWidget):
self.comboBox_phase.insertItem(1, 'S') self.comboBox_phase.insertItem(1, 'S')
self.comboBox_am = QtGui.QComboBox() self.comboBox_am = QtGui.QComboBox()
self.comboBox_am.insertItem(0, 'auto') self.comboBox_am.insertItem(0, 'hybrid (prefer manual)')
self.comboBox_am.insertItem(1, 'manual') self.comboBox_am.insertItem(1, 'manual')
self.comboBox_am.insertItem(2, 'auto')
self.top_row.addWidget(QtGui.QLabel('Select a phase: ')) self.top_row.addWidget(QtGui.QLabel('Select a phase: '))
self.top_row.addWidget(self.comboBox_phase) self.top_row.addWidget(self.comboBox_phase)
@ -349,15 +361,17 @@ class Array_map(QtGui.QWidget):
def draw_everything(self): def draw_everything(self):
picktype = self.comboBox_am.currentText() picktype = self.comboBox_am.currentText()
if (self.picks_dict and picktype == 'manual') \ picks_available = (self.picks_dict and picktype == 'manual') \
or (self.autopicks_dict and picktype == 'auto'): or (self.autopicks_dict and picktype == 'auto') \
or ((self.autopicks_dict or self.picks_dict) and picktype.startswith('hybrid'))
if picks_available:
self.init_picks() self.init_picks()
if len(self.picks) >= 3: if len(self.picks) >= 3:
self.init_picksgrid() self.init_picksgrid()
self.draw_contour_filled() self.draw_contour_filled()
self.scatter_all_stations() self.scatter_all_stations()
if (self.picks_dict and picktype == 'manual') \ if picks_available:
or (self.autopicks_dict and picktype == 'auto'):
self.scatter_picked_stations() self.scatter_picked_stations()
self.cbar = self.add_cbar(label='Time relative to first onset ({}) [s]'.format(self._earliest_picktime)) self.cbar = self.add_cbar(label='Time relative to first onset ({}) [s]'.format(self._earliest_picktime))
self.comboBox_phase.setEnabled(True) self.comboBox_phase.setEnabled(True)

View File

@ -182,7 +182,7 @@ class Metadata(object):
station_name = station[0].station_call_letters station_name = station[0].station_call_letters
network_name = station[0].network_code network_name = station[0].network_code
if not station_name in self.stations_dict.keys(): if not station_name in self.stations_dict.keys():
st_id = network_name + '.' + station_name st_id = '{}.{}'.format(network_name, station_name)
self.stations_dict[st_id] = {'latitude': station[0].latitude, self.stations_dict[st_id] = {'latitude': station[0].latitude,
'longitude': station[0].longitude} 'longitude': station[0].longitude}
@ -192,7 +192,7 @@ class Metadata(object):
station_name = station.code station_name = station.code
network_name = network_name.code network_name = network_name.code
if not station_name in self.stations_dict.keys(): if not station_name in self.stations_dict.keys():
st_id = network_name + '.' + station_name st_id = '{}.{}'.format(network_name, station_name)
self.stations_dict[st_id] = {'latitude': station[0].latitude, self.stations_dict[st_id] = {'latitude': station[0].latitude,
'longitude': station[0].longitude} 'longitude': station[0].longitude}

View File

@ -2130,7 +2130,7 @@ class PickDlg(QDialog):
return self.components return self.components
def getStation(self): def getStation(self):
return self.network + '.' + self.station + '.' + self.location return '{}.{}.{}'.format(self.network, self.station, self.location)
def getChannelID(self, key): def getChannelID(self, key):
if key < 0: key = 0 if key < 0: key = 0