示例#1
0
        /// <summary>
        /// Calculate effective atom polarizability.
        /// </summary>
        /// <param name="atomContainer">IAtomContainer</param>
        /// <param name="atom">atom for which effective atom polarizability should be calculated</param>
        /// <param name="influenceSphereCutOff">cut off for spheres which should taken into account for calculation</param>
        /// <param name="addExplicitH">if set to true, then explicit H's will be added, otherwise it assumes that they have
        ///  been added to the molecule before being called</param>
        /// <returns>polarizabilitiy</returns>
        public static double CalculateGHEffectiveAtomPolarizability(IAtomContainer atomContainer, IAtom atom, int influenceSphereCutOff, bool addExplicitH)
        {
            double polarizabilitiy = 0;

            IAtomContainer acH;

            if (addExplicitH)
            {
                acH = atomContainer.Builder.NewAtomContainer(atomContainer);
                AddExplicitHydrogens(acH);
            }
            else
            {
                acH = atomContainer;
            }

            var startAtom = new List <IAtom>(1);

            startAtom.Insert(0, atom);
            double bond;

            polarizabilitiy += GetKJPolarizabilityFactor(acH, atom);
            for (int i = 0; i < acH.Atoms.Count; i++)
            {
                if (!acH.Atoms[i].Equals(atom))
                {
                    bond = PathTools.BreadthFirstTargetSearch(acH, startAtom, acH.Atoms[i], 0, influenceSphereCutOff);
                    if (bond == 1)
                    {
                        polarizabilitiy += GetKJPolarizabilityFactor(acH, acH.Atoms[i]);
                    }
                    else
                    {
                        polarizabilitiy += (Math.Pow(0.5, bond - 1) * GetKJPolarizabilityFactor(acH, acH.Atoms[i]));
                    } //if bond==0
                }     //if !=atom
            }         //for
            return(polarizabilitiy);
        }