示例#1
0
        public void DodecahedraneTest()
        {
            var mol = new Molecule();

            for (int i = 0; i < 20; i++)
            {
                mol.AddAtom("C");
            }
            mol.AddSingleBond(0, 1);
            mol.AddSingleBond(0, 4);
            mol.AddSingleBond(1, 2);
            mol.AddSingleBond(2, 7);
            mol.AddSingleBond(3, 4);
            mol.AddSingleBond(3, 8);
            mol.AddSingleBond(5, 10);
            mol.AddSingleBond(5, 11);
            mol.AddSingleBond(6, 11);
            mol.AddSingleBond(6, 12);
            mol.AddSingleBond(7, 13);
            mol.AddSingleBond(8, 14);
            mol.AddSingleBond(9, 10);
            mol.AddSingleBond(9, 14);
            mol.AddSingleBond(12, 17);
            mol.AddSingleBond(13, 18);
            mol.AddSingleBond(15, 16);
            mol.AddSingleBond(15, 19);
            mol.AddSingleBond(16, 17);
            mol.AddSingleBond(18, 19);

            mol.AddBond(0, 5, Molecule.BondOrder.Double);
            mol.AddBond(1, 6, Molecule.BondOrder.Double);
            mol.AddBond(2, 3, Molecule.BondOrder.Double);
            mol.AddBond(4, 9, Molecule.BondOrder.Double);
            mol.AddBond(7, 12, Molecule.BondOrder.Double);
            mol.AddBond(8, 13, Molecule.BondOrder.Double);
            mol.AddBond(10, 15, Molecule.BondOrder.Double);
            mol.AddBond(11, 16, Molecule.BondOrder.Double);
            mol.AddBond(17, 18, Molecule.BondOrder.Double);
            mol.AddBond(14, 19, Molecule.BondOrder.Double);

            for (int i = 0; i < 20; i++)
            {
                Assert.AreEqual(4, mol.GetTotalOrder(i), "Atom " + i + " has wrong order");
            }

            var mqg = new MoleculeQuotientGraph(mol);

            Console.Out.WriteLine(mqg);
            Assert.AreEqual(5, mqg.GetVertexCount());
            Assert.AreEqual(9, mqg.GetEdgeCount());
            Assert.AreEqual(3, mqg.NumberOfLoopEdges());
        }
示例#2
0
        public void MultipleBondedFragmentTest()
        {
            Molecule molA = new Molecule();

            molA.AddAtom("C");
            molA.AddAtom("C");
            molA.AddAtom("C");
            molA.AddAtom("H");
            molA.AddBond(0, 1, Molecule.BondOrder.Double);
            molA.AddSingleBond(0, 2);
            molA.AddSingleBond(0, 3);

            MoleculeSignature molSig         = new MoleculeSignature(molA);
            string            signatureFor0A = molSig.SignatureStringForVertex(0);

            Console.Out.WriteLine(signatureFor0A);

            Molecule molB = new Molecule();

            molB.AddAtom("C");
            molB.AddAtom("C");
            molB.AddAtom("C");
            molB.AddAtom("H");
            molB.AddSingleBond(0, 1);
            molB.AddBond(0, 2, Molecule.BondOrder.Double);
            molB.AddSingleBond(0, 3);

            molSig = new MoleculeSignature(molB);
            string signatureFor0B = molSig.SignatureStringForVertex(0);

            Console.Out.WriteLine(signatureFor0B);

            Assert.AreEqual(signatureFor0A, signatureFor0B);
        }
示例#3
0
        public void Cyclobut_2_ene()
        {
            Molecule mol = new Molecule();

            for (int i = 0; i < 4; i++)
            {
                mol.AddAtom("C");
            }
            mol.AddSingleBond(0, 1);
            mol.AddBond(0, 2, Molecule.BondOrder.Double);
            mol.AddBond(1, 3, Molecule.BondOrder.Double);
            mol.AddSingleBond(2, 3);
            MoleculeSignature molSignature = new MoleculeSignature(mol);

            Console.Out.WriteLine(molSignature.ToCanonicalString());
        }
示例#4
0
        public void MinimalTest()
        {
            Molecule mol = new Molecule();

            mol.AddAtom("C");
            mol.AddAtom("O");
            mol.AddAtom("N");
            mol.AddSingleBond(0, 1);
            mol.AddBond(0, 2, Molecule.BondOrder.Double);

            // TODO : test this somehow...
            //       MoleculeWriter.WriteToStream(System.out, mol);
        }
