def __init__(self, name, parentwidget):
        """ """
        # Initialize parent. Should be called after other 
        # initialization since the base class calls _create_content().
        super(SpectrogramTool, self).__init__(name, parentwidget)
        # Where is the tool allowed to dock in the main window.
        self.setAllowedAreas(QtCore.Qt.RightDockWidgetArea | 
                             QtCore.Qt.BottomDockWidgetArea)
        self.setBaseSize(600,600)        
        # Default position. Hide as default.
        self._parent.addDockWidget(QtCore.Qt.RightDockWidgetArea, self)
        self.hide()
        # Plot queue. Used to separate threads.
        self.spectrogram_queue = queue.Queue(maxsize=100)
        self.spectrogram_thread = None
#         self.spectrogram_active = False
        self.spectrogram_active = True
        self.last_used_spectrogram_item_id = ''
        self.last_used_window_size = -1
        self.last_used_timeresolution = -1
        self.last_used_viewpart = -1
        # Use sync object for workspaces and surveys. 
        app_core.DesktopAppSync().item_id_changed_signal.connect(self.plot_spectrogram)
        # Use sync object to clear buffers. 
        app_core.DesktopAppSync().clear_buffers_signal.connect(self.clear_buffers)
        # Also when visible.
        self.visibilityChanged.connect(self.visibility_changed)
 def _load_item_data(self):
     """ """
     self.dir_path = app_core.DesktopAppSync().get_workspace()
     self.survey_name = app_core.DesktopAppSync().get_selected_survey()
     #
     try:
         self._items_model.clear()
         h5_wavefiles = hdf54bats.Hdf5Wavefiles(self.dir_path,
                                                self.survey_name)
         from_top_node = ''
         nodes = h5_wavefiles.get_child_nodes(from_top_node)
         for node_key in sorted(nodes):
             node_dict = nodes.get(node_key, {})
             node_item_id = node_dict.get('item_id', '')
             node_item_type = node_dict.get('item_type', '')
             if node_item_type == 'wavefile':
                 item = QtGui.QStandardItem(node_item_id)
                 item.setCheckState(QtCore.Qt.Unchecked)
                 item.setCheckable(True)
                 self._items_model.appendRow(item)
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
示例#3
0
 def refresh_survey_list(self):
     """ """
     try:
         self.survey_combo.blockSignals(True)
         # Clear combo.
         self.survey_combo.clear()
         self.survey_combo.addItem('<select survey>')
         # Clear table.
         dataset_table = app_framework.DatasetTable()
         self.events_tableview.setTableModel(dataset_table)
         self.events_tableview.resizeColumnsToContents()
         # Add to combo.
         selected_survey = app_core.DesktopAppSync().get_selected_survey()
         survey_dict = app_core.DesktopAppSync().get_surveys_dict()
         index = 0
         row_index = 0
         for h5_key in sorted(survey_dict):
             h5_dict = survey_dict[h5_key]
             h5_file = h5_dict['h5_file']
             self.survey_combo.addItem(h5_file)
             row_index += 1
             if h5_file == selected_survey:
                 index = row_index
         self.survey_combo.setCurrentIndex(index)
     finally:
         self.survey_combo.blockSignals(False)
     #
     self.refresh_event_list()
示例#4
0
 def survey_changed(self):
     """ """
     if self.survey_combo.currentIndex() > 0:
         selected_survey = str(self.survey_combo.currentText())
         app_core.DesktopAppSync().set_selected_survey(selected_survey)
     else:
         app_core.DesktopAppSync().refresh()
    def plot_spectrogram(self):
        """ Use a thread to relese the user. """
        try:
            workspace = app_core.DesktopAppSync().get_workspace()
            survey = app_core.DesktopAppSync().get_selected_survey()
            item_id = app_core.DesktopAppSync().get_selected_item_id(item_type='wavefile')
            item_metadata = app_core.DesktopAppSync().get_metadata_dict()
            item_title = item_metadata.get('item_title', '')
            # Don't redraw the same spectrogram.
            if (item_id == self.last_used_spectrogram_item_id) and \
               (int(self.windowsize_combo.currentText()) == self.last_used_window_size) and \
               (self.timeresolution_combo.currentText() == self.last_used_timeresolution) and \
               (self.viewpart_combo.currentText() == self.last_used_viewpart):
                return
            #
            try:
                # Check if thread is running.
                if not self.spectrogram_thread:
