Source code for rnaglib.transforms.annotate.ss
import os
from typing import Union
from pathlib import Path
import forgi
from rnaglib.transforms import Transform
[docs]
class SecondaryStructureTransform(Transform):
"""Compute secondary structure in dot-bracket notation
for each chain in the RNA and store in a graph-level dictionary.
Secondary structure assignments computed by forgi
>>> from rnaglib.transforms import SecondaryStructureTransform
>>> from rnaglib.dataset import RNADataset
>>> dset = RNADataset(debug=True)
>>> T = SecondaryStructureTransform(dset.structures_path)
>>> T(dset[0])
>>> dset[0].graph['ss']
"""
[docs]
def __init__(self, structures_dir: Union[os.PathLike, str]):
self.structures_dir = structures_dir
pass
def forward(self, rna_dict):
pdbid = rna_dict["rna"].graph["pdbid"]
ss_dict = {}
seq_dict = {}
try:
out = forgi.load_rna(str(Path(self.structures_dir) / f"{pdbid}.cif"))
except:
pass
else:
for cg in out:
(
pdb,
seq,
ss,
) = cg.to_fasta_string().split()
chain_id = pdb.split("_")[-1].strip()
ss_dict[chain_id] = ss
seq_dict[chain_id] = seq
rna_dict["rna"].graph["ss"] = ss_dict
rna_dict["rna"].graph["seq"] = seq_dict
return rna_dict