示例#1
0
 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');
 }
示例#2
0
        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));
        }
示例#3
0
 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)
     {
     }
 }
示例#4
0
        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);
        }