亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? gasteigerpepepartialcharges.java

?? 化學(xué)圖形處理軟件
?? JAVA
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*  $RCSfile$
 *  $Author: miguelrojasch $
 *  $Date: 2006-05-11 10:17:36 +0200 (Do, 11 Mai 2006) $
 *  $Revision: 6217 $
 *
 *  Copyright (C) 2004-2007  Miguel Rojas <miguel.rojas@uni-koeln.de>
 *
 *  Contact: cdk-devel@list.sourceforge.net
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2.1
 *  of the License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 */
package org.openscience.cdk.charges;

import org.openscience.cdk.CDKConstants;
import org.openscience.cdk.aromaticity.HueckelAromaticityDetector;
import org.openscience.cdk.config.AtomTypeFactory;
import org.openscience.cdk.exception.CDKException;
import org.openscience.cdk.interfaces.*;
import org.openscience.cdk.reaction.IReactionProcess;
import org.openscience.cdk.reaction.type.BreakingBondReaction;
import org.openscience.cdk.reaction.type.HyperconjugationReaction;
import org.openscience.cdk.tools.LoggingTool;
import org.openscience.cdk.tools.StructureResonanceGenerator;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;

import java.io.IOException;

/**
 * <p>The calculation of the Gasteiger (PEPE) partial charges is based on 
 * {@cdk.cite Saller85}. This class doesn't implement the original method of the Marsili but the 
 * method based on H. Saller which is described from Petra manual version 2.6</p> 
 * <p>They are calculated by generating all valence bond(resonance) structures
 * for this system and then weighting them on the basis of pi-orbital electronegativies
 * and formal considerations based on PEPE (Partial Equalization of pi-electronegativity).</p>
 * 
 * @author      Miguel Rojas
 * 
 * @cdk.module  charges
 * @cdk.created 2006-05-14
 * @cdk.keyword partial atomic charges
 * @cdk.keyword charge distribution
 * @cdk.keyword electronegativities, partial equalization of orbital
 * @cdk.keyword PEPE
 * @see GasteigerMarsiliPartialCharges
 */
public class GasteigerPEPEPartialCharges {
	/** max iterations */
	private double MX_ITERATIONS = 8;
	/** max number of resonance structures to be searched*/
	private int MX_RESON = 50;
	private int STEP_SIZE = 5;
	private AtomTypeFactory factory;
	/** Flag is set if the formal charge of a chemobject is changed due to resonance.*/
	private static int ISCHANGEDFC = 0;
	
	/** Corresponds an empirical influence between the electrostatic potential and
	 * the neighbours.*/
	private double fE = 1.1;/*1.1*/
	/** Scalle factor which makes same heavay for all structures*/
	private double fS = 0.37;
	
	
	
	private LoggingTool logger = new LoggingTool(GasteigerPEPEPartialCharges.class);

	
	/**
	 *  Constructor for the GasteigerPEPEPartialCharges object
	 */
	public GasteigerPEPEPartialCharges() { }
	/**
	 *  Sets the maxGasteigerIters attribute of the GasteigerPEPEPartialCharges
	 *  object
	 *
	 *@param  iters  The new maxGasteigerIters value
	 */
	public void setMaxGasteigerIters(double iters) {
		MX_ITERATIONS = iters;
	}
	/**
	 *  Sets the maximum resonance structures to be searched
	 *
	 *@param  numbReson  The number of resonance Structures to be searched
	 */
	public void setMaxResoStruc(int numbReson) {
		MX_RESON = numbReson;
	}
	
