コード例 #1
0
        public void TestCalculatePiElectronegativity_IAtomContainer_IAtom_Int_Int()
        {
            PiElectronegativity pe = new PiElectronegativity();

            IAtomContainer molecule = builder.NewAtomContainer();

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

            AddExplicitHydrogens(molecule);
            AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(molecule);
            CDK.LonePairElectronChecker.Saturate(molecule);

            for (int i = 0; i < molecule.Atoms.Count; i++)
            {
                if (i == 0)
                {
                    Assert.AreNotSame(0.0, pe.CalculatePiElectronegativity(molecule, molecule.Atoms[i], 6, 50));
                }
                else
                {
                    Assert.AreEqual(0.0, pe.CalculatePiElectronegativity(molecule, molecule.Atoms[i], 6, 50), 0.001);
                }
            }
        }
コード例 #2
0
        public void TestSetMaxResonStruc_Int()
        {
            PiElectronegativity pe = new PiElectronegativity();
            int maxRes             = 10;

            pe.MaxResonanceStructures = maxRes;
            Assert.AreEqual(maxRes, pe.MaxResonanceStructures);
        }
コード例 #3
0
        public void TestSetMaxIterations_Int()
        {
            PiElectronegativity pe = new PiElectronegativity();
            int maxIter            = 10;

            pe.MaxIterations = maxIter;
            Assert.AreEqual(maxIter, pe.MaxIterations);
        }
コード例 #4
0
        /// <summary>
        /// calculate the stabilization of orbitals when they contain deficiency of charge.
        /// </summary>
        /// <param name="atomContainer">the molecule to be considered</param>
        /// <param name="atom">IAtom for which effective atom StabilizationCharges factor should be calculated</param>
        /// <returns>stabilizationValue</returns>
        public static double CalculatePositive(IAtomContainer atomContainer, IAtom atom)
        {
            /* restrictions */
            //        if(atomContainer.GetConnectedSingleElectronsCount(atom) > 0 || atom.FormalCharge != 1){
            if (atom.FormalCharge != 1)
            {
                return(0.0);
            }

            // only must be generated all structures which stabilize the atom in question.
            StructureResonanceGenerator gRI = new StructureResonanceGenerator();
            var reactionList = gRI.Reactions.ToList();

            reactionList.Add(new HyperconjugationReaction());
            gRI.Reactions = reactionList;
            var resonanceS = gRI.GetStructures(atomContainer);
            var containerS = gRI.GetContainers(atomContainer);

            if (resonanceS.Count < 2) // meaning it was not find any resonance structure
            {
                return(0.0);
            }

            int positionStart = atomContainer.Atoms.IndexOf(atom);

            var result1   = new List <double>();
            var distance1 = new List <int>();

            resonanceS.RemoveAt(0);// the first is the initial structure
            foreach (var resonance in resonanceS)
            {
                if (resonance.Atoms.Count < 2) // resonance with only one atom donnot have resonance
                {
                    continue;
                }

                ShortestPaths shortestPaths = new ShortestPaths(resonance, resonance.Atoms[positionStart]);

                /* search positive charge */

                PiElectronegativity electronegativity = new PiElectronegativity();

                foreach (var atomP in resonance.Atoms)
                {
                    IAtom atomR = atomContainer.Atoms[resonance.Atoms.IndexOf(atomP)];
                    if (containerS[0].Contains(atomR))
                    {
                        electronegativity.MaxIterations = 6;
                        double result = electronegativity.CalculatePiElectronegativity(resonance, atomP);
                        result1.Add(result);

                        int dis = shortestPaths.GetDistanceTo(atomP);
                        distance1.Add(dis);
                    }
                }
            }
            /* logarithm */
            double value = 0.0;
            double sum   = 0.0;

            var itDist = distance1.GetEnumerator();

            foreach (var ee in result1)
            {
                double suM = ee;
                if (suM < 0)
                {
                    suM = -1 * suM;
                }
                itDist.MoveNext();
                sum += suM * Math.Pow(0.67, itDist.Current);
            }
            value = sum;

            return(value);
        }
コード例 #5
0
        public void TestGetMaxResonStruc()
        {
            PiElectronegativity pe = new PiElectronegativity();

            Assert.AreEqual(50, pe.MaxResonanceStructures);
        }
コード例 #6
0
        public void TestGetMaxIterations()
        {
            PiElectronegativity pe = new PiElectronegativity();

            Assert.AreEqual(6, pe.MaxIterations);
        }