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

1# http://pyrocko.org - GPLv3 

2# 

3# The Pyrocko Developers, 21st Century 

4# ---|P------/S----------~Lg---------- 

5 

6''' 

7Squirrel IO adaptor to :py:mod:`pyrocko.io.mseed`. 

8''' 

9 

10import logging 

11 

12from pyrocko.io.io_common import get_stats, touch # noqa 

13from ... import model 

14 

15 

16logger = logging.getLogger('psq.io.mseed') 

17 

18SEGMENT_SIZE = 1024*1024 

19 

20 

21def provided_formats(): 

22 return ['mseed'] 

23 

24 

25def detect(first512): 

26 from pyrocko.io import mseed 

27 

28 if mseed.detect(first512): 

29 return 'mseed' 

30 else: 

31 return None 

32 

33 

34def iload(format, file_path, segment, content): 

35 assert format == 'mseed' 

36 from pyrocko.io import mseed 

37 

38 load_data = 'waveform' in content 

39 

40 if segment is None: 

41 offset = 0 

42 nsegments = 0 

43 else: 

44 offset = segment 

45 nsegments = 1 

46 

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): 

53 

54 if file_segment != tr.meta['offset_start']: 

55 itr = 0 

56 file_segment = tr.meta['offset_start'] 

57 

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) 

69 

70 if 'waveform' in content: 

71 nut.content = tr 

72 

73 yield nut 

74 itr += 1 

75 

76 except Exception as e: 

77 logger.warning(str(e)) 

78 raise e from e