diff --git a/sohstationviewer/controller/processing.py b/sohstationviewer/controller/processing.py index 7eaa504cb3dca8afc1501aad5cd3aa0c6d4ee284..28f3c17269fb45098332e490e9328ce1971051ba 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 324a558f42115fffafe9e4cfcd1eadbbfcd77593..188d8940e4094b65145ca64c9b497c7011eecf93 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 35f04bcd34a07d60932bef010f854f5b9335b601..daf859445e136b43eb58ae121f3a6ac91ac3617b 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 289eb5bbdfc516f1a3b6d925e15c507415359b75..11144a43e35a534136ddd40627cf67ff7d0eafd2 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):