Coverage for /usr/local/lib/python3.13/dist-packages/pyrocko/squirrel/io/backends/mseed.py: 92%
38 statements
« prev ^ index » next coverage.py v7.6.0, created at 2025-12-04 10:41 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2025-12-04 10:41 +0000
1# http://pyrocko.org - GPLv3
2#
3# The Pyrocko Developers, 21st Century
4# ---|P------/S----------~Lg----------
6'''
7Squirrel IO adaptor to :py:mod:`pyrocko.io.mseed`.
8'''
10import logging
12from pyrocko.io.io_common import get_stats, touch # noqa
13from ... import model
16logger = logging.getLogger('psq.io.mseed')
18SEGMENT_SIZE = 1024*1024
21def provided_formats():
22 return ['mseed']
25def detect(first512):
26 from pyrocko.io import mseed
28 if mseed.detect(first512):
29 return 'mseed'
30 else:
31 return None
34def iload(format, file_path, segment, content):
35 assert format == 'mseed'
36 from pyrocko.io import mseed
38 load_data = 'waveform' in content
40 if segment is None:
41 offset = 0
42 nsegments = 0
43 else:
44 offset = segment
45 nsegments = 1
47 try:
48 file_segment = None
49 itr = 0
50 for tr in mseed.iload(
51 file_path, load_data=load_data,
52 offset=offset, segment_size=SEGMENT_SIZE, nsegments=nsegments):
54 if file_segment != tr.meta['offset_start']:
55 itr = 0
56 file_segment = tr.meta['offset_start']
58 if tr.deltat != 0.0:
59 nsamples = int(round((tr.tmax - tr.tmin) / tr.deltat)) + 1
60 else:
61 nsamples = 0.0
62 nut = model.make_waveform_nut(
63 file_segment=file_segment,
64 file_element=itr,
65 codes=tr.codes,
66 tmin=tr.tmin,
67 tmax=tr.tmin + tr.deltat * nsamples,
68 deltat=tr.deltat)
70 if 'waveform' in content:
71 nut.content = tr
73 yield nut
74 itr += 1
76 except Exception as e:
77 logger.warning(str(e))
78 raise e from e