Source code for modifinder.classes.StructureMeta


import rdkit.Chem.rdMolDescriptors as rdMolDescriptors
from modifinder.utilities.network import get_np_classifier
from rdkit import Chem
from dataclasses import dataclass

[docs]@dataclass(frozen=True) class StructureMeta: """ Class to store metadata about a molecule. Attributes ---------- num_aromatic_rings : int Number of aromatic rings in the molecule. num_atoms : int Number of atoms in the molecule. num_bonds : int Number of bonds in the molecule. num_rings : int Number of rings in the molecule. class_results: list List of classes from the np_classifier superclass: list List of superclasses from the np_classifier pathway: list List of pathways from the np_classifier isglycoside: bool True if the molecule is a glycoside. smiles: str SMILES representation of the molecule. """ num_aromatic_rings: int num_atoms: int num_bonds: int num_rings: int class_types: list superclasses: list pathways: list isglycoside: bool smiles: str = None
[docs] @classmethod def from_structure(cls, structure): """ Create a StructureMeta object from an RDKit molecule. Parameters ---------- structure : RDKit molecule RDKit molecule object. Returns ------- StructureMeta StructureMeta object with metadata about the molecule. """ num_aromatic_rings = rdMolDescriptors.CalcNumAromaticRings(structure) num_atoms = structure.GetNumAtoms() num_bonds = structure.GetNumBonds() num_rings = rdMolDescriptors.CalcNumRings(structure) smiles = Chem.MolToSmiles(structure) np_data = get_np_classifier(smiles) class_types = np_data["class_types"] superclasses = np_data["superclasses"] pathways = np_data["pathways"] isglycoside = np_data["isglycoside"] return cls(num_aromatic_rings, num_atoms, num_bonds, num_rings, class_types, superclasses, pathways, isglycoside, smiles)