Source code for swamp.parsers.pdbtmxmlparser
import collections
import xml.etree.ElementTree as ET
from swamp.parsers.parser import Parser
[docs]class PdbtmXmlParser(Parser):
"""Class to parse and store pdbtm data contained in xml format files
:param str fname: the file name to be parsed (default None)
:param `~swamp.logger.swamplogger.SwampLogger` logger: logging interface for the parser (default None)
:ivar list ss2_annotation: List of named tuples containing secondary structure annotations found in the input file
:example:
>>> from swamp.parsers import PdbtmXmlParser
>>> my_parser = PdbtmXmlParser('<fname>')
>>> my_parser.parse()
"""
def __init__(self, fname, logger=None):
self.ss2_annotation = None
super(PdbtmXmlParser, self).__init__(fname, logger=logger)
@property
def summary(self):
"""Abstract property to store a summary of the parsed figures of merit (not in use)"""
return None
@property
def _annotation_template(self):
"""Named tuple to contain information about the secondary structure information extracted from \
:py:attr:`~swamp.parsers.parser.fname`"""
return collections.namedtuple("AnnotationInfo",
["pdb_start", "pdb_stop", "seq_start", "seq_end", "type", "chain", "index",
"length", "pdb_region"])
[docs] def parse(self):
"""Method to parse :py:attr:`~swamp.parsers.parser.Parser.fname` and store \
:py:attr:`~swamp.parsers.pdbtmxmlparser.PdbtmXmlParser.ss2 annotation`"""
if self.error:
self.logger.warning("Previous errors prevent parsing PDBTM file!")
return
tree = ET.parse(self.fname)
root = tree.getroot()
self.ss2_annotation = []
for chain in root.iter("{http://pdbtm.enzim.hu}CHAIN"):
for idx, region in enumerate(chain.iter("{http://pdbtm.enzim.hu}REGION")):
current_region = self._annotation_template(index=idx,
pdb_start=int(region.attrib['pdb_beg']),
pdb_stop=int(region.attrib['pdb_end']),
seq_start=int(region.attrib['seq_beg']),
seq_end=int(region.attrib['seq_end']),
type=region.attrib['type'],
chain=chain.attrib["CHAINID"],
pdb_region=[x for x in range(int(region.attrib['pdb_beg']),
int(region.attrib[
'pdb_end']) + 1)],
length=(int(region.attrib['seq_end']) - int(
region.attrib['seq_beg'])))
self.ss2_annotation.append(current_region)