Menu

#77 StereoDoubleBond error - Null Pointer

ambit2-smirks
open
None
5
2016-03-29
2014-02-03
Duece99
No

Hello,

I get this error:

Exception in thread "main" java.lang.NullPointerException
    at org.knime.cisrg.hyperstructures.smarts.SmartsParser.isAtomForStereoDoubleBond(SmartsParser.java:1814)
    at org.knime.cisrg.hyperstructures.smarts.SmartsParser.setDoubleBondsStereoInfo(SmartsParser.java:1777)
    at org.knime.cisrg.hyperstructures.smarts.SmartsParser.parse(SmartsParser.java:176)
    at org.knime.cisrg.hyperstructures.smarts.SmartsParser.parse(SmartsParser.java:117)
    at test.AMBITSMARTSStereoBug.main(AMBITSMARTSStereoBug.java:74)

When using this sample code

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

import org.knime.cisrg.hyperstructures.smarts.SmartsHelper;
import org.knime.cisrg.hyperstructures.smarts.SmartsParser;
import org.openscience.cdk.DefaultChemObjectBuilder;
import org.openscience.cdk.aromaticity.Aromaticity;
import org.openscience.cdk.aromaticity.ElectronDonation;
import org.openscience.cdk.exception.CDKException;
import org.openscience.cdk.graph.Cycles;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.io.iterator.IteratingSMILESReader;
import org.openscience.cdk.isomorphism.matchers.IQueryAtomContainer;
import org.openscience.cdk.smiles.SmilesGenerator;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;

public class AMBITSMARTSStereoBug {

    public static void main( String[] argv ) {

        File inputFile = new File( "/usr/users/people/edmund/Documents/PhD/workspace/cisrg/data/input/ergosterol_analogues.smi" );

        ArrayList<IAtomContainer> queries = new ArrayList<IAtomContainer>(5);

        IteratingSMILESReader isr = null;
        try {
            isr = new IteratingSMILESReader( new FileInputStream(inputFile), DefaultChemObjectBuilder.getInstance() );
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        while( isr.hasNext() ) {
            try {
                IAtomContainer molecule = isr.next();

                try {
                    AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(molecule);
                    //CDKHueckelAromaticityDetector.detectAromaticity(molecule);
                   // aromaticity.apply(molecule);
                } catch (CDKException e) {
                    //logger.debug(e.toString());
                    throw new CDKException(e.toString(), e);
                }

                queries.add( molecule );

            } catch( Exception e2 ) {
                e2.printStackTrace();
            }
        }

        try {
            isr.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        SmartsParser smartsParser = new SmartsParser( );
        SmilesGenerator sGenerator = new SmilesGenerator().isomeric().aromatic();

        try {
            for( IAtomContainer mol : queries ) {
                String refSMILES = sGenerator.create(mol);

                System.out.println( refSMILES ); 

                IQueryAtomContainer ref = smartsParser.parse( refSMILES );
            }
        } catch (CDKException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

with this SMILES file

CC(C)[C@@H](C)\C=C\[C@@H](C)[C@H]1C[C@H](O)C2=C3C=CC4=CC(=O)CC[C@]4(C)C3CC[C@]12C   CHEMBL2021472
CC(C)CCC[C@@H](C)[C@H]1CC(=O)C2=C3CC[C@H]4C[C@@H](O)CC[C@]4(C)[C@H]3CC[C@]12C   CHEMBL2104586
CC(=O)[C@H]1CCC2C3CC[C@H]4C[C@H](O)CC[C@]4(C)C3=CC[C@]12C   CHEMBL289862
CC[C@H](CC[C@@H](C)C1CC[C@H]2[C@@H]3CC=C4C[C@@H](O)CC[C@]4(C)[C@H]3CC[C@]12C)C(C)C  CHEMBL1875388
C[C@H](CCC=C(C)C)[C@@H]1CC[C@]2(C)C3=CC[C@H]4C(C)(C)[C@@H](O)CC[C@]4(C)C3=CC[C@@]12C    CHEMBL517452

The offending method's code that I have is here:

    boolean isAtomForStereoDoubleBond(IAtom atom)   
    {
        //Following elements could participate in a stereo double bond: C, N, P, Si
        if (atom.getSymbol().equals("C"))
            return true;
        if (atom.getSymbol().equals("N"))           
            return true;
        if (atom.getSymbol().equals("P"))           
            return true;
        if (atom.getSymbol().equals("Si"))          
            return true;        
        return false;       
    }

So I guess there's an atom which is missing a Symbol. I haven't figured out where in the SmartsParser code this actually happens, but I'm sure you can :-)

Two things I should note:
- when I delete the "isomeric()" method when making the SmilesGenerator object, this error doesn't occur.
- ignore the org.knime.cisrg.hyperstructures.smarts package reference - I copied over the source code to my directory which I'll delete at a later point once I've got my own project completed.

Thank you in advance,
Ed.

Discussion

  • Nina Jeliazkova

    Nina Jeliazkova - 2014-02-03
    • assigned_to: ntk
     
  • Nina Jeliazkova

    Nina Jeliazkova - 2015-11-23
    • Group: ambit2-www-2.7.5 --> ambit-3.0.1
     
  • Nina Jeliazkova

    Nina Jeliazkova - 2016-03-29
    • Group: ambit-3.0.2 --> ambit2-smirks
     

Log in to post a comment.