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()); }
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); }
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()); }
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); }
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); } }
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); }
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()); }
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); }