Conversion of Molecules with HN to SMILES

User 3898c01b63

09-10-2014 00:33:09

Regularly, BindingDB populates new molecules to the database.  BindingDB uses JChem APIs for this process.  A enclosed molfile from US Patents Office is converted to a wrong SMILES.


BindingDB_111821.mol    OC(=O)CCC(=O)N1CCc2cc(ccc12)S(=O)(=O)N1CCN(CC1)c1cccc(Cl)c1
BindingDB_111837.mol    OC(=O)CCC(=O)N1CCc2cc(ccc12)S(=O)(=O)N1CCN(CC1)c1cccc(Cl)c1
BindingDB_111837M.mol OC(=O)CNC(=O)N1CCc2cc(ccc12)S(=O)(=O)N1CCN(CC1)c1cccc(Cl)c1


  BindingDB_111821.mol and BindingDB_111837.mol  are converted to the same SMILES.


BindingDB_111837.mol has a section in its MOL file:


A   28
HN


BindingDB_111837.mol is imported to a Marvin applet, whose N (28) is replaced with C, and back to N, and exported to BindingDB_111837M.mo.


Is there a way in JChem programmatically reorganizing the HN part like BindingDB_111837M.mol to retain the molecule?


Thank you in advance for your help.

ChemAxon 044c6721bc

09-10-2014 11:19:57

Hi,


The "A 28 NH" part is an atom alias. What do you want to do exactly? Do you want to get a smiles with this NH part except the C?


Janos

User 3898c01b63

09-10-2014 17:12:43

Hi Janos,


  Yes, I would like to get the correct SMILES with NH not C.  It is very important to us.

ChemAxon 044c6721bc

10-10-2014 09:59:31

Hi,


It is possible from API, with the following method:


-after import, iterate over the atoms


-check if the atom is an alias atom


-process the atom alias string  and convert it to an atomic number


-change the atomic numbert from alias atom to the new one


-export to smiles


Can you write the code, or do you want a code example?


Janos

User 3898c01b63

10-10-2014 13:05:12

Hi Janos,


  Thank you for the kind reply.


  Please give the example codes to do that at your convenience.

ChemAxon 044c6721bc

13-10-2014 11:02:25

Hi,


Try this:


        MolImporter molImporter = new MolImporter(filename);
        Molecule molecule = molImporter.read();
        for(MolAtom molAtom : molecule.getAtomArray()) {
            String alias = molAtom.getAliasstr();
            if(alias != null) {
                alias = alias.replace("H", "");
                molAtom.setAtno(PeriodicSystem.findAtomicNumber(alias));
            }
        }

        System.out.println(MolExporter.exportToFormat(molecule, "smiles"));


 


Janos