示例#1
0
        public static double syntheticaccessability(OBMol mol)
        {
            mol.FindChiralCenters();
            VectorpRing ringdata = mol.GetSSSR();
            double      fring    = 0;

            //int rings = (double)ringdata.Count;
            foreach (OBRing r in ringdata)
            {
                var n = r.Size();
                fring = fring + n * 6;
            }
            double ftype    = 0;
            double fconnect = 0;
            int    nchiral  = 0;

            foreach (OBAtom a in mol.Atoms())
            {
                if (a.GetAtomicNum() == 6)
                {
                    ftype = ftype + 3;
                }
                else
                {
                    ftype = ftype + 6;
                }

                int bcount = 0;
                foreach (OBBond b in a.Bonds())
                {
                    bcount++; //get the atom degree by counting bonds
                }
                switch (bcount)
                {
                case 4: {
                    fconnect = fconnect + 24;
                    break;
                }

                case 3: {
                    fconnect = fconnect + 12;
                    break;
                }

                case 2: {
                    fconnect = fconnect + 6;
                    break;
                }

                case 1: {
                    fconnect = fconnect + 3;
                    break;
                }
                }
                if (a.IsChiral())
                {
                    nchiral++;
                }
            }
            //for indole() ftype= 72, fring = 66, fconnect = 129
            //fring
            double fchiral = nchiral * 20;
            double score   = fchiral + fconnect + ftype + fring;

            return(score);
        }