Spaces:
No application file
No application file
| # Copyright 2000 by Jeffrey Chang. All rights reserved. | |
| # Revisions copyright 2001 by Gavin E. Crooks. All rights reserved. | |
| # This file is part of the Biopython distribution and governed by your | |
| # choice of the "Biopython License Agreement" or the "BSD 3-Clause License". | |
| # Please see the LICENSE file that should have been included as part of this | |
| # package. | |
| """Handle the SCOP DOMain file. | |
| The DOM file has been officially deprecated. For more information see | |
| the SCOP"release notes.":http://scop.berkeley.edu/release-notes-1.55.html | |
| The DOM files for older releases can be found | |
| "elsewhere at SCOP.":http://scop.mrc-lmb.cam.ac.uk/scop/parse/ | |
| """ | |
| from .Residues import Residues | |
| class Record: | |
| """Holds information for one SCOP domain. | |
| Attributes: | |
| - sid - The SCOP ID of the entry, e.g. d1anu1 | |
| - residues - The domain definition as a Residues object | |
| - hierarchy - A string specifying where this domain is in the hierarchy. | |
| """ | |
| def __init__(self, line=None): | |
| """Initialize the class.""" | |
| self.sid = "" | |
| self.residues = [] | |
| self.hierarchy = "" | |
| if line: | |
| self._process(line) | |
| def _process(self, line): | |
| """Parse DOM records (PRIVATE). | |
| Records consist of 4 tab deliminated fields; | |
| sid, pdbid, residues, hierarchy | |
| """ | |
| # For example :: | |
| # | |
| # d1sctg_ 1sct g: 1.001.001.001.001.001 | |
| # d1scth_ 1sct h: 1.001.001.001.001.001 | |
| # d1flp__ 1flp - 1.001.001.001.001.002 | |
| # d1moh__ 1moh - 1.001.001.001.001.002 | |
| line = line.rstrip() # no trailing whitespace | |
| columns = line.split("\t") # separate the tab-delineated cols | |
| if len(columns) != 4: | |
| raise ValueError(f"I don't understand the format of {line}") | |
| self.sid, pdbid, res, self.hierarchy = columns | |
| self.residues = Residues(res) | |
| self.residues.pdbid = pdbid | |
| def __str__(self): | |
| """Represent the SCOP domain record as a tab-separated string.""" | |
| s = [] | |
| s.append(self.sid) | |
| s.append(str(self.residues).replace(" ", "\t")) | |
| s.append(self.hierarchy) | |
| return "\t".join(s) + "\n" | |
| def parse(handle): | |
| """Iterate over a DOM file as a Dom record for each line. | |
| Arguments: | |
| - handle -- file-like object. | |
| """ | |
| for line in handle: | |
| if line.startswith("#"): | |
| continue | |
| yield Record(line) | |