Hi

Is there a way to detect implausibility of molecules in general but in 
particular about valence errors:

E.g. the SMILES string "[CH4]=O" can of course be parsed to a formally correct 
molecule, but it obviously has a valence error on the C atom.
First, I thought the org.openscience.cdk.validate.ValidatorEngine is the 
instrument of choice, but either I'm using it wrongly or it is not in the least 
concerned about such a molecule.
But after all, for "[O-3]" it works as expected, I'm getting a Warning "Atom O 
has charge -3" from the BasicValidator.

I'm running this kind of code:

import org.openscience.cdk.exception.InvalidSmilesException;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.silent.SilentChemObjectBuilder;
import org.openscience.cdk.smiles.SmilesParser;
import org.openscience.cdk.validate.BasicValidator;
import org.openscience.cdk.validate.ValidationReport;
import org.openscience.cdk.validate.ValidationTest;
import org.openscience.cdk.validate.ValidatorEngine;

public class Snippet {

    private static boolean validate(IAtomContainer molecule) {
        ValidatorEngine validatorEngine = new ValidatorEngine();
        validatorEngine.addValidator(new BasicValidator());
        ValidationReport report = validatorEngine.validateMolecule(molecule);
        for (ValidationTest error : report.getErrors()){
            System.err.println(error.getDetails());
        }
        for (ValidationTest cdkerror : report.getCDKErrors()){
            System.err.println(cdkerror.getDetails());
        }
        for (ValidationTest warning : report.getWarnings()){
            System.err.println(warning.getDetails());
        }
        return report.getCount() == report.getOKCount();
    }
    public static void main(String[] args) throws InvalidSmilesException {
        SmilesParser sp  = new 
SmilesParser(SilentChemObjectBuilder.getInstance());
        System.out.println("[O-3] is valid: 
"+validate(sp.parseSmiles("[O-3]")));
        System.out.println("[CH4]=O is valid: 
"+validate(sp.parseSmiles("[CH4]=O")));
    }
}

and I'm getting this kind of output:

Atom O has charge -3
[O-3] is valid: false
[CH4]=O is valid: true


Can you give me guidance?

Many thanks and greetings,
Emanuel
------------------------------------------------------------------------------
_______________________________________________
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user

Reply via email to