Source code for segmentation.chainsaw
"""
Chainsaw predicts domain segmentation based on a deep learning model. It uses
the ``stride`` tool to determine secondary structure, and produces a TSV file
with a description of the output.
Source: https://github.com/JudeWells/Chainsaw
"""
import csv
from collections.abc import Iterator
from typing import Tuple
from . import SegmentationParser, ParsingError
[docs]
class Parser(SegmentationParser):
def __init__(self, csv_path):
super().__init__(csv_path)
[docs]
def parse(self) -> Iterator[Tuple[str, int, str]]:
(csv_path,) = self.paths
rows = _read_csv_rows(csv_path, delimiter='\t')
try:
data = rows[0]
domain_count = data['ndom']
chopping = data['chopping']
except (IndexError, KeyError) as e:
raise ParsingError("[Chainsaw] Invalid input format") from e
yield ("Chainsaw", domain_count, chopping)
[docs]
def _read_csv_rows(path, **kwargs):
try:
with open(path) as f:
reader = csv.DictReader(f, **kwargs)
return [row for row in reader]
except Exception as e:
raise ParsingError(f"[Chainsaw] Couldn't parse input path {path}") from e