From b45aba9324c8c621615d3c07e9b24009a23f47f4 Mon Sep 17 00:00:00 2001 From: Lan <ldam@passcal.nmt.edu> Date: Tue, 9 May 2023 11:09:42 -0600 Subject: [PATCH] use rt130_waveform_data_req to decite to /not to create rt130's waveform_data; fix bug to create Event DS when select All Waveform Channels --- sohstationviewer/model/data_loader.py | 8 ++- sohstationviewer/model/data_type_model.py | 3 ++ .../model/handling_data_reftek.py | 5 +- sohstationviewer/model/reftek/log_info.py | 51 ++++++++++--------- sohstationviewer/model/reftek/reftek.py | 14 ++++- 5 files changed, 51 insertions(+), 30 deletions(-) diff --git a/sohstationviewer/model/data_loader.py b/sohstationviewer/model/data_loader.py index f6a5e0db3..63320fe6b 100644 --- a/sohstationviewer/model/data_loader.py +++ b/sohstationviewer/model/data_loader.py @@ -31,7 +31,7 @@ class DataLoaderWorker(QtCore.QObject): req_soh_chans: List[str] = [], read_start: float = 0, read_end: float = constants.HIGHEST_INT, include_mp123: bool = False, include_mp456: bool = False, - parent_thread=None): + rt130_waveform_data_req: bool = False, parent_thread=None): super().__init__() self.data_type = data_type self.tracking_box = tracking_box @@ -43,6 +43,7 @@ class DataLoaderWorker(QtCore.QObject): self.read_end = read_end self.include_mp123 = include_mp123 self.include_mp456 = include_mp456 + self. rt130_waveform_data_req = rt130_waveform_data_req self.parent_thread = parent_thread # display_tracking_info updates a QtWidget, which can only be done in # the read. Since self.run runs in a background thread, we need to use @@ -71,6 +72,7 @@ class DataLoaderWorker(QtCore.QObject): read_start=self.read_start, read_end=self.read_end, include_mp123zne=self.include_mp123, include_mp456uvw=self.include_mp456, + rt130_waveform_data_req=self.rt130_waveform_data_req, creator_thread=self.parent_thread, notification_signal=self.notification, pause_signal=self.button_dialog @@ -114,7 +116,8 @@ class DataLoader(QtCore.QObject): req_soh_chans: List[str] = [], read_start: float = 0, read_end: float = constants.HIGHEST_INT, include_mp123: bool = False, - include_mp456: bool = False): + include_mp456: bool = False, + rt130_waveform_data_req: bool = False): """ Initialize the data loader. Construct the thread and worker and connect them together. Separated from the actual loading of the data to allow @@ -150,6 +153,7 @@ class DataLoader(QtCore.QObject): read_end=read_end, include_mp123=include_mp123, include_mp456=include_mp456, + rt130_waveform_data_req=rt130_waveform_data_req, parent_thread=self.thread ) diff --git a/sohstationviewer/model/data_type_model.py b/sohstationviewer/model/data_type_model.py index df4ccf37f..9eddc4a0d 100644 --- a/sohstationviewer/model/data_type_model.py +++ b/sohstationviewer/model/data_type_model.py @@ -43,6 +43,7 @@ class DataTypeModel(): read_end: Optional[float] = UTCDateTime().timestamp, include_mp123zne: bool = False, include_mp456uvw: bool = False, + rt130_waveform_data_req: bool = False, creator_thread: Optional[QtCore.QThread] = None, notification_signal: Optional[QtCore.Signal] = None, pause_signal: Optional[QtCore.Signal] = None, @@ -60,6 +61,7 @@ class DataTypeModel(): :param read_end: requested end time to read :param include_mp123zne: if mass position channels 1,2,3 are requested :param include_mp456uvw: if mass position channels 4,5,6 are requested + :param rt130_waveform_data_req: flag for RT130 to read waveform data :param creator_thread: the thread the current DataTypeModel instance is being created in. If None, the DataTypeModel instance is being created in the main thread @@ -78,6 +80,7 @@ class DataTypeModel(): self.read_end = read_end self.include_mp123zne = include_mp123zne self.include_mp456uvw = include_mp456uvw + self.rt130_waveform_data_req = rt130_waveform_data_req if creator_thread is None: err_msg = ( 'A signal is not None while running in main thread' diff --git a/sohstationviewer/model/handling_data_reftek.py b/sohstationviewer/model/handling_data_reftek.py index f7312c86d..33016a02a 100644 --- a/sohstationviewer/model/handling_data_reftek.py +++ b/sohstationviewer/model/handling_data_reftek.py @@ -47,7 +47,10 @@ def check_reftek_header( if chan_id not in cur_data_dict: cur_data_dict[chan_id] = {'tracesInfo': [], 'samplerate': samplerate} - + if trace.stats.npts == 0: + # this trace isn't available to prevent bug when creating memmap + # with no data + continue if (starttime <= trace.stats['starttime'] <= endtime or starttime <= trace.stats['endtime'] <= endtime): avail_trace_indexes.append(index) diff --git a/sohstationviewer/model/reftek/log_info.py b/sohstationviewer/model/reftek/log_info.py index c242f822a..6520c695d 100644 --- a/sohstationviewer/model/reftek/log_info.py +++ b/sohstationviewer/model/reftek/log_info.py @@ -68,21 +68,23 @@ class LogInfo(): # TT =2001:253:15:13:59:768 NS: 144005 SPS: 40 ETO: 0 parts = line.split() data_stream = int(parts[5]) - if data_stream not in self.parent.req_data_streams: - return (0, 0) - try: - if parts[8].startswith("00:000"): - if parts[11].startswith("00:000"): - return -1, 0 - epoch, _ = get_time_6(parts[11]) + if (self.req_data_streams == ['*'] or + data_stream in self.req_data_streams): + try: + if parts[8].startswith("00:000"): + if parts[11].startswith("00:000"): + return -1, 0 + epoch, _ = get_time_6(parts[11]) + else: + epoch, _ = get_time_6(parts[8]) + except AttributeError: + self.parent.processing_log.append((line, LogType.ERROR)) + return False + if epoch > 0: + self.min_epoch = min(epoch, self.min_epoch) + self.max_epoch = max(epoch, self.max_epoch) else: - epoch, _ = get_time_6(parts[8]) - except AttributeError: - self.parent.processing_log.append(line, LogType.ERROR) - return False - if epoch > 0: - self.min_epoch = min(epoch, self.min_epoch) - self.max_epoch = max(epoch, self.max_epoch) + return 0, 0 else: return 0, 0 return epoch, data_stream @@ -347,18 +349,17 @@ class LogInfo(): line = line.upper() if 'FST' in line: ret = self.read_evt(line) - if ret: + if ret is not False: epoch, data_stream = ret - if data_stream in self.req_data_streams: - if epoch > 0: - chan_name = 'Event DS%s' % data_stream - self.add_chan_info(chan_name, epoch, 1, idx) - elif epoch == 0: - self.parent.processing_log.append( - line, LogType.WARNING) - else: - self.parent.processing_log.append( - line, LogType.ERROR) + if epoch > 0: + chan_name = 'Event DS%s' % data_stream + self.add_chan_info(chan_name, epoch, 1, idx) + elif epoch == 0: + self.parent.processing_log.append( + (line, LogType.WARNING)) + else: + self.parent.processing_log.append( + (line, LogType.ERROR)) elif line.startswith("STATE OF HEALTH"): epoch = self.read_sh_header(line) diff --git a/sohstationviewer/model/reftek/reftek.py b/sohstationviewer/model/reftek/reftek.py index f7fa193d4..d55d5fd09 100755 --- a/sohstationviewer/model/reftek/reftek.py +++ b/sohstationviewer/model/reftek/reftek.py @@ -35,6 +35,11 @@ class RT130(DataTypeModel): """ self.req_data_streams: List[Union[int, str]] = self.req_wf_chans """ + rt130_waveform_data_req: flag to create waveform data according to + req_data_stream + """ + self.rt130_waveform_data_req: bool = kwarg['rt130_waveform_data_req'] + """ found_data_streams: list of data streams found to help inform user why the selected data streams don't show up """ @@ -189,7 +194,10 @@ class RT130(DataTypeModel): cur_key = (rt130._data[0]['unit_id'].decode(), f"{rt130._data[0]['experiment_number']}") self.populate_cur_key_for_all_data(cur_key) - self.get_ehet_in_log_data(rt130, cur_key) + if data_stream != 9: + # don't get event info for mass position + self.populate_data_stream(cur_key, str(data_stream)) + self.get_ehet_in_log_data(rt130, cur_key) self.get_mass_pos_data_and_waveform_data(rt130, data_stream, cur_key) def get_ehet_in_log_data(self, rt130: core.Reftek130, @@ -230,8 +238,10 @@ class RT130(DataTypeModel): """ if data_stream == 9: cur_data_dict = self.mass_pos_data[cur_key] - else: + elif self.rt130_waveform_data_req: cur_data_dict = self.waveform_data[cur_key] + else: + return avail_trace_indexes = check_reftek_header( rt130, cur_key, self.read_start, self.read_end, -- GitLab