diff --git a/pylot/core/util/array_map.py b/pylot/core/util/array_map.py index 0a9cc270..fe48a0de 100644 --- a/pylot/core/util/array_map.py +++ b/pylot/core/util/array_map.py @@ -32,14 +32,19 @@ from pylot.core.pick.utils import get_quality_class class MplCanvas(FigureCanvas): - def __init__(self, parent=None, width=5, height=4, dpi=100): - self.fig = plt.figure(figsize=(width, height), dpi=dpi) - self.axes = self.fig.add_subplot(111) + def __init__(self, parent=None, extern_axes=None, width=5, height=4, dpi=100): + if extern_axes is None: + self.fig = plt.figure(figsize=(width, height), dpi=dpi) + self.axes = self.fig.add_subplot(111) + else: + self.fig = extern_axes.figure + self.axes = extern_axes + super(MplCanvas, self).__init__(self.fig) class Array_map(QtWidgets.QWidget): - def __init__(self, parent, metadata, parameter=None, figure=None, annotate=True, pointsize=25., + def __init__(self, parent, metadata, parameter=None, axes=None, annotate=True, pointsize=25., linewidth=1.5, width=5e6, height=2e6): # super(Array_map, self).__init__(parent) QtWidgets.QWidget.__init__(self) @@ -50,6 +55,7 @@ class Array_map(QtWidgets.QWidget): self.metadata = metadata self.pointsize = pointsize self.linewidth = linewidth + self.extern_plot_axes = axes self.width = width self.height = height self.annotate = annotate @@ -91,8 +97,15 @@ class Array_map(QtWidgets.QWidget): Initializes all GUI components and figure elements to be populeted by other functions """ # initialize figure elements - self.canvas = MplCanvas(self) - self.plotWidget = FigureCanvas(self.canvas.fig) + + if self.extern_plot_axes is None: + self.canvas = MplCanvas(self) + self.plotWidget = FigureCanvas(self.canvas.fig) + else: + self.canvas = MplCanvas(self, extern_axes=self.extern_plot_axes) + #self.canvas.axes = self.extern_plot_axes + #self.canvas.fig = self.extern_plot_axes.figure + self.plotWidget = FigureCanvas(self.canvas.fig) # initialize GUI elements self.status_label = QtWidgets.QLabel() @@ -173,7 +186,7 @@ class Array_map(QtWidgets.QWidget): # self.plotWidget.draw_idle() def add_merid_paral(self): - self.gridlines = self.canvas.axes.gridlines(draw_labels=False, alpha=0.5, zorder=7) + self.gridlines = self.canvas.axes.gridlines(draw_labels=False, alpha=0.8, color='dimgray', linewidth=self.linewidth, zorder=7) # current cartopy version does not support label removal. Devs are working on it. # Should be fixed with next cartopy version # self.gridlines.xformatter = LONGITUDE_FORMATTER @@ -572,13 +585,14 @@ class Array_map(QtWidgets.QWidget): if st in self.marked_stations: color = 'red' self.annotations.append( - self.canvas.axes.annotate(' %s' % st, xy=(x + 0.003, y + 0.003), fontsize=self.pointsize / 5., + self.canvas.axes.annotate(' %s' % st, xy=(x + 0.003, y + 0.003), fontsize=self.pointsize / 4., fontweight='semibold', color=color, alpha=0.8, transform=ccrs.PlateCarree(), zorder=14, - path_effects=[ - PathEffects.withStroke(linewidth=self.pointsize / 6., foreground='k')])) - self.legend = self.canvas.axes.legend(loc=1) - self.legend.get_frame().set_facecolor((1, 1, 1, 0.75)) + path_effects=[PathEffects.withStroke( + linewidth=self.pointsize / 15., foreground='k')])) + + self.legend = self.canvas.axes.legend(loc=1, framealpha=1) + self.legend.get_frame().set_facecolor((1, 1, 1, 0.95)) def add_cbar(self, label): self.cbax_bg = inset_axes(self.canvas.axes, width="6%", height="75%", loc=5) diff --git a/pylot/core/util/generate_array_maps.py b/pylot/core/util/generate_array_maps.py index e625d017..c427577c 100755 --- a/pylot/core/util/generate_array_maps.py +++ b/pylot/core/util/generate_array_maps.py @@ -4,6 +4,11 @@ import os import multiprocessing +import sys +import glob +import matplotlib +matplotlib.use('Qt5Agg') +sys.path.append(os.path.join('/'.join(sys.argv[0].split('/')[:-1]), '../../..')) from PyLoT import Project from pylot.core.util.dataprocessing import Metadata @@ -16,12 +21,8 @@ def main(project_file_path, manual=False, auto=True, file_format='png', f_ext='' project = Project.load(project_file_path) nEvents = len(project.eventlist) input_list = [] - + print('\n') for index, event in enumerate(project.eventlist): - # MP MP TESTING +++ - # if not eventdir.endswith('20170908_044946.a'): - # continue - # MP MP ---- kwargs = dict(project=project, event=event, nEvents=nEvents, index=index, manual=manual, auto=auto, file_format=file_format, f_ext=f_ext) input_list.append(kwargs) @@ -31,7 +32,7 @@ def main(project_file_path, manual=False, auto=True, file_format='png', f_ext='' array_map_worker(item) else: pool = multiprocessing.Pool(ncores) - result = pool.map(array_map_worker, input_list) + pool.map(array_map_worker, input_list) pool.close() pool.join() @@ -40,6 +41,10 @@ def array_map_worker(input_dict): event = input_dict['event'] eventdir = event.path print('Working on event: {} ({}/{})'.format(eventdir, input_dict['index'] + 1, input_dict['nEvents'])) + xml_picks = glob.glob(os.path.join(eventdir, f'*{input_dict["f_ext"]}.xml')) + if not len(xml_picks): + print('Event {} does not have any picks associated with event file extension {}'. format(eventdir, input_dict['f_ext'])) + return # check for picks manualpicks = event.getPicks() autopicks = event.getAutopicks() @@ -53,11 +58,12 @@ def array_map_worker(input_dict): continue if not metadata: metadata = Metadata(inventory=metadata_path, verbosity=0) + # create figure to plot on - fig = plt.figure(figsize=(16, 9)) + fig, ax = plt.subplots(figsize=(16, 9)) # create array map object - map = Array_map(None, metadata, parameter=input_dict['project'].parameter, figure=fig, - width=2.13e6, height=1.2e6, pointsize=15., linewidth=1.0) + map = Array_map(None, metadata, parameter=input_dict['project'].parameter, axes=ax, + width=2.13e6, height=1.2e6, pointsize=25., linewidth=1.0) # set combobox to auto/manual to plot correct pick type map.comboBox_am.setCurrentIndex(map.comboBox_am.findText(pick_type)) # add picks to map and save file @@ -69,10 +75,10 @@ def array_map_worker(input_dict): if __name__ == '__main__': - dataroot = '/home/marcel' - infiles = ['alparray_all_events_0.03-0.1_mantle_correlated_v3.plp'] + dataroot = '/home/kaan/master_thesis/waveformData/dmt_dir_proj' + infiles = ['mag_8_sym_proj.plp'] for infile in infiles: - main(os.path.join(dataroot, infile), f_ext='_correlated_0.1Hz', ncores=10) + main(os.path.join(dataroot, infile), f_ext='_correlated_0.03-0.1', ncores=1) # main('E:\Shared\AlpArray\\test_aa.plp', f_ext='_correlated_0.5Hz', ncores=1) # main('/home/marcel/alparray_m6.5-6.9_mantle_correlated_v3.plp', f_ext='_correlated_0.5Hz') diff --git a/pylot/core/util/obspyDMT_interface.py b/pylot/core/util/obspyDMT_interface.py index e8a1a021..d699ce4e 100644 --- a/pylot/core/util/obspyDMT_interface.py +++ b/pylot/core/util/obspyDMT_interface.py @@ -34,17 +34,25 @@ def qml_from_obspyDMT(path): if not os.path.exists(path): return IOError('Could not find Event at {}'.format(path)) - infile = open(path, 'rb') - event_dmt = pickle.load(infile)#, fix_imports=True) + + with open(path, 'rb') as infile: + event_dmt = pickle.load(infile)#, fix_imports=True) + event_dmt['origin_id'].id = str(event_dmt['origin_id'].id) ev = Event(resource_id=event_dmt['event_id']) #small bugfix "unhashable type: 'newstr' " event_dmt['origin_id'].id = str(event_dmt['origin_id'].id) - origin = Origin(resource_id=event_dmt['origin_id'], time=event_dmt['datetime'], longitude=event_dmt['longitude'], - latitude=event_dmt['latitude'], depth=event_dmt['depth']) - mag = Magnitude(mag=event_dmt['magnitude'], magnitude_type=event_dmt['magnitude_type'], + + origin = Origin(resource_id=event_dmt['origin_id'], + time=event_dmt['datetime'], + longitude=event_dmt['longitude'], + latitude=event_dmt['latitude'], + depth=event_dmt['depth']) + mag = Magnitude(mag=event_dmt['magnitude'], + magnitude_type=event_dmt['magnitude_type'], origin_id=event_dmt['origin_id']) + ev.magnitudes.append(mag) ev.origins.append(origin) return ev