#                     self.spectrogram_active = True
                    self.spectrogram_thread = threading.Thread(target = self.run_spectrogram_plotter, 
                                                               args=())
                    self.spectrogram_thread.start()
            
            except Exception as e:
                debug_info = self.__class__.__name__ + ', row  ' + str(sys._getframe().f_lineno)
                app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
            #
            spectrogram_dict = {}
            spectrogram_dict['workspace'] = workspace
            spectrogram_dict['survey'] = survey
            spectrogram_dict['item_id'] = item_id
            spectrogram_dict['item_title'] = item_title
            #
            if self.spectrogram_queue.qsize() >= 1:
#                 app_utils.Logging().info('Items removed from the spectrogram plotting queue.')
                while self.spectrogram_queue.qsize() >= 1:
                    try:
                        self.spectrogram_queue.get_nowait()
                    except queue.Empty:
                        break # Exits while loop.
            #
#             print('- To queue: ', item_id)
            self.spectrogram_queue.put(spectrogram_dict)
            #
            self.last_used_spectrogram_item_id = item_id
            self.last_used_window_size = int(self.windowsize_combo.currentText())
            self.last_used_timeresolution = self.timeresolution_combo.currentText()
            self.last_used_viewpart = self.viewpart_combo.currentText()


        
        except Exception as e:
            debug_info = self.__class__.__name__ + ', row  ' + str(sys._getframe().f_lineno)
            app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
示例#6
0
    def __init__(self, name, parentwidget):
        """ """
        self.last_used_dir_path = None
        # Initialize parent. Should be called after other
        # initialization since the base class calls _create_content().
        super().__init__(name, parentwidget)

        # Use sync object for workspaces and surveys.
        app_core.DesktopAppSync().workspace_changed_signal.connect(
            self.refresh_survey_list)
        app_core.DesktopAppSync().survey_changed_signal.connect(
            self.refresh_survey_list)
        #
        self.refresh_survey_list()
 def update_survey_list(self):
     """ """
     selected_survey = app_core.DesktopAppSync().get_selected_survey()
     survey_dict = app_core.DesktopAppSync().get_surveys_dict()
     self.name_combo.clear()
     self.name_combo.addItem('<select>')
     index = 0
     for row_index, h5_key in enumerate(sorted(survey_dict)):
         h5_dict = survey_dict[h5_key]
         h5_file = h5_dict['h5_file']
         self.name_combo.addItem(h5_file)
         if h5_file == selected_survey:
             index = row_index + 1
     self.name_combo.setCurrentIndex(index)
    def __init__(self, name, parentwidget):
        """ """
        # Initialize parent. Should be called after other
        # initialization since the base class calls _create_content().
        super().__init__(name, parentwidget)
        #
        # Where is the tool allowed to dock in the main window.
        self.setAllowedAreas(QtCore.Qt.RightDockWidgetArea
                             | QtCore.Qt.BottomDockWidgetArea)
        self.setBaseSize(600, 600)
        # Default position. Hide as default.
        self._parent.addDockWidget(QtCore.Qt.RightDockWidgetArea, self)
        self.hide()
        # Plot map queue. Used to separate threads.
        self.plot_map_queue = queue.Queue(maxsize=2)  # Note: Small buffer.
        self.plot_map_thread = None
        #         self.plot_map_active = False
        self.plot_map_active = True
        self.last_used_latitude = 0.0
        self.last_used_longitude = 0.0
        self.last_used_degree_range = 0.0

        # Use sync object for workspaces and surveys.
        app_core.DesktopAppSync().item_id_changed_signal.connect(self.plot_map)
        # Also when visible.
        self.visibilityChanged.connect(self.visibility_changed)

        # Map init.
        tilemapbase.init(create=True)
        ###        self.osm_tiles = tilemapbase.tiles.OSM
        self.osm_tiles = tilemapbase.tiles.build_OSM()
 def _set_filename(self, _index):
     """ """
     survey_name = str(self.name_combo.currentText())
     survey_dict = app_core.DesktopAppSync().get_surveys_dict()
     survey_title = survey_dict.get(survey_name, {}).get('h5_title', '')
     if survey_title and (self.name_combo.currentIndex() > 0):
         self._surveytitle_edit.setText(survey_title)
     else:
         self._surveytitle_edit.setText('')
示例#10
0
 def update_event_list(self):
     """ """
     selected_event_id = app_core.DesktopAppSync().get_selected_item_id(
         item_type='event')
     events_dict = app_core.DesktopAppSync().get_events_dict()
     self.event_combo.clear()
     self.event_combo.addItem('<select>')
     index = 0
     row_index = 0
     for key in sorted(events_dict.keys()):
         item_dict = events_dict.get(key, '')
         item_type = item_dict.get('item_type', '')
         if item_type == 'event':
             self.event_combo.addItem(key)
             row_index += 1
             if key == selected_event_id:
                 index = row_index
     self.event_combo.setCurrentIndex(index)
    def plot_map(self):
        """ Use a thread to relese the user. """
        try:
            workspace = app_core.DesktopAppSync().get_workspace()
            survey = app_core.DesktopAppSync().get_selected_survey()
            item_id = app_core.DesktopAppSync().get_selected_item_id(
                item_type='wavefile')
            item_metadata = app_core.DesktopAppSync().get_metadata_dict()
            item_title = item_metadata.get('item_title', '')
            #
            try:
                # Check if thread is running.
                if not self.plot_map_thread:
                    #                     self.plot_map_active = True
                    self.plot_map_thread = threading.Thread(
                        target=self.run_map_plotter, args=())
                    self.plot_map_thread.start()

            except Exception as e:
                debug_info = self.__class__.__name__ + ', row  ' + str(
                    sys._getframe().f_lineno)
                app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                          str(e))

            plot_map_dict = {}
            plot_map_dict['workspace'] = workspace
            plot_map_dict['survey'] = survey
            plot_map_dict['item_id'] = item_id
            plot_map_dict['item_title'] = item_title
            #
            while self.plot_map_queue.qsize() > 1:
                try:
                    self.plot_map_queue.get_nowait()
                except queue.Empty:
                    break  # Exits while loop.
            #
            self.plot_map_queue.put(plot_map_dict)

        except Exception as e:
            debug_info = self.__class__.__name__ + ', row  ' + str(
                sys._getframe().f_lineno)
            app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                      str(e))
 def refresh_survey_list(self):
     """ """
     try:
         self.surveys_tableview.blockSignals(True)
         self.surveys_tableview.getSelectionModel().blockSignals(True)
         self.workspacedir_edit.blockSignals(True)
         #
         selected_workspace = app_core.DesktopAppSync().get_workspace()
         h5_survey_dict = app_core.DesktopAppSync().get_surveys_dict()
         h5_selected_survey = app_core.DesktopAppSync().get_selected_survey(
         )
         #
         self.workspacedir_edit.setText(selected_workspace)
         #
         dataset_table = app_framework.DatasetTable()
         header = ['h5_file', 'h5_title', 'h5_filepath']
         header_cap = []
         for item in header:
             header_cap.append(item.capitalize().replace('_', ' '))
         dataset_table.set_header(header_cap)
         #
         selected_survey_index = None
         for index, key in enumerate(sorted(h5_survey_dict)):
             h5_dict = h5_survey_dict[key]
             row = []
             for head in header:
                 row.append(h5_dict.get(head, ''))
             dataset_table.append_row(row)
             h5_file = h5_dict.get('h5_file', None)
             if h5_file and (h5_file == h5_selected_survey):
                 selected_survey_index = index
         #
         self.surveys_tableview.setTableModel(dataset_table)
         self.surveys_tableview.resizeColumnsToContents()
         #
         if selected_survey_index is not None:
             qt_index = self.surveys_tableview.model().index(
                 selected_survey_index, 0)
             self.surveys_tableview.setCurrentIndex(qt_index)
     finally:
         self.surveys_tableview.blockSignals(False)
         self.surveys_tableview.getSelectionModel().blockSignals(False)
         self.workspacedir_edit.blockSignals(False)
 def refresh_survey_list(self):
     """ """
     try:
         self.survey_combo.blockSignals(True)
         self.survey_combo.clear()
         self.survey_combo.addItem('<select survey>')
         selected_survey = app_core.DesktopAppSync().get_selected_survey()
         survey_dict = app_core.DesktopAppSync().get_surveys_dict()
         index = 0
         for row_index, h5_key in enumerate(sorted(survey_dict)):
             h5_dict = survey_dict[h5_key]
             h5_file = h5_dict['h5_file']
             self.survey_combo.addItem(h5_file)
             if h5_file == selected_survey:
                 index = row_index + 1
         self.survey_combo.setCurrentIndex(index)
     finally:
         self.survey_combo.blockSignals(False)
     #
     self.refresh_wavefile_list()
