Dear Nimal, You are using atoms to enumerate bonds and a bond has 2 atoms so the number of bonds are not the real ones.
Use this instead : for bond in molecule.GetBonds() bond.GetBondType() == … best regards, Guillaume De : nCloud <nimalnaser.cl...@gmail.com> Date : mardi, 28 avril 2020 à 05:06 À : "rdkit-discuss@lists.sourceforge.net" <rdkit-discuss@lists.sourceforge.net> Objet : [*External*] [Rdkit-discuss] Uniqueness of bonds 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 *********************************************************************************** DISCLAIMER This email and any files transmitted with it, including replies and forwarded copies (which may contain alterations) subsequently transmitted from Firmenich, are confidential and solely for the use of the intended recipient. The contents do not represent the opinion of Firmenich except to the extent that it relates to their official business. ***********************************************************************************
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss