rdkit.Chem.SaltRemover module

class rdkit.Chem.SaltRemover.InputFormat

Bases: object

MOL = 'mol'
SMARTS = 'smarts'
SMILES = 'smiles'
class rdkit.Chem.SaltRemover.SaltRemover(defnFilename=None, defnData=None, defnFormat='smarts', useChirality=False)

Bases: object

StripMol(mol, dontRemoveEverything=False, sanitize=True)
>>> remover = SaltRemover(defnData="[Cl,Br]")
>>> len(remover.salts)
1
>>> mol = Chem.MolFromSmiles('CN(C)C.Cl')
>>> res = remover.StripMol(mol)
>>> res is not None
True
>>> res.GetNumAtoms()
4

Notice that all salts are removed:

>>> mol = Chem.MolFromSmiles('CN(C)C.Cl.Cl.Br')
>>> res = remover.StripMol(mol)
>>> res.GetNumAtoms()
4

Matching (e.g. “salt-like”) atoms in the molecule are unchanged:

>>> mol = Chem.MolFromSmiles('CN(Br)Cl')
>>> res = remover.StripMol(mol)
>>> res.GetNumAtoms()
4
>>> mol = Chem.MolFromSmiles('CN(Br)Cl.Cl')
>>> res = remover.StripMol(mol)
>>> res.GetNumAtoms()
4

Charged salts are handled reasonably:

>>> mol = Chem.MolFromSmiles('C[NH+](C)(C).[Cl-]')
>>> res = remover.StripMol(mol)
>>> res.GetNumAtoms()
4

Watch out for this case (everything removed):

>>> remover = SaltRemover()
>>> len(remover.salts)>1
True
>>> mol = Chem.MolFromSmiles('CC(=O)O.[Na]')
>>> res = remover.StripMol(mol)
>>> res.GetNumAtoms()
0

dontRemoveEverything helps with this by leaving the last salt:

>>> res = remover.StripMol(mol,dontRemoveEverything=True)
>>> res.GetNumAtoms()
4

but in cases where the last salts are the same, it can’t choose between them, so it returns all of them:

>>> mol = Chem.MolFromSmiles('Cl.Cl')
>>> res = remover.StripMol(mol,dontRemoveEverything=True)
>>> res.GetNumAtoms()
2
StripMolWithDeleted(mol, dontRemoveEverything=False)

Strips given molecule and returns it, with the fragments which have been deleted.

>>> remover = SaltRemover(defnData="[Cl,Br]")
>>> len(remover.salts)
1
>>> mol = Chem.MolFromSmiles('CN(C)C.Cl.Br')
>>> res, deleted = remover.StripMolWithDeleted(mol)
>>> Chem.MolToSmiles(res)
'CN(C)C'
>>> [Chem.MolToSmarts(m) for m in deleted]
['[Cl,Br]']
>>> mol = Chem.MolFromSmiles('CN(C)C.Cl')
>>> res, deleted = remover.StripMolWithDeleted(mol)
>>> res.GetNumAtoms()
4
>>> len(deleted)
1
>>> deleted[0].GetNumAtoms()
1
>>> Chem.MolToSmarts(deleted[0])
'[Cl,Br]'

Multiple occurrences of ‘Cl’ and without tuple destructuring

>>> mol = Chem.MolFromSmiles('CN(C)C.Cl.Cl')
>>> tup = remover.StripMolWithDeleted(mol)
>>> tup.mol.GetNumAtoms()
4
>>> len(tup.deleted)
1
>>> tup.deleted[0].GetNumAtoms()
1
>>> Chem.MolToSmarts(deleted[0])
'[Cl,Br]'
defnFilename = '/scratch/RDKit_2024_09/Data/Salts.txt'