示例#14
0
 def __init__(self, parentwidget):
     """ """
     super().__init__(parentwidget)
     self.setWindowTitle("New event")
     self.parentwidget = parentwidget
     self.setLayout(self.content())
     #
     self.dir_path = app_core.DesktopAppSync().get_workspace()
     self.survey_name = str(self.parentwidget.survey_combo.currentText())
     #
     self.enable_buttons()
 def __init__(self, name, parentwidget):
     """ """
     self._last_used_dir_path = None
     # Initialize parent. Should be called after other
     # initialization since the base class calls _create_content().
     super(ScannerActivity, self).__init__(name, parentwidget)
     #
     self._load_item_data()
     # Use sync object for workspaces and surveys.
     #         app_core.DesktopAppSync().workspace_changed_signal.connect(self._load_item_data)
     app_core.DesktopAppSync().survey_changed_signal.connect(
         self._load_item_data)
示例#16
0
 def __init__(self, parentwidget):
     """ """
     super(DeleteDialog, self).__init__(parentwidget)
     self.setWindowTitle("Delete events and detectors")
     self.parentwidget = parentwidget
     self.setLayout(self.content())
     self.setMinimumSize(500, 500)
     #
     self.dir_path = app_core.DesktopAppSync().get_workspace()
     self.survey_name = str(self.parentwidget.survey_combo.currentText())
     #
     self.load_item_data()
