From 7d2a2899b3ef2513c17dd1a1163a2b67613d1879 Mon Sep 17 00:00:00 2001 From: kienle <kienle@passcal.nmt.edu> Date: Tue, 25 Jul 2023 11:27:26 -0600 Subject: [PATCH] Fix reading waveform data for RT130 data --- .../model/reftek/from_rt2ms/core.py | 50 ++++++++++++++++++- sohstationviewer/model/reftek/reftek.py | 5 +- .../reftek/rt130_experiment/eh_et_packet.py | 4 +- .../model/reftek/rt130_experiment/reftek.py | 6 ++- 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/sohstationviewer/model/reftek/from_rt2ms/core.py b/sohstationviewer/model/reftek/from_rt2ms/core.py index 899026a77..cb612498f 100644 --- a/sohstationviewer/model/reftek/from_rt2ms/core.py +++ b/sohstationviewer/model/reftek/from_rt2ms/core.py @@ -27,7 +27,9 @@ from sohstationviewer.model.reftek.from_rt2ms.soh_packet import Packet eh_et_payload_last_field_start = 88 eh_et_payload_last_field_size = 16 -eh_et_payload_end = eh_et_payload_last_field_start + eh_et_payload_last_field_size +# The payload start is based on the start of the payload, so we have to add 24 +# to compensate for the size of the header and extended header. +eh_et_payload_end_in_packet = eh_et_payload_last_field_start + eh_et_payload_last_field_size + 24 EH_PAYLOAD = { "station_name_extension": (35, 1, _decode_ascii), "station_name": (36, 4, _decode_ascii), @@ -47,6 +49,52 @@ class EHPacket(packet.EHPacket): data = converter(data) setattr(self, name, data) + def eh_et_info(self, nbr_DT_samples): + """ + Compile EH and ET info to write to log file. + Returns list of strings. + Formatting of strings is based on earlier version of rt2ms. + """ + info = [] + # packet_tagline1 = ("\n\n{:s} exp {:02d} bytes {:04d} {:s} ID: {:s} " + # "seq {:04d}".format(self.type.decode(), + # self.experiment_number, + # self.byte_count, + # Packet.time_tag(self.time), + # self.unit_id.decode(), + # self.packet_sequence)) + # info.append(packet_tagline1) + # if self.type.decode('ASCII') == 'EH': + # nbr_DT_samples = 0 + # info.append("\nEvent Header") + # else: + # info.append("\nEvent Trailer") + # info.append("\n event = " + str(self.event_number)) + # info.append("\n stream = " + str(self.data_stream_number + 1)) + # info.append("\n format = " + self.data_format.decode('ASCII')) + # info.append("\n stream name = " + self.stream_name) + # info.append("\n sample rate = " + str(self.sampling_rate)) + # info.append("\n trigger type = " + self.trigger_type) + trigger_time = Packet.time_tag(UTCDateTime(ns=self.trigger_time)) + # info.append("\n trigger time = " + trigger_time) + first_sample_time = Packet.time_tag(UTCDateTime(ns=self.first_sample_time)) # noqa: E501 + # info.append("\n first sample = " + first_sample_time) + # if self.last_sample_time: + # info.append("\n last sample = " + Packet.time_tag(UTCDateTime(ns=self.last_sample_time))) # noqa: E501 + # info.append("\n bit weights = " + " ".join([val for val in self.channel_adjusted_nominal_bit_weights if val])) # noqa: E501 + # info.append("\n true weights = " + " ".join([val for val in self.channel_true_bit_weights if val])) # noqa: E501 + packet_tagline2 = ("\nDAS: {:s} EV: {:04d} DS: {:d} FST = {:s} TT = " + "{:s} NS: {:d} SPS: {:.1f} ETO: 0" + .format(self.unit_id.decode(), + self.event_number, + self.data_stream_number + 1, + first_sample_time, + trigger_time, + nbr_DT_samples, + self.sampling_rate)) + info.append(packet_tagline2) + return info + class Reftek130Exception(ObsPyException): pass diff --git a/sohstationviewer/model/reftek/reftek.py b/sohstationviewer/model/reftek/reftek.py index 083cfe794..3dfe5be2b 100755 --- a/sohstationviewer/model/reftek/reftek.py +++ b/sohstationviewer/model/reftek/reftek.py @@ -7,6 +7,7 @@ from typing import Tuple, List, Union import traceback import numpy as np +from sohstationviewer.model.reftek.rt130_experiment.reftek import Reftek130 from sohstationviewer.model.reftek.from_rt2ms import ( core, soh_packet, packet) from sohstationviewer.model.reftek.log_info import LogInfo @@ -146,7 +147,7 @@ class RT130(DataTypeModel): :param path2file: absolute path to file """ try: - rt130 = core.Reftek130.from_file(path2file) + rt130 = Reftek130.from_file(path2file) except Exception: fmt = traceback.format_exc() self.track_info(f"Skip file {path2file} can't be read " @@ -230,7 +231,7 @@ class RT130(DataTypeModel): for index in ind_ehet: d = rt130._data[index] - logs = packet.EHPacket(d).eh_et_info(nbr_dt_samples) + logs = core.EHPacket(d).eh_et_info(nbr_dt_samples) if 'EHET' not in self.log_data[cur_key]: self.log_data[cur_key]['EHET'] = [] self.log_data[cur_key]['EHET'].append((d['time'], logs)) diff --git a/sohstationviewer/model/reftek/rt130_experiment/eh_et_packet.py b/sohstationviewer/model/reftek/rt130_experiment/eh_et_packet.py index 1d03b32f9..fa397432f 100644 --- a/sohstationviewer/model/reftek/rt130_experiment/eh_et_packet.py +++ b/sohstationviewer/model/reftek/rt130_experiment/eh_et_packet.py @@ -2,7 +2,7 @@ import dataclasses from sohstationviewer.model.mseed.read_mseed_experiment.mseed_helper import \ Unpacker -from sohstationviewer.model.reftek.from_rt2ms.core import eh_et_payload_end +from sohstationviewer.model.reftek.from_rt2ms.core import eh_et_payload_end_in_packet from sohstationviewer.model.reftek.rt130_experiment.reftek_helper import \ PacketHeader @@ -15,7 +15,7 @@ def read_eh_et_packet(packet: bytes, unpacker: Unpacker): extended_header = EHETExtendedHeader(event_number, data_stream_number, flags, data_format) - payload = packet[24:eh_et_payload_end] + payload = packet[24:eh_et_payload_end_in_packet] return extended_header, payload diff --git a/sohstationviewer/model/reftek/rt130_experiment/reftek.py b/sohstationviewer/model/reftek/rt130_experiment/reftek.py index a7b353457..02e9ba639 100644 --- a/sohstationviewer/model/reftek/rt130_experiment/reftek.py +++ b/sohstationviewer/model/reftek/rt130_experiment/reftek.py @@ -4,9 +4,11 @@ from typing import Callable, Dict, Union import numpy import numpy as np +from matplotlib import pyplot as plt from obspy import UTCDateTime from obspy.io.reftek.packet import PACKET_FINAL_DTYPE +from sohstationviewer.controller.util import validate_file from sohstationviewer.model.mseed.read_mseed_experiment.mseed_helper import \ Unpacker from sohstationviewer.model.reftek.rt130_experiment.dt_packet import \ @@ -15,7 +17,7 @@ from sohstationviewer.model.reftek.rt130_experiment.dt_packet import \ ) from sohstationviewer.model.reftek.rt130_experiment.eh_et_packet import \ ( - EHETPacket, read_eh_et_packet, eh_et_payload_end, + EHETPacket, read_eh_et_packet, eh_et_payload_end_in_packet, ) from sohstationviewer.model.reftek.rt130_experiment.reftek_helper import ( print_error, packet_reader_placeholder, RT130ParseError, PacketHeader, @@ -177,7 +179,7 @@ def convert_packet_to_obspy_format(packet: Union[EHETPacket, DTPacket], )) converted_packet['payload'][:4] = packet_data elif converted_packet['packet_type'] in ['EH', 'ET']: - eh_et_payload_size = eh_et_payload_end - 24 + eh_et_payload_size = eh_et_payload_end_in_packet - 24 converted_packet['payload'] = numpy.empty(1000, np.uint8) packet_data = numpy.frombuffer(packet.data, np.uint8) converted_packet['payload'][:eh_et_payload_size] = packet_data -- GitLab