Source code for app.modules.coconut.descriptors

from __future__ import annotations

from typing import Dict
from typing import Union

from app.modules.all_descriptors import get_cdk_rdkit_combined_descriptors
from app.modules.npscorer import get_np_score
from app.modules.toolkits.cdk_wrapper import get_CDK_descriptors
from app.modules.toolkits.cdk_wrapper import get_murko_framework
from app.modules.toolkits.helpers import parse_input
from app.modules.toolkits.rdkit_wrapper import get_rdkit_descriptors
from app.modules.tools.sugar_removal import get_sugar_info


[docs] def get_descriptors(smiles: str, toolkit: str) -> Union[tuple, str]: """Calculate descriptors using RDKit or CDK toolkit for the given SMILES. Args: smiles (str): SMILES input. toolkit (str): Toolkit choice ("rdkit" or "cdk"). Returns: dict or str: Dictionary of descriptors and their values if successful, or an error message if the toolkit choice is invalid or SMILES is invalid. """ mol = parse_input(smiles, toolkit, False) if mol: if toolkit == "rdkit": Descriptors = get_rdkit_descriptors(mol) return Descriptors elif toolkit == "cdk": Descriptors = get_CDK_descriptors(mol) return Descriptors
[docs] def get_COCONUT_descriptors(smiles: str, toolkit: str) -> Union[Dict[str, float], str]: """Calculate COCONUT descriptors using RDKit or CDK toolkit for the given. SMILES. Args: smiles (str): SMILES input. toolkit (str): Toolkit choice ("rdkit" or "cdk"). Returns: dict or str: Dictionary of COCONUT descriptors and their values if successful, or an error message if the toolkit choice is invalid or SMILES is invalid. """ if toolkit == "all": AllDescriptors = get_cdk_rdkit_combined_descriptors(smiles) return AllDescriptors else: Descriptors = get_descriptors(smiles, toolkit) rdkitMolecule = parse_input(smiles, "rdkit", False) nplikeliness = float(get_np_score(rdkitMolecule)) cdkMolecule = parse_input(smiles, "cdk", False) hasLinearSugar, hasCircularSugars = get_sugar_info(cdkMolecule) framework = get_murko_framework(cdkMolecule) CombinedDescriptors = list(Descriptors) CombinedDescriptors.extend( [hasLinearSugar, hasCircularSugars, framework, nplikeliness], ) DescriptorList = ( "atom_count", "heavy_atom_count", "molecular_weight", "exactmolecular_weight", "alogp", "rotatable_bond_count", "topological_polar_surface_area", "hydrogen_bond_acceptors", "hydrogen_bond_donors", "hydrogen_bond_acceptors_lipinski", "hydrogen_bond_donors_lipinski", "lipinski_rule_of_five_violations", "aromatic_rings_count", "qed_drug_likeliness", "formal_charge", "fractioncsp3", "number_of_minimal_rings", "van_der_walls_volume", ) combinedDescriptors = dict(zip(DescriptorList, Descriptors)) combinedDescriptors.update( { "linear_sugars": hasLinearSugar, "circular_sugars": hasCircularSugars, "murko_framework": framework, "nplikeness": nplikeliness, }, ) return ( combinedDescriptors if len(DescriptorList) == len(Descriptors) else "Error Calculating Descriptors" )