Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

71

72

# -*- coding: utf-8 -*- 

""" 

Additional utilities for obspy.db. 

 

:copyright: 

    The ObsPy Development Team (devs@obspy.org) 

:license: 

    GNU Lesser General Public License, Version 3 

    (http://www.gnu.org/copyleft/lesser.html) 

""" 

 

from obspy import UTCDateTime 

 

 

def parseMappingData(lines): 

    """ 

    Parses a mapping file used by the indexer. 

    """ 

    results = {} 

    for line in lines: 

        if line.startswith('#'): 

            continue 

        if line.strip() == '': 

            continue 

        temp = {} 

        data = line.split() 

        msg = "Invalid format in mapping data: " 

        # check old and new ids 

        if len(data) < 2 or len(data) > 4: 

            raise Exception(msg + 'expected "old_id new_id starttime endtime"') 

        elif data[0].count('.') != 3: 

            raise Exception(msg + "old id %s must contain 3 dots" % data[0]) 

        elif data[1].count('.') != 3: 

            raise Exception(msg + "new id %s must contain 3 dots" % data[1]) 

        old_id = data[0] 

        n0, s0, l0, c0 = old_id.split('.') 

        n1, s1, l1, c1 = data[1].split('.') 

        if len(n0) > 2 or len(n1) > 2: 

            raise Exception(msg + "network ids must not exceed 2 characters") 

        elif len(s0) > 5 or len(s1) > 5: 

            raise Exception(msg + "station ids must not exceed 5 characters") 

        elif len(l0) > 2 or len(l1) > 2: 

            raise Exception(msg + "location ids must not exceed 2 characters") 

        elif len(c0) > 3 or len(c1) > 3: 

            raise Exception(msg + "channel ids must not exceed 3 characters") 

        temp['network'] = n1 

        temp['station'] = s1 

        temp['location'] = l1 

        temp['channel'] = c1 

        # check datetimes if any 

        if len(data) > 2: 

            try: 

                temp['starttime'] = UTCDateTime(data[2]) 

            except: 

                msg += "starttime '%s' is not a time format" 

                raise Exception(msg % data[2]) 

        else: 

            temp['starttime'] = None 

        if len(data) > 3: 

            try: 

                temp['endtime'] = UTCDateTime(data[3]) 

            except: 

                msg += "endtime '%s' is not a time format" 

                raise Exception(msg % data[3]) 

            if temp['endtime'] < temp['starttime']: 

                msg += "endtime '%s' should be after starttime" 

                raise Exception(msg % data[3]) 

        else: 

            temp['endtime'] = None 

        results.setdefault(old_id, []) 

        results.get(old_id).append(temp) 

    return results