simplemseed
Miniseed3 (and miniseed2) in pure python.
Read the docs at readthedocs
Installation
simplemseed can be installed in conda environments from conda-forge ..
$ conda install --channel conda-forge simplemseed
.. or from pypi using pip:
$ pip install simplemseed
Miniseed3
Write and read mseed3 records like:
#!/usr/bin/env python3
from simplemseed import MSeed3Header, MSeed3Record, FDSNSourceId, readMSeed3Records
data = [(i % 99 - 49) for i in range(0, 1000)]
header = MSeed3Header()
header.starttime = "2024-01-01T15:13:55.123456Z"
header.sampleRatePeriod = 20
sid = FDSNSourceId.createUnknown(header.sampleRatePeriod)
ms3record = MSeed3Record(header, sid, data)
ms3filename = "test.ms3"
with open(ms3filename, "wb") as of:
of.write(ms3record.pack())
print(f" save: {ms3record.details()} ")
print(f" to: {ms3filename} ")
print()
with open(ms3filename, "rb") as infile:
for readms3record in readMSeed3Records(infile):
print(f" extract: {readms3record.details()} ")
print(f" from: {ms3filename} ")
Access uncompressed timeseries data as numpy ndarray with:
dataArray = ms3record.decompress()
Also includes compression and decompression for primitive data arrays and for Steim1 and Steim2, in pure python.
Miniseed2:
Read miniseed2 with:
with open(ms2filename, "rb") as inms2:
for ms2rec in simplemseed.readMiniseed2Records(inms2):
print(ms2rec.summary())
or read and convert to miniseed3:
with open(ms3filename, "wb") as outms3:
with open(ms2filename, "rb") as inms2:
for ms2rec in simplemseed.readMiniseed2Records(inms2):
ms3rec = simplemseed.mseed2to3(ms2rec)
outms3.write(ms3rec.pack())
Command line tools:
Miniseed3 Details
Print details about each miniseed3 record
mseed3details casee.mseed3
FDSN:CO_CASEE_00_H_H_Z, version 4, 285 bytes (format: 3)
start time: 2023-06-17T04:53:54.468392Z (168)
number of samples: 104
sample rate (Hz): 100.0
flags: [00000000] 8 bits$
CRC: 0x4D467F27
extra header length: 31 bytes
data payload length: 192 bytes
payload encoding: STEIM-2 integer compression (val: 11)
extra headers:
Total 104 samples in 1 records
Getting and setting extra header values
% mseed3details --get "/FDSN/Time" casee_two.ms3
{"Quality": 0}
% mseed3details --getall "/FDSN/Time/Quality" casee_two.ms3 --verbose
file: casee_two.ms3
FDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.008392Z 2023-06-17T04:53:50.178392Z (18 pts)
0
FDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.188392Z 2023-06-17T04:53:55.498392Z (532 pts)
0
% mseed3details --set "/data" '{ "key": "val", "keyb": 3 }' casee_two.ms3
% mseed3details --getall "/data" casee_two.ms3 --verbose
file: casee_two.ms3
FDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.008392Z 2023-06-17T04:53:50.178392Z (18 pts)
{"key": "val", "keyb": 3}
FDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.188392Z 2023-06-17T04:53:55.498392Z (532 pts)
pointer not found in extra headers
% mseed3details --setall "/data" '{ "key": "else", "keyb": 4 }' casee_two.ms3
% mseed3details --set "/data/keyb" 42 casee_two.ms3
% mseed3details --getall "/data" casee_two.ms3 --verbose
file: casee_two.ms3
FDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.008392Z 2023-06-17T04:53:50.178392Z (18 pts)
{"key": "else", "keyb": 42}
FDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.188392Z 2023-06-17T04:53:55.498392Z (532 pts)
{"key": "else", "keyb": 4}
Merge mseed3 records
- merge contiguous, in order, mseed3 records into larger records. Decompression is needed as steim1 and 2 cannot be merged without decompression, primitive types are already decompressed.
mseed3merge -o merged.ms3 --decomp bird_jsc.ms3
Convert miniseed 2 to miniseed3.
Note most blockettes are ignored, other than 100, 1000, 1001
mseed2to3 --ms2 casee.ms2 --ms3 casee.ms3
FDSN sourceid
Parse FDSN sourceids
Split a FDSN source id:
fdsnsourceid FDSN:CO_JSC_00_H_H_Z
FDSN:CO_JSC_00_H_H_Z
Net: CO
Sta: JSC
Loc: 00
Band: H - High Broadband, >= 80 to < 250 Hz, response period >= 10 sec
Source: H - High Gain Seismometer
Subsource: Z
Describe a band code:
fdsnsourceid -b Q
Band: Q - Q - Greater than 10 days , < 0.000001 Hz
Find the correct band code for a sample rate:
fdsnsourceid --sps 87
Rate: 87.0 - H - H - High Broadband , >= 80 to < 250 Hz, response period >= 10 sec
Rate: 87.0 - E - E - Extremely Short Period, >= 80 to < 250 Hz, response period < 10 sec
Describe a source code:
fdsnsourceid --source H N
Source: H - High Gain Seismometer
Measures displacement/velocity/acceleration along a line defined by the the dip and azimuth.
Source: N - Accelerometer
Measures displacement/velocity/acceleration along a line defined by the the dip and azimuth.
Examples
There are more examples in the examples directory.
Metadata
Release files for simplemseed 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| simplemseed-1.0.2.tar.gz | 315.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| simplemseed-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 373.5 kB
Release files / simplemseed-1.0.2.tar.gz
| Download URL | simplemseed-1.0.2.tar.gz |
|---|---|
| Size | 315.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3580857ffd994c3ce19a950f2076ea788d8eddf598fbc3cc4c3b533c03e3b99a
|
|
BLAKE2b-256 checksum How to use checksums |
3eee0ebdc9d9907f6d4bc96a20824c0f24188ced5f50e6332026a9e1e3c8c314
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.28.1
|
Release files / simplemseed-1.0.2-py3-none-any.whl
| Download URL | simplemseed-1.0.2-py3-none-any.whl |
|---|---|
| Size | 58.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7fe519b8c2f0049a66442e2ed00795032fe9f306616df7e77ef41cdae6f946f9
|
|
BLAKE2b-256 checksum How to use checksums |
2c43f0638f25176c79cac0b8ad320edffac6ac552005314db18949d0fe069a53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.28.1
|