Example #1
0
        public void CheckCanonicalIsUnique(Molecule molecule)
        {
            Console.Out.WriteLine("isUnique?" + molecule);
            AtomPermutor permutor                   = new AtomPermutor(molecule);
            string       canonicalStringForm        = null;
            bool         isUnique                   = true;
            bool         atLeastOneCanonicalExample = false;

            MoleculeSignature initialMolSig = new MoleculeSignature(molecule);

            if (initialMolSig.IsCanonicallyLabelled())
            {
                atLeastOneCanonicalExample = true;
                canonicalStringForm        = initialMolSig.ReconstructCanonicalEdgeString();
            }

            foreach (Molecule permutation in permutor)
            {
                MoleculeSignature molSig = new MoleculeSignature(permutation);
                if (molSig.IsCanonicallyLabelled())
                {
                    string stringForm = molSig.ReconstructCanonicalEdgeString();
                    if (canonicalStringForm == null)
                    {
                        canonicalStringForm        = stringForm;
                        atLeastOneCanonicalExample = true;
                    }
                    else
                    {
                        if (canonicalStringForm.Equals(stringForm))
                        {
                            continue;
                        }
                        else
                        {
                            // not unique if there is more than one string form
                            isUnique = false;
                            break;
                        }
                    }
                }
            }
            Assert.IsTrue(isUnique, "Canonical example is not unique");
            Assert.IsTrue(atLeastOneCanonicalExample, "No canonical example");
        }
Example #2
0
        public void ChoTest()
        {
            Molecule mol = new Molecule();

            mol.AddAtom("C");
            mol.AddAtom("H");
            mol.AddAtom("O");
            mol.AddSingleBond(0, 1);
            mol.AddSingleBond(0, 2);
            MoleculeSignature firstSig       = new MoleculeSignature(mol, InvariantType.Integer);
            string            firstSigString = firstSig.ToCanonicalString();

            Console.Out.WriteLine(firstSigString);
            AtomPermutor permutor = new AtomPermutor(mol);

            foreach (Molecule pMol in permutor)
            {
                MoleculeSignature pSig       = new MoleculeSignature(pMol, InvariantType.Integer);
                string            pSigString = pSig.ToCanonicalString();
                Console.Out.WriteLine(pSigString);
            }
        }