Hi,

I get a NoSuchAtomException when executing the following code (that I
inherited):

public static IAtomContainer extractSubstructure(IAtomContainer
source, List<IAtom> atoms) {
    IAtomContainer output =
SilentChemObjectBuilder.getInstance().newAtomContainer();
    int k = 0;
    for (IAtom atom : atoms) {
        output.addAtom(atom);
        source.getConnectedLonePairsList(atom).forEach(lp ->
output.addLonePair(lp));
        source.getConnectedSingleElectronsList(atom).forEach(se ->
output.addSingleElectron(se));
        k++;
        for (int i = k; i < atoms.size(); i++) {
            IBond bond = source.getBond(atom, atoms.get(i));
            if (bond != null) {
                output.addBond(bond);
            }
        }
    }
    return output;
}

The stack trace starts at the line with
output.addBond(bond);

and continues with the following lines:

org.openscience.cdk.exception.NoSuchAtomException: Atom is not a
member of this AtomContainer
        at 
app//org.openscience.cdk.silent.AtomContainer2.getAtomRef(AtomContainer2.java:185)
        at 
app//org.openscience.cdk.silent.AtomContainer2.newBondRef(AtomContainer2.java:221)
        at 
app//org.openscience.cdk.silent.AtomContainer2.addBond(AtomContainer2.java:908)

The exception *isn't* thrown if I replace the instantiation of the
IAtomContainer output with
IAtomContainer output = new AtomContainer();
I understand that the exception has something to do with the way
AtomContainer2 is implemented, but I don't know how to switch to the
AtomContainer2 implementation and still retain the intent of the code -
which is to only add atoms, their connected LPs, their connected single
electrons and their connected bonds, but not connected atoms - to the
returned subgraph. Best
Uli
_______________________________________________
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user

Reply via email to