From 4067cacda714fba402fd90eda4aa0897ef59d85c Mon Sep 17 00:00:00 2001 From: ldam <ldam@passcal.nmt.edu> Date: Thu, 20 Jul 2023 11:51:07 -0600 Subject: [PATCH] handle no known data detected --- sohstationviewer/controller/processing.py | 5 +- sohstationviewer/view/main_window.py | 86 +++++++++++-------- .../plotting/gps_plot/extract_gps_data.py | 16 +++- tests/test_controller/test_processing.py | 5 +- 4 files changed, 70 insertions(+), 42 deletions(-) diff --git a/sohstationviewer/controller/processing.py b/sohstationviewer/controller/processing.py index 7eaa504cb..28f3c1726 100644 --- a/sohstationviewer/controller/processing.py +++ b/sohstationviewer/controller/processing.py @@ -186,8 +186,9 @@ def detect_data_type(list_of_dir: List[str]) -> Optional[str]: raise Exception(msg) elif data_type_list == {'Unknown'}: - msg = ("There are no known data detected.\n" - "Please select different folder(s).") + msg = ("There are no known data detected.\n\n" + "Do you want to cancel to select different folder(s)\n" + "Or continue to read any available mseed file?") raise Exception(msg) return list(dir_data_type_dict.values())[0][0] diff --git a/sohstationviewer/view/main_window.py b/sohstationviewer/view/main_window.py index 324a558f4..188d8940e 100755 --- a/sohstationviewer/view/main_window.py +++ b/sohstationviewer/view/main_window.py @@ -386,31 +386,41 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow): :rtype: List[str, int] """ req_wf_chans = [] - - if self.all_wf_chans_check_box.isChecked(): - req_mseed_wildcards = ['*'] - req_dss = ['*'] # all data stream - else: - req_dss = [] - req_mseed_wildcards = [] - for idx, ds_checkbox in enumerate(self.ds_check_boxes): - if ds_checkbox.isChecked(): - req_dss.append(idx + 1) - if self.mseed_wildcard_edit.text().strip() != "": - req_mseed_wildcards = self.mseed_wildcard_edit.text( - ).split(",") - - if self.data_type == 'RT130': - req_wf_chans = req_dss - if req_dss != ['*'] and req_mseed_wildcards != []: - msg = 'MSeed Wildcards will be ignored for RT130.' - self.processing_log.append((msg, LogType.WARNING)) - else: - req_wf_chans = req_mseed_wildcards - if req_mseed_wildcards != ['*'] and req_dss != []: - msg = ('Checked data streams will be ignored for ' - 'none-RT130 data type.') - self.processing_log.append((msg, LogType.WARNING)) + if ((self.all_wf_chans_check_box.isChecked() + or [ds for ds in self.ds_check_boxes if ds.isChecked()] != [] + or self.mseed_wildcard_edit.text().strip() != "") + and not self.tps_check_box.isChecked() + and not self.raw_check_box.isChecked()): + raise Exception( + "Waveform channels have been selected but there are none of " + "TPS or RAW checkboxes checked.\nPlease clear the " + "selection of waveform if you don't want to display the data.") + + if self.tps_check_box.isChecked() or self.raw_check_box.isChecked(): + if self.all_wf_chans_check_box.isChecked(): + req_mseed_wildcards = ['*'] + req_dss = ['*'] # all data stream + else: + req_dss = [] + req_mseed_wildcards = [] + for idx, ds_checkbox in enumerate(self.ds_check_boxes): + if ds_checkbox.isChecked(): + req_dss.append(idx + 1) + if self.mseed_wildcard_edit.text().strip() != "": + req_mseed_wildcards = self.mseed_wildcard_edit.text( + ).split(",") + + if self.data_type == 'RT130': + req_wf_chans = req_dss + if req_dss != ['*'] and req_mseed_wildcards != []: + msg = 'MSeed Wildcards will be ignored for RT130.' + self.processing_log.append((msg, LogType.WARNING)) + else: + req_wf_chans = req_mseed_wildcards + if req_mseed_wildcards != ['*'] and req_dss != []: + msg = ('Checked data streams will be ignored for ' + 'none-RT130 data type.') + self.processing_log.append((msg, LogType.WARNING)) return req_wf_chans def get_requested_soh_chan(self): @@ -530,13 +540,6 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow): else: self.min_gap = None - # if waveform channels are selected, Event DS will be read from EH/ET - # header - # rt130_waveform_data_req is to read data for wave form data - rt130_waveform_data_req = False - if self.raw_check_box.isChecked() or self.tps_check_box.isChecked(): - rt130_waveform_data_req = True - if self.mseed_wildcard_edit.text().strip() != '': try: check_chan_wildcards_format(self.mseed_wildcard_edit.text()) @@ -559,8 +562,19 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow): try: self.read_from_file_list() except Exception as e: - QtWidgets.QMessageBox.warning(self, "Select directory", str(e)) - return + if 'no known data detected': + msgbox = QtWidgets.QMessageBox() + msgbox.setWindowTitle('Do you want to continue?') + msgbox.setText(str(e)) + msgbox.addButton(QtWidgets.QMessageBox.Cancel) + msgbox.addButton('Continue', QtWidgets.QMessageBox.YesRole) + result = msgbox.exec_() + if result == QtWidgets.QMessageBox.Cancel: + return + self.data_type == 'Unknown' + else: + QtWidgets.QMessageBox.warning(self, "Select directory", str(e)) + return dir_size = sum(get_dir_size(str(dir))[0] for dir in self.dir_names) if dir_size > constants.BIG_FILE_SIZE: @@ -605,8 +619,7 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow): read_start=self.start_tm, read_end=self.end_tm, include_mp123=self.mass_pos_123zne_check_box.isChecked(), - include_mp456=self.mass_pos_456uvw_check_box.isChecked(), - rt130_waveform_data_req=rt130_waveform_data_req + include_mp456=self.mass_pos_456uvw_check_box.isChecked() ) self.data_loader.worker.finished.connect(self.data_loaded) @@ -718,7 +731,6 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow): """ if self.has_problem: return - self.clear_plots() self.is_plotting_soh = True d_obj = self.data_object diff --git a/sohstationviewer/view/plotting/gps_plot/extract_gps_data.py b/sohstationviewer/view/plotting/gps_plot/extract_gps_data.py index 35f04bcd3..daf859445 100644 --- a/sohstationviewer/view/plotting/gps_plot/extract_gps_data.py +++ b/sohstationviewer/view/plotting/gps_plot/extract_gps_data.py @@ -434,8 +434,22 @@ def gps_data_rt130(data_obj: RT130) -> List[GPSPoint]: @extract_gps_data.register(MSeed) def gps_data_mseed(data_obj: MSeed) -> List[GPSPoint]: - data_type = detect_data_type([data_obj.dir]) + try: + data_type = detect_data_type([data_obj.dir]) + except Exception: + data_type = 'Unknown' + if data_type == 'Q330': return extract_gps_data_q330(data_obj) elif data_type == 'Centaur' or data_type == 'Pegasus': return extract_gps_data_pegasus_centaur(data_obj, data_type) + else: + # data_type = "Unknown" + try: + gps_data = extract_gps_data_q330(data_obj) + except KeyError: + try: + gps_data = extract_gps_data_pegasus_centaur(data_obj, data_type) + except AttributeError: + return [] + return gps_data diff --git a/tests/test_controller/test_processing.py b/tests/test_controller/test_processing.py index 289eb5bbd..11144a43e 100644 --- a/tests/test_controller/test_processing.py +++ b/tests/test_controller/test_processing.py @@ -370,8 +370,9 @@ class TestDetectDataType(TestCase): detect_data_type([self.dir1.name]) self.assertEqual( str(context.exception), - "There are no known data detected.\n" - "Please select different folder(s).") + "There are no known data detected.\n\n" + "Do you want to cancel to select different folder(s)\n" + "Or continue to read any available mseed file?") class TestGetDataTypeFromFile(TestCase): -- GitLab