private static void WriteHeader( TextWriter writer, Molecule molecule) { writer.Write('\n'); writer.Write(" Written by signature package"); writer.Write('\n'); writer.Write('\n'); int a = molecule.GetAtomCount(); int b = molecule.GetBondCount(); writer.Write($"{a,3:D}{b,3:D} 0 0 0 0 0 0 0 0999 V2000"); writer.Write('\n'); }
public void AddRing(int atomToAttachTo, int ringSize, Molecule molecule) { var numberOfAtoms = molecule.GetAtomCount(); var previous = atomToAttachTo; for (int i = 0; i < ringSize; i++) { molecule.AddAtom("C"); int current = numberOfAtoms + i; molecule.AddSingleBond(previous, current); previous = current; } molecule.AddSingleBond(numberOfAtoms, numberOfAtoms + (ringSize - 1)); }
public static void WriteToStream(Stream stream, Molecule molecule) { try { using (var writer = new StreamWriter(stream)) { WriteHeader(writer, molecule); for (int i = 0; i < molecule.GetAtomCount(); i++) { WriteAtom(writer, molecule, i); } for (int i = 0; i < molecule.GetBondCount(); i++) { WriteBond(writer, molecule, i); } writer.Write("M END"); writer.Write('\n'); } } catch (IOException) { } }
public static List <int> FindTetrahedralChiralCenters(Molecule molecule) { List <int> chiralCenterIndices = new List <int>(); MoleculeSignature molSig = new MoleculeSignature(molecule); List <string> signatureStrings = molSig.GetVertexSignatureStrings(); for (int i = 0; i < molecule.GetAtomCount(); i++) { int[] connected = molecule.GetConnected(i); if (connected.Length < 4) { continue; } else { string s0 = signatureStrings[connected[0]]; string s1 = signatureStrings[connected[1]]; string s2 = signatureStrings[connected[2]]; string s3 = signatureStrings[connected[3]]; if (string.Equals(s0, s1, StringComparison.Ordinal) || string.Equals(s0, s2, StringComparison.Ordinal) || string.Equals(s0, s3, StringComparison.Ordinal) || string.Equals(s1, s2, StringComparison.Ordinal) || string.Equals(s1, s3, StringComparison.Ordinal) || string.Equals(s2, s3, StringComparison.Ordinal)) { continue; } else { chiralCenterIndices.Add(i); } } } return(chiralCenterIndices); }