1
2
3
4
5
6
7 """ Handle the SCOP HIErarchy files, which describe the SCOP hierarchy in
8 terms of SCOP unique identifiers (sunid).
9
10 The file format is described in the scop
11 "release notes.":http://scop.berkeley.edu/release-notes-1.55.html
12 The latest HIE file can be found
13 "elsewhere at SCOP.":http://scop.mrc-lmb.cam.ac.uk/scop/parse/
14
15 "Release 1.55":http://scop.berkeley.edu/parse/dir.hie.scop.txt_1.55 (July 2001)
16 """
17
18
20 """Holds information for one node in the SCOP hierarchy.
21
22 sunid -- SCOP unique identifiers of this node
23
24 parent -- Parents sunid
25
26 children -- Sequence of childrens sunids
27 """
29 self.sunid = ''
30 self.parent = ''
31 self.children = []
32 if line:
33 self._process(line)
34
36 """Parses HIE records.
37
38 Records consist of 3 tab deliminated fields; node's sunid,
39 parent's sunid, and a list of children's sunids.
40 """
41
42
43
44
45
46 line = line.rstrip()
47 columns = line.split('\t')
48 if len(columns) != 3:
49 raise ValueError("I don't understand the format of %s" % line)
50
51 sunid, parent, children = columns
52
53 if sunid =='-':
54 self.sunid = ''
55 else:
56 self.sunid = int(sunid)
57
58 if parent=='-':
59 self.parent = ''
60 else:
61 self.parent = int(parent)
62
63 if children=='-':
64 self.children = ()
65 else:
66 children = children.split(',')
67 self.children = map(int, children)
68
69
71 s = []
72 s.append(str(self.sunid))
73
74 if self.parent:
75 s.append(str(self.parent))
76 else:
77 if self.sunid != 0:
78 s.append('0')
79 else:
80 s.append('-')
81
82
83 if self.children:
84 child_str = map(str, self.children)
85 s.append(",".join(child_str))
86 else:
87 s.append('-')
88
89 return "\t".join(s) + "\n"
90
91
93 """Iterates over a HIE file, returning a Hie record for each line
94 in the file.
95
96 Arguments:
97
98 handle -- file-like object.
99 """
100 for line in handle:
101 yield Record(line)
102