Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Partial Charges for Rare Atoms #1903

Open
maciejwisniewski-drugdiscovery opened this issue Jul 9, 2024 · 1 comment
Open

Partial Charges for Rare Atoms #1903

maciejwisniewski-drugdiscovery opened this issue Jul 9, 2024 · 1 comment

Comments

@maciejwisniewski-drugdiscovery

Hi,

I'm working with a dataset containing SMILES strings of various ligands, and I want to calculate partial charges for each of them using either the Gasteiger or AM1BCC method.

Here is the Python code I'm using:

import rdkit
from rdkit import Chem
from rdkit.Chem import rdDistGeom
from openff.toolkit import Molecule

smiles = 'C[AsH]C' #  example SMILES

charge_method = 'gasteiget' #  or 'am1bcc'

try:
    rdkit_mol = Chem.MolFromSmiles(smiles)
    # Generate Conformer
    rdkit_mol.RemoveAllConformers()
    rdkit_mol = Chem.AddHs(rdkit_mol)
    params = rdDistGeom.ETKDGv3()
    params.randomSeed = 0xd06f00d
    params.numThreads = 4
    params.maxAttempts = 100
    rdDistGeom.EmbedMultipleConfs(rdkit_mol, 1, params)
    # Load to OpenFF
    openff_mol = Molecule.from_rdkit(rdkit_mol,allow_undefined_stereo=True)
except:
    openff_mol = Molecule.from_smiles(smiles,allow_undefined_stereo=True)
    openff_mol.generate_conformers(n_conformers=1)

openff_mol.assign_partial_charges(partial_charge_method='gasteiger')
print(openff_mol.partial_charges)

However, I've encountered a couple of issues:

1. Ligands with Radicals (?):

  • Example SMILES: [S]12[Fe]3[S]4[Fe]1[S]1[Fe]2[S]3[Fe]41
  • Ligand ID: SF4
  • Error:
[15:20:31] unrecognized bond type[15:20:31] unrecognized bond type[15:22:38] UFFTYPER: Unrecognized charge state for atom: 0
[15:22:38] UFFTYPER: Unrecognized atom type: Fe5+2 (1)
[15:22:38] UFFTYPER: Unrecognized charge state for atom: 2
[15:22:38] UFFTYPER: Unrecognized atom type: Fe5+2 (3)
[15:22:38] UFFTYPER: Unrecognized charge state for atom: 4
[15:22:38] UFFTYPER: Unrecognized atom type: Fe5+2 (5)
[15:22:38] UFFTYPER: Unrecognized charge state for atom: 6
[15:22:38] UFFTYPER: Unrecognized atom type: Fe5+2 (7)
RadicalsNotSupportedError: The OpenFF Toolkit does not currently support parsing molecules with S- and P-block radicals. Found 1 radical electrons on molecule [S]12[Fe]3[S]4[Fe]1[S]1[Fe]2[S]3[Fe]41.

Do you have any ideas how to omit that error?

2. Ligands with Atoms Lacking Parameters in Charge Calculation Methods:

List of Not Working Atoms in my DataSet

bad_atoms = ['Se','Fe','Ca','W','V','Co','As','Be','Mo','Te','Sb','Hg','Cr','Cu','Pd','Tb','Pr','Pb','Ir','Rh','Pt','Sn','Ni','Au','Zn','U','Ru','Cu']
  • Example SMILES: CCC1=C(C)C2=Cc3c(CC)c(C)c4n3[Rh@SP3]35n6c(c(C)c(CCC(=O)O)c6=CC6=[N+]3C(=C4)C(C)=C6CCC(=O)O)=CC1=[N+]25
  • Ligand ID: SF4
  • Error for Gasteigert:
[15:29:24] UFFTYPER: Unrecognized atom type: Rh3 (15)
  • Error for am1-bcc:
ValueError: No registered toolkits can provide the capability "assign_partial_charges" for args "()" and kwargs "{'molecule': Molecule with name '' and SMILES '[H][O][C](=[O])[C]([H])([H])[C]([H])([H])[C]1=[C]([C]([H])([H])[H])[C]2=[C]([H])[C]3=[N+]4[C](=[C]([H])[C]5=[C]([C]([H])([H])[C]([H])([H])[H])[C]([C]([H])([H])[H])=[C]6[C]([H])=[C]7[C]([C]([H])([H])[H])=[C]([C]([H])([H])[C]([H])([H])[C](=[O])[O][H])[C]8=[N+]7[Rh@@]4([N]2[C]1=[C]8[H])[N]65)[C]([C]([H])([H])[H])=[C]3[C]([H])([H])[C]([H])([H])[H]', 'partial_charge_method': 'am1bcc', 'use_conformers': None, 'strict_n_conformers': False, 'normalize_partial_charges': True, '_cls': <class 'openff.toolkit.topology.molecule.Molecule'>}"
Available toolkits are: [ToolkitWrapper around The RDKit version 2024.03.4, ToolkitWrapper around AmberTools version 22.0, ToolkitWrapper around Built-in Toolkit version None]
 ToolkitWrapper around The RDKit version 2024.03.4 <class 'openff.toolkit.utils.exceptions.ChargeMethodUnavailableError'> : partial_charge_method 'am1bcc' is not available from RDKitToolkitWrapper. Available charge methods are {'mmff94': {}, 'gasteiger': {}}
 ToolkitWrapper around AmberTools version 22.0 <class 'openff.toolkit.utils.exceptions.ConformerGenerationError'> : RDKit conformer generation failed.
 ToolkitWrapper around Built-in Toolkit version None <class 'openff.toolkit.utils.exceptions.ChargeMethodUnavailableError'> : Partial charge method "am1bcc"" is not supported by the Built-in toolkit. Available charge methods are {'zeros': {'rec_confs': 0, 'min_confs': 0, 'max_confs': 0}, 'formal_charge': {'rec_confs': 0, 'min_confs': 0, 'max_confs': 0}}```
 
* Output:

array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan]) <Unit('elementary_charge')>


Is there any chance to obtain charges for ligands with these specific atoms?

Maciek
@j-wags
Copy link
Member

j-wags commented Jul 9, 2024

Hi @maciejwisniewski-drugdiscovery,

Unfortunately, we don't currently support loading/handling transition metals (which I believe is that issue causing the "radicals" error with the iron-containing compound in part 1), and even if we did, the AM1BCC charge method does not support the elements in your bad_atoms list from item 2. Currently OpenFF focuses on supporting druglike organic molecules, and while we have plans to expand our domain of applicability in the coming years, it will be a few years before we can generally handle transition metals.

Cheers,
Jeff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants