Ei,

I've been using 3 class ( AtomContainer, UniversallsomorphismTester and Molecules) which I've modified.  And I think that they are interesting.

A) knowledge if a atom has single electron: AtomContainer Class: 
                                            1: New function - getSingleElectron
/**
*  Returns an array of all SingleElectron connected to the given atom.
*
*@param  atom  Description of the Parameter
*@return       The array of SingleElectron of this AtomContainer
*/
public SingleElectron[] getSingleElectron(Atom atom)
{
    Vector lps = new Vector();
    for (int i = 0; i < getElectronContainerCount(); i++)
    {
        if ((electronContainers[i] instanceof SingleElectron) && (((SingleElectron) electronContainers[i]).contains(atom)))
        {
            lps.add(electronContainers[i]);
        }
    }
SingleElectron[] result = new SingleElectron[lps.size()];
lps.copyInto(result);
return result;
}

                                            2: New Function - getSingleElectronSum
/**
*  Returns the sum of the SingleElectron for a given Atom.
*
*@param  atom  Description of the Parameter
*@return       The array of SingleElectron of this AtomContainer
*/
public double getSingleElectronSum(Atom atom)
{
    double count = 0;
    Vector lps = new Vector();
    for (int i = 0; i <  getElectronContainerCount(); i++)
    {
            if ((electronContainers[i] instanceof SingleElectron) && (((SingleElectron) electronContainers[i]).contains(atom)))
        {
            count++;
        }
    }
return count;
}


B)  Problems with compare to molecules: UniversallsomorphismTester: extension Inserted into nodeConstructor. Now not only create an association node between symbolAtom and symbolAtom but Hydrogen for this atom, its charge and its singleElectrons.
Example:
(bondsA1[i].getAtomAt(0).getSymbol().equals(bondsA2[j].getAtomAt(0).getSymbol())
...
(bondsA1[i].getAtomAt(0).getHydrogenCount() == bondsA2[j].getAtomAt(0).getHydrogenCount())
...
(bondsA1[i].getAtomAt(0).getFormalCharge() == bondsA2[j].getAtomAt(0).getFormalCharge())
...
(ac1.getSingleElectronSum(bondsA1[i].getAtomAt(0))  == ac2.getSingleElectronSum(bondsA2[j].getAtomAt(0))

...

C) Problems with a molecule to clone: Molecules: Into clone function I've inserted a funtion to compare for each atom  these funcionalities und adds in this new cloned molecule those funcionalities that the OBJECT.clone function cann't clone (Ohh!!). Naturally the return of the function is a Object.


I hope you can have a look at these new proposal to modify

Thanks,
Miquel