public void TestAssignGasteigerSigmaMarsiliFactors_IAtomContainer()
        {
            GasteigerMarsiliPartialCharges peoe = new GasteigerMarsiliPartialCharges();

            IAtomContainer molecule = builder.NewAtomContainer();

            molecule.Atoms.Add(builder.NewAtom("C"));
            molecule.Atoms[0].Charge = 0.0;
            molecule.Atoms.Add(builder.NewAtom("F"));
            molecule.Atoms[1].Charge = 0.0;
            molecule.AddBond(molecule.Atoms[0], molecule.Atoms[1], BondOrder.Single);

            AddExplicitHydrogens(molecule);
            AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(molecule);
            CDK.LonePairElectronChecker.Saturate(molecule);
            foreach (var atom in molecule.Atoms)
            {
                atom.Charge = 0.0;
            }

            Assert.IsNotNull(peoe.AssignGasteigerSigmaMarsiliFactors(molecule).Length);
        }
예제 #2
0
        /// <summary>
        /// calculate the electronegativity of orbitals sigma.
        /// </summary>
        /// <param name="ac">IAtomContainer</param>
        /// <param name="atom">atom for which effective atom electronegativity should be calculated</param>
        /// <param name="maxIterations">The maximal number of Iterations</param>
        /// <param name="maxResonStruc">The maximal number of Resonance Structures</param>
        /// <returns>piElectronegativity</returns>
        public double CalculateSigmaElectronegativity(IAtomContainer ac, IAtom atom, int maxIterations, int maxResonStruc)
        {
            MaxIterations          = maxIterations;
            MaxResonanceStructures = maxResonStruc;

            double electronegativity = 0;

            try
            {
                if (!ac.Equals(acOldS))
                {
                    molSigma = ac.Builder.NewAtomContainer(ac);
                    peoe.MaxGasteigerIterations = MaxIterations;
                    peoe.AssignGasteigerMarsiliSigmaPartialCharges(molSigma, true);
                    marsiliFactors = peoe.AssignGasteigerSigmaMarsiliFactors(molSigma);

                    acOldS = ac;
                }
                int stepSize     = peoe.StepSize;
                int atomPosition = ac.Atoms.IndexOf(atom);
                int start        = (stepSize * (atomPosition) + atomPosition);

                electronegativity =
                    marsiliFactors[start]
                    + (molSigma.Atoms[atomPosition].Charge.Value * marsiliFactors[start + 1])
                    + (marsiliFactors[start + 2]
                       * (molSigma.Atoms[atomPosition].Charge.Value * molSigma.Atoms[atomPosition].Charge.Value));
                return(electronegativity);
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
            }

            return(electronegativity);
        }