	/**
	 *  Main method which assigns Gasteiger partial pi charges. 
	 *  
	 *
	 *@param  ac             AtomContainer
	 *@param  addCharge      unused
	 *@return                AtomContainer with partial charges
	 *@exception  Exception  Possible Exceptions
	 */
	public IAtomContainer assignGasteigerPiPartialCharges(IAtomContainer ac, boolean setCharge) throws Exception {
//		logger.debug("smiles1: "+(new SmilesGenerator()).createSMILES((IMolecule) ac));
		IAtomContainerSet setHI = null;
		
		/*0: remove charge, and possible flag ac*/
		for(int j = 0 ; j < ac.getAtomCount(); j++){
			ac.getAtom(j).setCharge(0.0);
			ac.getAtom(j).setFlag(ISCHANGEDFC, false);
		}
		for(int j = 0 ; j < ac.getBondCount(); j++){
			ac.getBond(j).setFlag(ISCHANGEDFC, false);
		}
		
		/*1: detect resonance structure*/
		StructureResonanceGenerator gR = new StructureResonanceGenerator(true,true,true,true,false,false,MX_RESON);/*according G. should be integrated the breaking bonding*/
		IAtomContainerSet iSet = gR.getAllStructures(ac);
//		logger.debug("iset: "+iSet.getAtomContainerCount());
		
		/* detect hyperconjugation interactions */
		setHI = getHyperconjugationInteractions(ac, iSet);

		if(setHI != null) {
			if(	setHI.getAtomContainerCount() != 0)
				iSet.add(setHI);
//		logger.debug("isetTT: "+iSet.getAtomContainerCount());
		}
		if(iSet.getAtomContainerCount() < 2)
			return ac;
		
		/*2: search whose atoms which don't keep their formal charge and set flags*/
		double[][] sumCharges = new double[iSet.getAtomContainerCount()][ac.getAtomCount( )];
		for(int i = 1; i < iSet.getAtomContainerCount() ; i++){
			IAtomContainer iac = iSet.getAtomContainer(i);
			for(int j = 0 ; j < iac.getAtomCount(); j++)
				sumCharges[i][j] = iac.getAtom(j).getFormalCharge();
			
		}
		for(int i = 1; i < iSet.getAtomContainerCount() ; i++){
			IAtomContainer iac = iSet.getAtomContainer(i);
			int count = 0;
			for(int j = 0 ; j < ac.getAtomCount(); j++)
				if(count < 2)
				if(sumCharges[i][j] != ac.getAtom(j).getFormalCharge()){
					ac.getAtom(j).setFlag(ISCHANGEDFC, true);
					iac.getAtom(j).setFlag(ISCHANGEDFC, true);
					count++; /* TODO- error*/
				}
		}

		/*3: set sigma charge (PEOE). Initial start point*/
		GasteigerMarsiliPartialCharges peoe = new GasteigerMarsiliPartialCharges();;
		peoe.setMaxGasteigerIters(6);
		IAtomContainer acCloned;
		

		double[][] gasteigerFactors = assignPiFactors(iSet);//a,b,c,deoc,chi,q
		
		/*4: calculate topological weight factors Wt=fQ*fB*fA*/
		double[] Wt = new double[iSet.getAtomContainerCount()-1];
		for(int i = 1; i < iSet.getAtomContainerCount() ; i++){
			Wt[i-1]= getTopologicalFactors(iSet.getAtomContainer(i),ac);
//			logger.debug(", W:"+Wt[i-1]);
			try {
				acCloned = (IAtomContainer)iSet.getAtomContainer(i).clone();
//				logger.debug("smilesClo: "+(new SmilesGenerator(ac.getBuilder())).createSMILES((IMolecule) acCloned));
				acCloned = peoe.assignGasteigerMarsiliSigmaPartialCharges(acCloned, true);
				for(int j = 0 ; j<acCloned.getAtomCount(); j++)
					if(iSet.getAtomContainer(i).getAtom(j).getFlag(ISCHANGEDFC)){
						gasteigerFactors[i][STEP_SIZE * j + j + 5] = acCloned.getAtom(j).getCharge(); 
					}
			} catch (CloneNotSupportedException e) {
				throw new CDKException("Could not clone ac", e);
			}
		}
		
		/*calculate electronegativity for changed atoms and make the difference between whose
		 * atoms which change their formal charge*/
		for (int iter = 0; iter < MX_ITERATIONS; iter++) {
			for(int k = 1 ; k < iSet.getAtomContainerCount() ; k++){
				IAtomContainer iac = iSet.getAtomContainer(k);
//				logger.debug("smilesITERa: "+(new SmilesGenerator(ac.getBuilder())).createSMILES((IMolecule) iac));
				double[] electronegativity = new double[2];
				int count = 0;
				int atom1 = 0;
				int atom2 = 0;
				for (int j = 0; j < iac.getAtomCount(); j++) {
					if(count == 2)/* TODO- not limited*/
						break;
					if(iac.getAtom(j).getFlag(ISCHANGEDFC)){
//						logger.debug("Atom: "+j+", S:"+iac.getAtom(j).getSymbol()+", C:"+iac.getAtom(j).getFormalCharge());
						if(count == 0)
							atom1 = j;
						else 
							atom2 = j;
						
						double q1 = gasteigerFactors[k][STEP_SIZE * j + j + 5];
						electronegativity[count] = gasteigerFactors[k][STEP_SIZE * j + j + 2] * q1 * q1 + gasteigerFactors[k][STEP_SIZE * j + j + 1] * q1 + gasteigerFactors[k][STEP_SIZE * j + j];
//						logger.debug("e:"+electronegativity[count] +",q1: "+q1+", c:"+gasteigerFactors[k][STEP_SIZE * j + j + 2] +", b:"+gasteigerFactors[k][STEP_SIZE * j + j + 1]  + ", a:"+gasteigerFactors[k][STEP_SIZE * j + j]);
						count++;
					}
					
				}
//				logger.debug("Atom1:"+atom1+",Atom2:"+atom2);
				/*diferency of electronegativity 1 lower*/
				double max1 = Math.max(electronegativity[0], electronegativity[1]);
				double min1 = Math.min(electronegativity[0], electronegativity[1]);
				double DX = 1.0;
				if(electronegativity[0] < electronegativity[1])
					DX = gasteigerFactors[k][STEP_SIZE * atom1 + atom1 + 3];
				else
					DX = gasteigerFactors[k][STEP_SIZE * atom2 + atom2 + 3];
					
				double Dq = (max1-min1)/DX;
//					logger.debug("Dq : "+Dq+ " = ("+ max1+"-"+min1+")/"+DX);
				double epN1 = getElectrostaticPotentialN(iac,atom1,gasteigerFactors[k]);
				double epN2 = getElectrostaticPotentialN(iac,atom2,gasteigerFactors[k]);
				double SumQN = Math.abs(epN1 - epN2);
//					logger.debug("sum("+SumQN+") = ("+epN1+") - ("+epN2+")");
				
				/* electronic weight*/
				double WE = Dq + fE*SumQN;
//					logger.debug("WE : "+WE+" = Dq("+Dq+")+fE("+fE+")*SumQN("+SumQN);
				int iTE = iter+1;
				
				/* total topological*/
				double W = WE*Wt[k-1]*fS/(iTE);
//					logger.debug("W : "+W+" = WE("+WE+")*Wt("+Wt[k-1]+")*fS("+fS+")/iter("+iTE+"), atoms: "+atom1+", "+atom2);
				
				/* atom1 */
				if(iac.getAtom(atom1).getFormalCharge() == 0){
					if(ac.getAtom(atom1).getFormalCharge() < 0){
						gasteigerFactors[k][STEP_SIZE * atom1 + atom1 + 5] = W;
					}else{
						gasteigerFactors[k][STEP_SIZE * atom1 + atom1 + 5] = -1*W;
					}
				}else if(iac.getAtom(atom1).getFormalCharge() > 0){
					gasteigerFactors[k][STEP_SIZE * atom1 + atom1 + 5] = W;
				}else{
					gasteigerFactors[k][STEP_SIZE * atom1 + atom1 + 5] = -1*W;
				}
				/* atom2*/
				if(iac.getAtom(atom2).getFormalCharge() == 0){
					if(ac.getAtom(atom2).getFormalCharge() < 0){
						gasteigerFactors[k][STEP_SIZE * atom2 + atom2 + 5] = W;
					}else{
						gasteigerFactors[k][STEP_SIZE * atom2 + atom2 + 5] = -1*W;
					}
				}else if(iac.getAtom(atom2).getFormalCharge() > 0){
					gasteigerFactors[k][STEP_SIZE * atom2 + atom2 + 5] = W;
				}else{
					gasteigerFactors[k][STEP_SIZE * atom2 + atom2 + 5] = -1*W;
				}
				
			}
			for(int k = 1 ; k < iSet.getAtomContainerCount() ; k++){
				for (int i = 0; i < ac.getAtomCount(); i++) 
					if(iSet.getAtomContainer(k).getAtom(i).getFlag(ISCHANGEDFC)){
						double charge = ac.getAtom(i).getCharge();
						double chargeT = 0.0;
						chargeT = charge + gasteigerFactors[k][STEP_SIZE * i + i + 5];
//						logger.debug("i<|"+chargeT+"=c:" +charge + "+g: "+gasteigerFactors[k][STEP_SIZE * i + i + 5]);
						ac.getAtom(i).setCharge(chargeT);
					}
			}
			
		}// iterations
		
		return ac;
		
	}
	/**
	 * get the possibles structures after a hyperconjugation interactions for bonds wich
	 * not belong any resonance structure.
	 * 
	 * @param ac IAtomContainer
	 * @return IAtomContainerSet
	 * @throws CDKException 
	 * @throws ClassNotFoundException 
	 * @throws IOException 
	 */
	private IAtomContainerSet getHyperconjugationInteractions(IAtomContainer ac, IAtomContainerSet iSet) throws IOException, ClassNotFoundException, CDKException {
		IAtomContainerSet set = ac.getBuilder().newAtomContainerSet();
        IReactionProcess type = new BreakingBondReaction();
        cleanFlagReactiveCenter(ac);
        boolean found = false; /* control obtained containers */
		IMoleculeSet setOfReactants = ac.getBuilder().newMoleculeSet();
		/* search of reactive center.*/
		out:
		for(int i = 0 ; i < ac.getBondCount() ; i++){
			if(ac.getBond(i).getOrder() > 1 ){
				for(int j = 0 ; j < iSet.getAtomContainerCount(); j++){
    				IAtomContainer ati = iSet.getAtomContainer(j);
    				if(!ati.equals(ac))
    				for(int k = 0; k < ati.getBondCount(); k++){
    					IAtom a0 = ati.getBond(k).getAtom(0);
    					IAtom a1 = ati.getBond(k).getAtom(1);
    					if(!a0.getSymbol().equals("H") || !a1.getSymbol().equals("H"))
    					if((a0.getID().equals(ac.getBond(i).getAtom(0).getID()) &&
    							a1.getID().equals(ac.getBond(i).getAtom(1).getID())) ||
							(a1.getID().equals(ac.getBond(i).getAtom(0).getID()) &&
	    							a0.getID().equals(ac.getBond(i).getAtom(1).getID()))){
    						if(a0.getFormalCharge() != 0 || a1.getFormalCharge() != 0)
    							continue out;
    					}
    				}
				}
				ac.getBond(i).getAtom(0).setFlag(CDKConstants.REACTIVE_CENTER,true);
				ac.getBond(i).getAtom(1).setFlag(CDKConstants.REACTIVE_CENTER,true);
				ac.getBond(i).setFlag(CDKConstants.REACTIVE_CENTER,true);
				found = true;
			}
		}
		if(!found)
			return null;
		
		
		setOfReactants.addMolecule((IMolecule) ac);
		Object[] params = {Boolean.TRUE};
		
		type.setParameters(params);
		IReactionSet setOfReactions = type.initiate(setOfReactants, null);
        for(int i = 0; i < setOfReactions.getReactionCount(); i++){
        	type = new HyperconjugationReaction();
    		IMoleculeSet setOfM2 = ac.getBuilder().newMoleculeSet();
    		IMolecule mol= setOfReactions.getReaction(i).getProducts().getMolecule(0);
    		for(int k = 0; k < mol.getBondCount(); k++){

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费国产视频网站| 久草精品在线观看| 日韩欧美中文一区二区| 成人丝袜18视频在线观看| 五月激情丁香一区二区三区| 国产欧美综合在线| 欧美一区二区三区四区高清| av高清久久久| 国产一区二区三区最好精华液| 亚洲激情成人在线| 国产欧美一区二区三区沐欲 | 色欧美片视频在线观看| 九一九一国产精品| 视频在线观看国产精品| 亚洲免费伊人电影| 日本一区二区三区在线观看| 欧美成人一区二区三区片免费 | 91美女蜜桃在线| 国产传媒一区在线| 老司机精品视频在线| 亚洲超碰97人人做人人爱| 国产精品福利电影一区二区三区四区| 欧美α欧美αv大片| 555夜色666亚洲国产免| 欧美日韩一区二区三区在线看| 99久久免费精品| 成人高清伦理免费影院在线观看| 国内成人免费视频| 韩国中文字幕2020精品| 麻豆精品视频在线观看视频| 日本视频免费一区| 天使萌一区二区三区免费观看| 一区二区不卡在线播放 | 国产精品网曝门| 久久精品这里都是精品| 久久综合一区二区| 精品三级av在线| 精品国产3级a| 久久综合九色综合97_久久久| 日韩欧美激情在线| 精品久久久久久久久久久久包黑料| 日韩亚洲欧美综合| 欧美v日韩v国产v| 久久色在线视频| 国产亚洲成年网址在线观看| 国产日本欧洲亚洲| 国产精品成人免费在线| 亚洲欧美一区二区久久| 亚洲黄色小说网站| 亚洲成av人在线观看| 视频在线观看国产精品| 另类小说一区二区三区| 激情五月婷婷综合| 欧美xfplay| 国产亚洲成aⅴ人片在线观看| 国产精品免费视频观看| 中文字幕一区不卡| 亚洲国产乱码最新视频| 日本美女一区二区三区视频| 精品伊人久久久久7777人| 国产高清成人在线| 日本久久精品电影| 777久久久精品| 国产亚洲精品aa午夜观看| 亚洲三级久久久| 日本在线不卡视频一二三区| 国产精品一级二级三级| 一道本成人在线| 欧美一区二区三区爱爱| 久久免费偷拍视频| 亚洲人吸女人奶水| 免费观看久久久4p| 成人av网址在线| 欧美日韩精品欧美日韩精品一综合| 欧美变态tickling挠脚心| 国产精品国产三级国产普通话三级| 一区二区视频免费在线观看| 麻豆久久久久久| 99精品视频在线观看| 欧美精品亚洲一区二区在线播放| 日韩欧美亚洲另类制服综合在线| 国产精品久久久久精k8| 日韩国产一二三区| 岛国一区二区三区| 9191成人精品久久| 国产精品久久久久9999吃药| 亚洲国产va精品久久久不卡综合 | 国产一区二区三区最好精华液| 91日韩在线专区| 精品日韩99亚洲| 一区二区三区免费| 国产精品69毛片高清亚洲| 欧美日本免费一区二区三区| 欧美国产综合色视频| 日韩av在线免费观看不卡| 99国内精品久久| 精品国产乱码久久| 亚洲成人动漫精品| 不卡的av在线| 久久夜色精品国产噜噜av| 亚洲第一久久影院| 9久草视频在线视频精品| 精品国产乱码久久久久久夜甘婷婷| 一区二区在线观看免费视频播放 | 六月丁香综合在线视频| 一本一道综合狠狠老| 久久久久久久精| 免费观看在线综合| 欧美在线观看视频一区二区三区| 国产亚洲成年网址在线观看| 日韩不卡一区二区| 欧美视频三区在线播放| 亚洲私人影院在线观看| 国产成人精品亚洲日本在线桃色| 欧美一区二区私人影院日本| 夜夜夜精品看看| jiyouzz国产精品久久| 久久精品亚洲一区二区三区浴池 | 一区二区三区中文字幕电影| 国产91清纯白嫩初高中在线观看| 日韩美女一区二区三区四区| 午夜激情综合网| 欧美性感一类影片在线播放| 亚洲欧洲日韩av| 成人免费视频免费观看| 国产欧美一区二区精品性色| 激情综合网av| 久久综合久久99| 国内不卡的二区三区中文字幕| 日韩欧美亚洲国产另类| 欧美96一区二区免费视频| 91精品久久久久久久91蜜桃| 婷婷亚洲久悠悠色悠在线播放| 欧美在线一二三四区| 一区二区三区在线视频免费观看 | 精品国产凹凸成av人导航| 激情综合网av| 久久久久久久久久久黄色| 国产一区不卡在线| 久久一留热品黄| 国产激情偷乱视频一区二区三区| 久久久三级国产网站| 国产成人免费在线观看不卡| 国产喷白浆一区二区三区| av一本久道久久综合久久鬼色| 国产精品成人一区二区艾草| 色综合久久综合网| 性欧美大战久久久久久久久| 欧美三级午夜理伦三级中视频| 亚洲福利一区二区| 欧美一级二级三级蜜桃| 精品一区二区免费看| 国产欧美一区二区三区在线看蜜臀| 福利一区二区在线| 亚洲精品欧美激情| 5858s免费视频成人| 国产在线不卡一卡二卡三卡四卡| 国产日韩在线不卡| 色婷婷久久久亚洲一区二区三区 | 日韩一区二区在线观看| 裸体一区二区三区| 中文字幕av不卡| 欧美亚洲国产一区二区三区| 琪琪一区二区三区| 欧美韩国一区二区| 欧美日韩激情一区二区三区| 久久国产精品99精品国产| 日本一区二区三级电影在线观看| 色88888久久久久久影院野外| 日日夜夜精品视频天天综合网| 精品福利av导航| av在线播放不卡| 免费成人小视频| 国产精品不卡视频| 欧美精品久久天天躁| 国产suv精品一区二区6| 亚洲线精品一区二区三区八戒| 精品免费视频.| 91麻豆成人久久精品二区三区| 天天爽夜夜爽夜夜爽精品视频| 久久久不卡网国产精品一区| 在线免费观看日本一区| 久久99精品国产麻豆不卡| 亚洲乱码国产乱码精品精小说| 日韩免费在线观看| 色婷婷亚洲精品| 国产精品一区二区你懂的| 亚洲国产精品尤物yw在线观看| 久久免费偷拍视频| 欧美日韩精品免费观看视频| 国产一区二区三区免费看| 一区二区欧美精品| 久久精品视频一区二区三区| 欧美日韩一区二区三区在线看 | 91麻豆精品国产无毒不卡在线观看 | 99r国产精品| 国内精品伊人久久久久av一坑| 亚洲最快最全在线视频| 国产女人aaa级久久久级| 日韩免费成人网|