Hi RDKiters,
I recently started using this wonderful package and I have been getting
familiarized with many of its capabilities.
The problem I am working on now is to determine the number of individual
bonds in any given molecule. I am able to classify the groups in to single,
double or triple and aromatic; however, it seems in some cases some bonds
are recounted. As an example based on my minimum working example (MWE)
given below; ethane should provide only 1 single bond (output also given);
propane should give 2 single bonds, but every time an additional bond is
counted. Another example would be of 1,3-hexadien-5-yne, which has 2 double
and 1 triple bond, but the output has 3 double bonds.
The problem, I believe, is due to the function I created does not consider
the uniqueness of the bonds; how can the uniqueness of the bond be
considered with RDKit?
*MWE*
from rdkit import Chem
def n_bonds(molecule):
molecule = Chem.MolFromSmiles(molecule)
fuel_bonds = {'single': 0, 'double': 0, 'triple': 0, 'aromatic': 0}
for atom in molecule.GetAtoms():
if str(atom.GetBonds()[0].GetBondType()) == 'SINGLE':
fuel_bonds['single'] += 1
elif str(atom.GetBonds()[0].GetBondType()) == 'DOUBLE':
fuel_bonds['double'] += 1
elif str(atom.GetBonds()[0].GetBondType()) == 'TRIPLE':
fuel_bonds['triple'] += 1
elif str(atom.GetBonds()[0].GetBondType()) == 'AROMATIC':
fuel_bonds['aromatic'] += 1
return fuel_bonds
smiles_test = [ 'CC', # 1. ethane
'CCC', # 2. propane
'C1CC1', # 3. cyclopropane
'C1CCC1', # 4. cyclobutane
'CC(C)(C)C', # 5. neopentane
'CCCCC1=CC=CC=C1', # 6. butylbenzene
'CCC(CC)CCC(C)C', # 7. 5-ethyl-3-methylheptane
'CCCCCC=CC=CC=C', # 8. 1,3,5-undecatriene
'C=CC=CC#C', # 9. 1,3-Hexadien-5-yne
'CC#CC#CC#CC=CC=CCCCC=C'] # 10.
Hexadeca-1,6,8-triene-10,12,14-triyne
for i in range(len(smiles_test)):
f = n_bonds(smiles_test[i])
print i+1, '-', f
*Output*
1 - {'double': 0, 'single': 2, 'aromatic': 0, 'triple': 0}
2 - {'double': 0, 'single': 3, 'aromatic': 0, 'triple': 0}
3 - {'double': 0, 'single': 3, 'aromatic': 0, 'triple': 0}
4 - {'double': 0, 'single': 4, 'aromatic': 0, 'triple': 0}
5 - {'double': 0, 'single': 5, 'aromatic': 0, 'triple': 0}
6 - {'double': 0, 'single': 5, 'aromatic': 5, 'triple': 0}
7 - {'double': 0, 'single': 10, 'aromatic': 0, 'triple': 0}
8 - {'double': 3, 'single': 8, 'aromatic': 0, 'triple': 0}
9 - {'double': 3, 'single': 2, 'aromatic': 0, 'triple': 1}
10 - {'double': 3, 'single': 10, 'aromatic': 0, 'triple': 3}
Regards,
Nimal
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss