simplemseed


Namesimplemseed JSON
Version 0.4.1 PyPI version JSON
download
home_pageNone
Summaryminiseed3 in pure python
upload_time2024-12-16 17:22:22
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords fdsn miniseed miniseed3 seed sourceid steim1 steim2
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # simplemseed


[![PyPI](https://img.shields.io/pypi/v/simplemseed)](https://pypi.org/project/simplemseed/)
[![Documentation Status](https://readthedocs.org/projects/simplemseed/badge/?version=latest)](https://simplemseed.readthedocs.io/en/latest/?badge=latest)

[Miniseed3](http://docs.fdsn.org/projects/miniseed3) (and miniseed2) in pure python.

Read the docs at [readthedocs](https://simplemseed.readthedocs.io/en/latest/)

# Installation

`simplemseed` can be installed in conda environments from [conda-forge](https://conda-forge.org/docs/user/introduction/#how-can-i-install-packages-from-conda-forge) ..

```
$ conda install --channel conda-forge simplemseed
```

.. or from [pypi](https://pypi.org/project/simplemseed/) using `pip`:


```
$ pip install simplemseed
```

# Miniseed3

Write and read mseed3 records like:

```python
#!/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:
```python
dataArray = ms3record.decompress()
```


Also includes compression and decompression
for primitive data arrays and
for Steim1 and Steim2, in pure python.

# Miniseed2:

Read miniseed2 with:
```python
with open(ms2filename, "rb") as inms2:
    for ms2rec in simplemseed.readMiniseed2Records(inms2):
        print(ms2rec.summary())
```
or read and convert to miniseed3:
```python
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](http://docs.fdsn.org/projects/source-identifiers/en/v1.0/)

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](https://github.com/crotwell/simplemseed/tree/main/examples) directory.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "simplemseed",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "fdsn, miniseed, miniseed3, seed, sourceid, steim1, steim2",
    "author": null,
    "author_email": "Philip Crotwell <crotwell@seis.sc.edu>",
    "download_url": "https://files.pythonhosted.org/packages/2f/b5/d6c616cb2472f8b4771f74d8e2bd02757149499568660f518b8f18d89032/simplemseed-0.4.1.tar.gz",
    "platform": null,
    "description": "# simplemseed\n\n\n[![PyPI](https://img.shields.io/pypi/v/simplemseed)](https://pypi.org/project/simplemseed/)\n[![Documentation Status](https://readthedocs.org/projects/simplemseed/badge/?version=latest)](https://simplemseed.readthedocs.io/en/latest/?badge=latest)\n\n[Miniseed3](http://docs.fdsn.org/projects/miniseed3) (and miniseed2) in pure python.\n\nRead the docs at [readthedocs](https://simplemseed.readthedocs.io/en/latest/)\n\n# Installation\n\n`simplemseed` can be installed in conda environments from [conda-forge](https://conda-forge.org/docs/user/introduction/#how-can-i-install-packages-from-conda-forge) ..\n\n```\n$ conda install --channel conda-forge simplemseed\n```\n\n.. or from [pypi](https://pypi.org/project/simplemseed/) using `pip`:\n\n\n```\n$ pip install simplemseed\n```\n\n# Miniseed3\n\nWrite and read mseed3 records like:\n\n```python\n#!/usr/bin/env python3\n\nfrom simplemseed import MSeed3Header, MSeed3Record, FDSNSourceId, readMSeed3Records\n\ndata = [(i % 99 - 49) for i in range(0, 1000)]\nheader = MSeed3Header()\nheader.starttime = \"2024-01-01T15:13:55.123456Z\"\nheader.sampleRatePeriod = 20\nsid = FDSNSourceId.createUnknown(header.sampleRatePeriod)\nms3record = MSeed3Record(header, sid, data)\n\nms3filename = \"test.ms3\"\nwith open(ms3filename, \"wb\") as of:\n    of.write(ms3record.pack())\n    print(f\"  save: {ms3record.details()} \")\n    print(f\"    to: {ms3filename} \")\nprint()\nwith open(ms3filename, \"rb\") as infile:\n    for readms3record in readMSeed3Records(infile):\n        print(f\"  extract: {readms3record.details()} \")\n        print(f\"     from: {ms3filename} \")\n```\n\nAccess uncompressed timeseries data as numpy ndarray with:\n```python\ndataArray = ms3record.decompress()\n```\n\n\nAlso includes compression and decompression\nfor primitive data arrays and\nfor Steim1 and Steim2, in pure python.\n\n# Miniseed2:\n\nRead miniseed2 with:\n```python\nwith open(ms2filename, \"rb\") as inms2:\n    for ms2rec in simplemseed.readMiniseed2Records(inms2):\n        print(ms2rec.summary())\n```\nor read and convert to miniseed3:\n```python\nwith open(ms3filename, \"wb\") as outms3:\n    with open(ms2filename, \"rb\") as inms2:\n        for ms2rec in simplemseed.readMiniseed2Records(inms2):\n            ms3rec = simplemseed.mseed2to3(ms2rec)\n            outms3.write(ms3rec.pack())\n```\n\n# Command line tools:\n\n\n##  Miniseed3 Details\n\nPrint details about each miniseed3 record\n\n```\nmseed3details casee.mseed3\n          FDSN:CO_CASEE_00_H_H_Z, version 4, 285 bytes (format: 3)\n                       start time: 2023-06-17T04:53:54.468392Z (168)\n                number of samples: 104\n                 sample rate (Hz): 100.0\n                            flags: [00000000] 8 bits$\n                              CRC: 0x4D467F27\n              extra header length: 31 bytes\n              data payload length: 192 bytes\n                 payload encoding: STEIM-2 integer compression (val: 11)\n                    extra headers:\n\nTotal 104 samples in 1 records\n```\n\n## Getting and setting extra header values\n\n```\n% mseed3details --get \"/FDSN/Time\" casee_two.ms3\n  {\"Quality\": 0}\n% mseed3details --getall \"/FDSN/Time/Quality\" casee_two.ms3 --verbose\nfile: casee_two.ms3\nFDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.008392Z 2023-06-17T04:53:50.178392Z (18 pts)\n  0\nFDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.188392Z 2023-06-17T04:53:55.498392Z (532 pts)\n  0\n% mseed3details --set \"/data\" '{ \"key\": \"val\", \"keyb\": 3 }' casee_two.ms3\n% mseed3details --getall \"/data\" casee_two.ms3 --verbose\nfile: casee_two.ms3\nFDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.008392Z 2023-06-17T04:53:50.178392Z (18 pts)\n  {\"key\": \"val\", \"keyb\": 3}\nFDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.188392Z 2023-06-17T04:53:55.498392Z (532 pts)\n  pointer not found in extra headers\n% mseed3details --setall \"/data\" '{ \"key\": \"else\", \"keyb\": 4 }' casee_two.ms3\n% mseed3details --set \"/data/keyb\" 42 casee_two.ms3\n% mseed3details --getall \"/data\" casee_two.ms3 --verbose\nfile: casee_two.ms3\nFDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.008392Z 2023-06-17T04:53:50.178392Z (18 pts)\n  {\"key\": \"else\", \"keyb\": 42}\nFDSN:CO_CASEE_00_H_H_Z 2023-06-17T04:53:50.188392Z 2023-06-17T04:53:55.498392Z (532 pts)\n  {\"key\": \"else\", \"keyb\": 4}\n```\n\n##  Merge mseed3 records\n- merge contiguous, in order, mseed3 records into larger records. Decompression\nis needed as steim1 and 2 cannot be merged without decompression, primitive\ntypes are already decompressed.\n```\nmseed3merge -o merged.ms3 --decomp  bird_jsc.ms3\n```\n\n##  Convert miniseed 2 to miniseed3.\n\nNote most blockettes are ignored, other than 100, 1000, 1001\n\n```\nmseed2to3 --ms2 casee.ms2 --ms3 casee.ms3\n```\n\n\n## FDSN sourceid\n\nParse FDSN [sourceids](http://docs.fdsn.org/projects/source-identifiers/en/v1.0/)\n\nSplit a FDSN source id:\n```\nfdsnsourceid FDSN:CO_JSC_00_H_H_Z\n      FDSN:CO_JSC_00_H_H_Z\n       Net: CO\n       Sta: JSC\n       Loc: 00\n      Band: H - High Broadband, >= 80 to < 250 Hz, response period >= 10 sec\n    Source: H - High Gain Seismometer\n Subsource: Z\n```   \n\nDescribe a band code:\n```\nfdsnsourceid -b Q\n      Band: Q - Q - Greater than 10 days , < 0.000001 Hz\n```\n\nFind the correct band code for a sample rate:\n```\nfdsnsourceid --sps 87\n      Rate: 87.0 - H - H - High Broadband , >= 80 to < 250 Hz, response period >= 10 sec\n      Rate: 87.0 - E - E - Extremely Short Period, >= 80 to < 250 Hz, response period < 10 sec\n```\n\nDescribe a source code:\n```\nfdsnsourceid --source H N\n    Source: H - High Gain Seismometer\n       Measures displacement/velocity/acceleration along a line defined by the the dip and azimuth.\n    Source: N - Accelerometer\n       Measures displacement/velocity/acceleration along a line defined by the the dip and azimuth.\n```\n\n# Examples\n\nThere are more examples in the\n[examples](https://github.com/crotwell/simplemseed/tree/main/examples) directory.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "miniseed3 in pure python",
    "version": "0.4.1",
    "project_urls": {
        "Documentation": "https://simplemseed.readthedocs.io/en/latest/",
        "Homepage": "https://github.com/crotwell/simplemseed",
        "Issues": "https://github.com/crotwell/simplemseed/issues",
        "Repository": "https://github.com/crotwell/simplemseed"
    },
    "split_keywords": [
        "fdsn",
        " miniseed",
        " miniseed3",
        " seed",
        " sourceid",
        " steim1",
        " steim2"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "af3b612dd653d2d1450de35139cec9cb1086acdf96e635c15a9c2d3b46b83f4f",
                "md5": "2cd7df71a88aa8fa203566a07f0e3111",
                "sha256": "ecc6cc972cdf47b9de71d1cb306fe54549dac1f663ab2e2f6301d44ac9df5423"
            },
            "downloads": -1,
            "filename": "simplemseed-0.4.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2cd7df71a88aa8fa203566a07f0e3111",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 51829,
            "upload_time": "2024-12-16T17:22:19",
            "upload_time_iso_8601": "2024-12-16T17:22:19.727871Z",
            "url": "https://files.pythonhosted.org/packages/af/3b/612dd653d2d1450de35139cec9cb1086acdf96e635c15a9c2d3b46b83f4f/simplemseed-0.4.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2fb5d6c616cb2472f8b4771f74d8e2bd02757149499568660f518b8f18d89032",
                "md5": "b960d4b8be69f1164d917b777bbf3ee7",
                "sha256": "f99b5b8ae62703d1b36308afaa5908396c6c3a8dd033bd4a6b804af955adec74"
            },
            "downloads": -1,
            "filename": "simplemseed-0.4.1.tar.gz",
            "has_sig": false,
            "md5_digest": "b960d4b8be69f1164d917b777bbf3ee7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 341196,
            "upload_time": "2024-12-16T17:22:22",
            "upload_time_iso_8601": "2024-12-16T17:22:22.180405Z",
            "url": "https://files.pythonhosted.org/packages/2f/b5/d6c616cb2472f8b4771f74d8e2bd02757149499568660f518b8f18d89032/simplemseed-0.4.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-16 17:22:22",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "crotwell",
    "github_project": "simplemseed",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "simplemseed"
}
        
Elapsed time: 0.92997s