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