diff --git a/ippisite/ippidb/tests.py b/ippisite/ippidb/tests.py index 13e1978a03bfe103fbfc03bb29894b56000db8d6..18e18452efc85853c8fda4b6a73e41bf3f5947f0 100644 --- a/ippisite/ippidb/tests.py +++ b/ippisite/ippidb/tests.py @@ -4,7 +4,7 @@ from django.test import TestCase from openbabel import vectorUnsignedInt from .models import Compound, CompoundTanimoto, create_tanimoto -from .utils import FingerPrinter, mol2smi, smi2mol +from .utils import FingerPrinter, mol2smi, smi2mol, smi2inchi, smi2inchikey class MolSmiTestCase(TestCase): """ @@ -22,6 +22,22 @@ class MolSmiTestCase(TestCase): def test_smi2mol2smi(self): self.assertTrue(re.compile(self.mol_str).match(smi2mol(self.smiles_str))) +class SmiInchi(TestCase): + """ + Test INCHI and INCHIKEY generation functions + """ + + def setUp(self): + self.smiles_str = "CC(C)C(=O)C1=C(C(=C(C(=C1)C(=O)C2=CC=C(C=C2)OC3=CC=CC=C3)O)O)O" + self.inchi_str = "InChI=1S/C23H20O6/c1-13(2)19(24)17-12-18(22(27)23(28)21(17)26)20(25)14-8-10-16(11-9-14)29-15-6-4-3-5-7-15/h3-13,26-28H,1-2H3" + self.inchikey_str = "CVVQMBDTMYUWTR-UHFFFAOYSA-N" + + def test_smi2inchi(self): + self.assertEqual(smi2inchi(self.smiles_str), self.inchi_str) + + def test_smi2inchikey(self): + self.assertEqual(smi2inchikey(self.smiles_str), self.inchikey_str) + class FingerPrinterTestCase(TestCase): diff --git a/ippisite/ippidb/utils.py b/ippisite/ippidb/utils.py index ec26172da08006064b4cd744c99aecc250879db0..d6fa1c04f39d7df7d0835627fe765c782d6f5231 100644 --- a/ippisite/ippidb/utils.py +++ b/ippisite/ippidb/utils.py @@ -16,6 +16,24 @@ def smi2mol(smi_string): pybel._operations['gen2D'].Do(m.OBMol) return m.write(format='mol') +smi2inchi_conv = ob.OBConversion() +smi2inchi_conv.SetInAndOutFormats("smi", "inchi") + +def smi2inchi(smi_string): + mol = ob.OBMol() + smi2inchi_conv.ReadString(mol, smi_string) + return smi2inchi_conv.WriteString(mol).strip() + +smi2inchikey_conv = ob.OBConversion() +smi2inchikey_conv.SetInAndOutFormats("smi", "inchi") +smi2inchikey_conv.SetOptions("K",smi2inchikey_conv.OUTOPTIONS) + +def smi2inchikey(smi_string): + mol = ob.OBMol() + smi2inchikey_conv.ReadString(mol, smi_string) + return smi2inchikey_conv.WriteString(mol).strip() + + class FingerPrinter(object): def __init__(self, name="FP4"):