From 1e96e11f04f65e4f8f9ddf92b3f574c1f6427709 Mon Sep 17 00:00:00 2001 From: Anthony DGJ Date: Wed, 5 Feb 2025 16:57:18 -0500 Subject: [PATCH 1/2] Add FDSN miniSEED 3 format --- scientific/seismology/miniseed3.ksy | 140 ++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 scientific/seismology/miniseed3.ksy diff --git a/scientific/seismology/miniseed3.ksy b/scientific/seismology/miniseed3.ksy new file mode 100644 index 000000000..97725450c --- /dev/null +++ b/scientific/seismology/miniseed3.ksy @@ -0,0 +1,140 @@ +meta: + id: miniseed3 + title: "MiniSEED 3 Data Format" + file-extension: + - mseed3 + - mseed + license: MIT + encoding: ascii + endian: le +doc: | + MiniSEED 3 is a binary data format defined by the International Federation of Digital + Seismograph Networks (FDSN) for data collection, archiving and exchange of seismological data. +doc-ref: https://docs.fdsn.org/projects/miniseed3 +seq: + - id: data_record + type: data_record +types: + data_record: + doc-ref: https://docs.fdsn.org/projects/miniseed3/en/latest/definition.html#description-of-record-fields + seq: + - id: record_header_indicator + contents: "MS" + - id: format_version + type: u1 + - id: flags + type: miniseed_flags + - id: record_start_time + type: miniseed_time + - id: data_payload_encoding + type: u1 + enum: miniseed_data_encoding + - id: sample_rate_or_period + type: f8 + - id: number_of_samples + type: u4 + - id: crc_of_the_record + type: u4 + - id: data_publication_version + type: u1 + - id: length_of_identifier + type: u1 + - id: length_of_extra_headers + type: u2 + - id: length_of_data_payload + type: u4 + - id: source_identifier + type: str + size: length_of_identifier + encoding: ASCII + - id: extra_header_fields + type: str + size: length_of_extra_headers + encoding: ASCII + - id: data_payload + type: + switch-on: data_payload_encoding + cases: + 'miniseed_data_encoding::encoding_text': miniseed_data_encoding_text + 'miniseed_data_encoding::encoding_16_bit_integer': miniseed_data_encoding_16_bit_integer + 'miniseed_data_encoding::encoding_32_bit_integer': miniseed_data_encoding_32_bit_integer + 'miniseed_data_encoding::encoding_32_bit_float': miniseed_data_encoding_32_bit_float + 'miniseed_data_encoding::encoding_64_bit_float': miniseed_data_encoding_64_bit_float + 'miniseed_data_encoding::encoding_steim_1': miniseed_data_encoding_unknown # Not yet supported + 'miniseed_data_encoding::encoding_steim_2': miniseed_data_encoding_unknown # Not yet supported + 'miniseed_data_encoding::encoding_steim_3': miniseed_data_encoding_unknown # Not yet supported + 'miniseed_data_encoding::encoding_opaque_data': miniseed_data_encoding_unknown + miniseed_flags: + seq: + - id: calibration_signals_present + type: b1 + - id: time_tag_is_questionable + type: b1 + - id: clock_locked + type: b1 + - id: reserved_flag_3 + type: b1 + - id: reserved_flag_4 + type: b1 + - id: reserved_flag_5 + type: b1 + - id: reserved_flag_6 + type: b1 + - id: reserved_flag_7 + type: b1 + miniseed_time: + seq: + - id: nanosecond + type: u4 + - id: year + type: u2 + - id: day_of_year + type: u2 + - id: hour + type: u1 + - id: minute + type: u1 + - id: second + type: u1 + miniseed_data_encoding_unknown: + seq: + - id: data + type: u1 + repeat: eos + miniseed_data_encoding_text: + seq: + - id: data + type: str + size-eos: true + encoding: UTF-8 + miniseed_data_encoding_16_bit_integer: + seq: + - id: data + type: s2 + repeat: eos + miniseed_data_encoding_32_bit_integer: + seq: + - id: data + type: s4 + repeat: eos + miniseed_data_encoding_32_bit_float: + seq: + - id: data + type: f4 + repeat: eos + miniseed_data_encoding_64_bit_float: + seq: + - id: data + type: f8 + repeat: eos +enums: + miniseed_data_encoding: + 0: encoding_text + 1: encoding_16_bit_integer + 3: encoding_32_bit_integer + 4: encoding_32_bit_float + 5: encoding_64_bit_float + 10: encoding_steim_1 + 11: encoding_steim_2 + 19: encoding_steim_3 + 100: encoding_opaque_data From 8983c33982123f4236bb50d87da41cc6963c73f7 Mon Sep 17 00:00:00 2001 From: Anthony DGJ Date: Thu, 6 Feb 2025 15:58:27 -0500 Subject: [PATCH 2/2] support multiple data records --- scientific/seismology/miniseed3.ksy | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/scientific/seismology/miniseed3.ksy b/scientific/seismology/miniseed3.ksy index 97725450c..877ea7dcd 100644 --- a/scientific/seismology/miniseed3.ksy +++ b/scientific/seismology/miniseed3.ksy @@ -14,6 +14,7 @@ doc-ref: https://docs.fdsn.org/projects/miniseed3 seq: - id: data_record type: data_record + repeat: eos types: data_record: doc-ref: https://docs.fdsn.org/projects/miniseed3/en/latest/definition.html#description-of-record-fields @@ -100,33 +101,38 @@ types: seq: - id: data type: u1 - repeat: eos + repeat: expr + repeat-expr: _parent.length_of_data_payload miniseed_data_encoding_text: seq: - id: data type: str - size-eos: true + size: _parent.length_of_data_payload encoding: UTF-8 miniseed_data_encoding_16_bit_integer: seq: - id: data type: s2 - repeat: eos + repeat: expr + repeat-expr: _parent.number_of_samples miniseed_data_encoding_32_bit_integer: seq: - id: data type: s4 - repeat: eos + repeat: expr + repeat-expr: _parent.number_of_samples miniseed_data_encoding_32_bit_float: seq: - id: data type: f4 - repeat: eos + repeat: expr + repeat-expr: _parent.number_of_samples miniseed_data_encoding_64_bit_float: seq: - id: data type: f8 - repeat: eos + repeat: expr + repeat-expr: _parent.number_of_samples enums: miniseed_data_encoding: 0: encoding_text