示例#17
0
    def refresh_event_list(self):
        """ """
        try:
            self.events_tableview.blockSignals(True)
            self.events_tableview.getSelectionModel().blockSignals(True)
            #
            if self.survey_combo.currentIndex() == 0:
                dataset_table = app_framework.DatasetTable()
                self.events_tableview.setTableModel(dataset_table)
                self.events_tableview.resizeColumnsToContents()
                return

            dir_path = app_core.DesktopAppSync().get_workspace()
            survey_name = str(self.survey_combo.currentText())
            if (not dir_path) or (not survey_name):
                dataset_table = app_framework.DatasetTable()
                self.events_tableview.setTableModel(dataset_table)
                self.events_tableview.resizeColumnsToContents()
                return
            #
            events_dict = app_core.DesktopAppSync().get_events_dict()

            dataset_table = app_framework.DatasetTable()
            #             dataset_table.set_header(['item_title', 'item_type', 'item_id'])
            dataset_table.set_header(['Title', 'Type', 'Item id'])
            for key in events_dict.keys():
                item_dict = events_dict.get(key, {})
                item_type = item_dict.get('item_type', '')
                if item_type in ['event', 'detector']:
                    row = []
                    row.append(item_dict.get('item_title', ''))
                    row.append(item_dict.get('item_type', ''))
                    row.append(item_dict.get('item_id', ''))
                    dataset_table.append_row(row)
            #
            self.events_tableview.setTableModel(dataset_table)
            self.events_tableview.resizeColumnsToContents()
        finally:
            self.events_tableview.blockSignals(False)
            self.events_tableview.getSelectionModel().blockSignals(False)
示例#18
0
 def __init__(self, parentwidget):
     """ """
     super().__init__(parentwidget)
     self.setWindowTitle("Copy event or detector")
     self.parentwidget = parentwidget
     self.setLayout(self.content())
     #
     self.itemtitle_edit.setFocus()
     #
     self.dir_path = app_core.DesktopAppSync().get_workspace()
     self.survey_name = str(self.parentwidget.survey_combo.currentText())
     #
     self.update_item_list()
