1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

import logging 

 

import numpy as num 

 

from pyrocko import trace 

from .io_common import FileLoadError 

 

logger = logging.getLogger(__name__) 

 

 

def get_meta(tdms_properties): 

deltat = 1. / tdms_properties['SamplingFrequency[Hz]'] 

tmin = tdms_properties['GPSTimeStamp'].astype(num.float) * 1e-6 

 

fibre_extra = { 

'fibre_length': tdms_properties.get( 

'MeasureLength[m]', -1.), 

'fibre_spatial_resolution': tdms_properties.get( 

'SpatialResolution[m]', -1.), 

'fibre_index': tdms_properties.get( 

'FibreIndex', -1.), 

'zero_offset': tdms_properties.get( 

'Zero Offset (m)', -1.), 

} 

 

extra = ', '.join(['%s: %s' % (k, v) for k, v in fibre_extra.items()]) 

 

return deltat, tmin, extra 

 

 

def iload(filename, load_data=True): 

try: 

from nptdms import TdmsFile 

except ImportError: 

raise FileLoadError('Could not import Python module nptdms.') 

 

try: 

if load_data: 

tdms = TdmsFile.read(filename) 

else: 

tdms = TdmsFile.read_metadata(filename) 

except ValueError as e: 

raise FileLoadError('Cannot load %s: %s' % (filename, str(e))) 

 

deltat, tmin, extra_str = get_meta(tdms.properties) 

 

for group in tdms.groups(): 

for channel in group.channels(): 

 

assert int(channel.name) < 99999 

station = '%05i' % int(channel.name) 

nsamples = channel._length 

 

tr = trace.Trace( 

network='DA', 

station=station, 

ydata=None, 

deltat=deltat, 

tmin=tmin, 

tmax=tmin + nsamples*deltat, 

extra=extra_str) 

 

if load_data: 

tr.set_ydata(channel[:].astype(num.int32)) 

 

yield tr 

 

 

def detect(first512): 

return first512.startswith(b'TDSm.')