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
70 s = []
71 s.append(str(self.sunid))
72
73 if self.parent:
74 s.append(str(self.parent))
75 else:
76 if self.sunid != 0:
77 s.append('0')
78 else:
79 s.append('-')
80
81 if self.children:
82 child_str = map(str, self.children)
83 s.append(",".join(child_str))
84 else:
85 s.append('-')
86
87 return "\t".join(s) + "\n"
88
89
91 """Iterates over a HIE file, returning a Hie record for each line
92 in the file.
93
94 Arguments:
95
96 handle -- file-like object.
97 """
98 for line in handle:
99 if line.startswith('#'):
100 continue
101 yield Record(line)
102