示例#19
0
 def selected_item_changed(self):
     """ """
     try:
         modelIndex = self.events_tableview.currentIndex()
         if modelIndex.isValid():
             item_id = str(self.events_tableview.model().index(
                 modelIndex.row(), 2).data())
             # Sync.
             app_core.DesktopAppSync().set_selected_item_id(item_id)
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
 def update_event_list(self):
     """ """
     try:
         selected_detector_id = app_core.DesktopAppSync(
         ).get_selected_item_id(item_type='detector')
         events_dict = app_core.DesktopAppSync().get_events_dict()
         self.detector_combo.clear()
         self.detector_combo.addItem('<select>')
         index = 0
         row_index = 0
         for key in sorted(events_dict.keys()):
             item_dict = events_dict.get(key, '')
             item_type = item_dict.get('item_type', '')
             if item_type == 'detector':
                 self.detector_combo.addItem(key)
                 row_index += 1
                 if key == selected_detector_id:
                     index = row_index
         self.detector_combo.setCurrentIndex(index)
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
 def _set_filename(self, _index):
     """ """
     try:
         survey_name = str(self.name_combo.currentText())
         survey_dict = app_core.DesktopAppSync().get_surveys_dict()
         survey_title = survey_dict.get(survey_name, {}).get('h5_title', '')
         if survey_title and (self.name_combo.currentIndex() > 0):
             self._surveytitle_edit.setText(survey_title)
         else:
             self._surveytitle_edit.setText('')
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
 def update_metadata(self):
     """ """
     survey = app_core.DesktopAppSync().get_selected_survey()
     item_id = app_core.DesktopAppSync().get_selected_item_id()
     metadata_dict = app_core.DesktopAppSync().get_metadata_dict()
     item_title = metadata_dict.get('item_title', '')
     #
     self.metadata_list.clear()
     if not item_id:
         self.survey_edit.setText('')
         self.itemid_edit.setText('')
         self.title_edit.setText('')
         return
     #
     self.survey_edit.setText(survey)
     self.itemid_edit.setText(item_id)
     self.title_edit.setText(item_title)
     #
     for key in sorted(metadata_dict):
         text = key + ': ' + ' ' * (16 - len(key)) + '\t' + str(
             metadata_dict.get(key, ''))
         self.metadata_list.addItem(text)
     #
     return
 def _create_survey(self):
     """ """
     try:
         try:
             dir_path = app_core.DesktopAppSync().get_workspace()
             name = str(self._surveytitle_edit.text())
             filename = str(self._surveyfilename_edit.text())
             ws = hdf54bats.Hdf5Workspace(dir_path, create_ws=True)
             ws.create_h5(filename, title=name)
         finally:
             self.accept()  # Close dialog box.
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
 def selected_survey_changed(self):
     """ """
     try:
         modelIndex = self.surveys_tableview.currentIndex()
         if modelIndex.isValid():
             h5_survey = self.surveys_tableview.model().index(
                 modelIndex.row(), 0).data()
             #
             time.sleep(0.1)
             # Sync.
             app_core.DesktopAppSync().set_selected_survey(h5_survey)
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
 def _load_survey_data(self):
     """ """
     try:
         self._surveys_model.clear()
         surveys_dict = app_core.DesktopAppSync().get_surveys_dict()
         for h5_file in sorted(surveys_dict.keys()):
             item = QtGui.QStandardItem(h5_file)
             item.setCheckState(QtCore.Qt.Unchecked)
             item.setCheckable(True)
             self._surveys_model.appendRow(item)
     #
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
示例#26
0
 def load_item_data(self):
     """ """
     try:
         self.items_model.clear()
         events_dict = app_core.DesktopAppSync().get_events_dict()
         for key in sorted(events_dict.keys()):
             item_dict = events_dict.get(key, '')
             item_type = item_dict.get('item_type', '')
             if item_type in ['event', 'detector']:
                 item = QtGui.QStandardItem(key)
                 item.setCheckState(QtCore.Qt.Unchecked)
                 item.setCheckable(True)
                 self.items_model.appendRow(item)
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
 def _create_survey(self):
     """ """
     if self.name_combo.currentIndex() > 0:
         try:
             try:
                 dir_path = app_core.DesktopAppSync().get_workspace()
                 name_combo = self.name_combo.currentText()
                 name = self._surveytitle_edit.text()
                 filename = self._surveyfilename_edit.text()
                 ws = hdf54bats.Hdf5Workspace(dir_path)
                 ws.copy_h5(name_combo, filename)
                 ws.set_h5_title(filename, name)
             finally:
                 self.accept()  # Close dialog box.
         except Exception as e:
             debug_info = self.__class__.__name__ + ', row  ' + str(
                 sys._getframe().f_lineno)
             app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                       str(e))
 def __init__(self, name, parentwidget):
     """ """
     self.spectrogram_thread = None
     self.spectrogram_thread_active = False
     # Initialize parent. Should be called after other
     # initialization since the base class calls _create_content().
     super().__init__(name, parentwidget)
     #
     # Where is the tool allowed to dock in the main window.
     self.setAllowedAreas(QtCore.Qt.RightDockWidgetArea
                          | QtCore.Qt.BottomDockWidgetArea)
     self.setBaseSize(600, 600)
     # Default position. Hide as default.
     self._parent.addDockWidget(QtCore.Qt.RightDockWidgetArea, self)
     self.hide()
     # Use sync object for workspaces and surveys.
     app_core.DesktopAppSync().item_id_changed_signal.connect(
         self.update_metadata)
     self.update_metadata()
 def _delete_marked_surveys(self):
     """ """
     try:
         try:
             dir_path = app_core.DesktopAppSync().get_workspace()
             ws = hdf54bats.Hdf5Workspace(dir_path)
             for rowindex in range(self._surveys_model.rowCount()):
                 item = self._surveys_model.item(rowindex, 0)
                 if item.checkState() == QtCore.Qt.Checked:
                     survey_filename = str(item.text())
                     ws.delete_h5(survey_filename)
         finally:
             self.accept()  # Close dialog box.
     #
     except Exception as e:
         debug_info = self.__class__.__name__ + ', row  ' + str(
             sys._getframe().f_lineno)
         app_utils.Logging().error('Exception: (' + debug_info + '): ' +
                                   str(e))
         self.accept()  # Close dialog box.
示例#30
0
 def refresh(self):
     """ """
     app_core.DesktopAppSync().refresh()