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); } } }
public void TestSetMaxResonStruc_Int() { PiElectronegativity pe = new PiElectronegativity(); int maxRes = 10; pe.MaxResonanceStructures = maxRes; Assert.AreEqual(maxRes, pe.MaxResonanceStructures); }
public void TestSetMaxIterations_Int() { PiElectronegativity pe = new PiElectronegativity(); int maxIter = 10; pe.MaxIterations = maxIter; Assert.AreEqual(maxIter, pe.MaxIterations); }
/// <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); }
public void TestGetMaxResonStruc() { PiElectronegativity pe = new PiElectronegativity(); Assert.AreEqual(50, pe.MaxResonanceStructures); }
public void TestGetMaxIterations() { PiElectronegativity pe = new PiElectronegativity(); Assert.AreEqual(6, pe.MaxIterations); }