示例#5
0
        public void BenzeneTest()
        {
            Molecule mol = new Molecule();

            for (int i = 0; i < 6; i++)
            {
                mol.AddAtom("C");
            }
            mol.AddSingleBond(0, 1);
            mol.AddBond(1, 2, Molecule.BondOrder.Double);
            mol.AddSingleBond(2, 3);
            mol.AddBond(3, 4, Molecule.BondOrder.Double);
            mol.AddSingleBond(4, 5);
            mol.AddBond(5, 0, Molecule.BondOrder.Double);
            MoleculeSignature molSig     = new MoleculeSignature(mol);
            string            sigString0 = molSig.SignatureStringForVertex(0);

            for (int i = 1; i < 6; i++)
            {
                string sigStringI = molSig.SignatureStringForVertex(i);
                Assert.AreEqual(sigString0, sigStringI);
            }
        }
示例#6
0
        public void CocoTest()
        {
            Molecule moleculeA   = new Molecule();
            int      chainLength = 6;

            moleculeA.AddAtom("O");
            moleculeA.AddAtom("C");
            moleculeA.AddAtom("C");
            moleculeA.AddAtom("O");
            moleculeA.AddAtom("C");
            moleculeA.AddAtom("O");
            for (int i = 0; i < chainLength - 2; i++)
            {
                moleculeA.AddSingleBond(i, i + 1);
            }
            moleculeA.AddBond(chainLength - 2, chainLength - 1, Molecule.BondOrder.Double);
            //        moleculeA.AddBond(chainLength - 2, chainLength - 1, 1);

            Molecule moleculeB = new Molecule();

            moleculeB.AddAtom("O");
            moleculeB.AddAtom("C");
            moleculeB.AddAtom("C");
            moleculeB.AddAtom("C");
            moleculeB.AddAtom("O");
            moleculeB.AddAtom("O");
            moleculeB.AddSingleBond(0, 1);
            moleculeB.AddSingleBond(1, 3);
            moleculeB.AddSingleBond(2, 4);
            moleculeB.AddBond(2, 5, Molecule.BondOrder.Double);
            //        moleculeB.AddBond(2, 5, 1);
            moleculeB.AddSingleBond(3, 4);

            MoleculeSignature molSigA = new MoleculeSignature(moleculeA);
            string            sigA    = molSigA.SignatureStringForVertex(3);

            Console.Out.WriteLine(sigA);
            Console.Out.WriteLine("--------------------------------------");
            MoleculeSignature molSigB = new MoleculeSignature(moleculeB);
            string            sigB    = molSigB.SignatureStringForVertex(4);

            Console.Out.WriteLine(sigB);
            Assert.AreEqual(sigA, sigB);
        }
示例#7
0
        public void AromaticTest()
        {
            Molecule benzene = new Molecule();

            benzene.AddMultipleAtoms(6, "C");
            benzene.AddBond(0, 1, Molecule.BondOrder.Aromatic);
            benzene.AddBond(1, 2, Molecule.BondOrder.Aromatic);
            benzene.AddBond(2, 3, Molecule.BondOrder.Aromatic);
            benzene.AddBond(3, 4, Molecule.BondOrder.Aromatic);
            benzene.AddBond(4, 5, Molecule.BondOrder.Aromatic);
            benzene.AddBond(5, 0, Molecule.BondOrder.Aromatic);
            MoleculeSignature molSig = new MoleculeSignature(benzene);

            Console.Out.WriteLine(molSig.ToCanonicalString());
        }
示例#8
0
        private static Molecule MakeMolecule(List <string> block)
        {
            Molecule molecule = new Molecule();
            // counts are on the fourth line
            string countLine = block[3];
            int    atomCount = int.Parse(countLine.Substring(0, 3).Trim(), NumberFormatInfo.InvariantInfo);
            int    bondCount = int.Parse(countLine.Substring(3, 3).Trim(), NumberFormatInfo.InvariantInfo);

            // atom block starts on the fifth line (4th index)
            int atomLineStart = 4;
            int atomLineEnd   = atomCount + atomLineStart;

            for (int i = atomLineStart; i < atomLineEnd; i++)
            {
                string symbol    = block[i].Substring(30, 33).Trim();
                int    atomIndex = i - atomLineStart;
                molecule.AddAtom(atomIndex, symbol);
            }

            if (atomCount > 1)
            {
                // bond block starts right after the atom block
                int bondLineStart = atomLineEnd;
                int bondLineEnd   = bondLineStart + bondCount;
                for (int i = bondLineStart; i < bondLineEnd; i++)
                {
                    string bondLine    = block[i];
                    int    atomNumberA =
                        int.Parse(bondLine.Substring(0, 3).Trim(), NumberFormatInfo.InvariantInfo);
                    int atomNumberB =
                        int.Parse(bondLine.Substring(3, 3).Trim(), NumberFormatInfo.InvariantInfo);
                    int order = int.Parse(bondLine.Substring(7, 3).Trim(), NumberFormatInfo.InvariantInfo);
                    var o     = ConvertIntToBondOrder(order);
                    molecule.AddBond(atomNumberA - 1, atomNumberB - 1, o);
                }
            }
            return(molecule);
        }