|
From: Stephanie C. <SC...@sc...> - 2013-02-01 15:40:22
|
Hi,
I have some JoeLib code I am trying to convert to JoeLib2.
When I run the JoeLib2 code, I get this error for some smiles string inputs (example below). But it runs just fine in the JoeLib code. Did I miss something in the conversion?
Exception in thread "main" java.lang.RuntimeException: : Molecule modification counter must be zero.
at joelib2.molecule.types.AtomPropertyHelper.accessAtomProperty(Unknown Source)
at joelib2.molecule.types.AtomPropertyHelper.getLabelCache(Unknown Source)
at joelib2.molecule.types.AtomPropertyHelper.getBooleanAtomProperty(Unknown Source)
at joelib2.molecule.types.AtomPropertyHelper.getBooleanAtomProperty(Unknown Source)
at joelib2.feature.types.atomlabel.AtomIsAlphaBetaUnsaturated.isValue(Unknown Source)
at joelib2.molecule.AtomHelper.getNBV3Dvalence1(Unknown Source)
at joelib2.molecule.AtomHelper.getNewBondVector3D(Unknown Source)
at joelib2.molecule.ProtonationHelper.addHydrogens(Unknown Source)
at joelib2.molecule.BasicConformerMolecule.addHydrogens(Unknown Source)
at edu.scripps.fl.match.test.CleanMoleculeJoeLib2Test.main(CleanMoleculeJoeLib2Test.java:20)
What I really don't understand is that just before I run the function mol.addHydrogens() the modificationCounter is 0.
JoeLib:
JOESmilesParser parser = new JOESmilesParser();
JOEAromaticTyper typer = JOEAromaticTyper.instance();
JOEMol mol = new JOEMol();
parser.smiToMol(mol, "c1(N2CCC(O)CC2)c3c(nc(cc(c4cccc(OC)c4)n5)n15)CCCC3");
typer.assignAromaticFlags(mol);
mol.addHydrogens();
for(AtomIterator ait = mol.atomIterator(); ait.hasNext(); ) {
JOEAtom atom = ait.nextAtom();
if (atom.isCarbon() && atom.getFormalCharge() > 0)
atom.setFormalCharge(0);
}
JoeLib2:
SMILESParser parser = new SMILESParser();
AromaticityTyper typer = BasicAromaticityTyper.instance();
Molecule mol = new BasicConformerMolecule();
parser.smiles2molecule(mol, "c1(N2CCC(O)CC2)c3c(nc(cc(c4cccc(OC)c4)n5)n15)CCCC3");
typer.assignAromaticFlags(mol, null, null);
mol.addHydrogens();
for(AtomIterator ait = mol.atomIterator(); ait.hasNext(); ) {
Atom atom = ait.nextAtom();
if (atom.getAtomicNumber() == 6 && atom.getFormalCharge() > 0)
atom.setFormalCharge(0);
}
Thank you for your help,
Stephanie
|