⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdfprotondescriptor_ghr_topol.java

📁 化学图形处理软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                                        bondNumber = mol.getBondNumber(fourthBond);                                        theBondIsInA6MemberedRing = false;                                        checkAndStore(bondNumber, bondOrder, singles, doubles, bondsInCycloex, mol.getAtomNumber(curAtomFourth), atoms, sphere, theBondIsInA6MemberedRing);                                        atomsInFifthSphere = mol.getConnectedAtomsList(curAtomFourth);                                        if (atomsInFifthSphere.size() > 0) {                                            for (int d = 0; d < atomsInFifthSphere.size(); d++) {                                                IAtom curAtomFifth = (IAtom) atomsInFifthSphere.get(d);                                                fifthBond = mol.getBond(curAtomFifth, curAtomFourth);                                                if (mol.getAtomNumber(curAtomFifth) != atomPosition && getIfBondIsNotRotatable(mol, fifthBond, detected))                                                {                                                    sphere = 5;                                                    bondOrder = fifthBond.getOrder();                                                    bondNumber = mol.getBondNumber(fifthBond);                                                    theBondIsInA6MemberedRing = false;                                                    checkAndStore(bondNumber, bondOrder, singles, doubles, bondsInCycloex, mol.getAtomNumber(curAtomFifth), atoms, sphere, theBondIsInA6MemberedRing);                                                    atomsInSixthSphere = mol.getConnectedAtomsList(curAtomFifth);                                                    if (atomsInSixthSphere.size() > 0) {                                                        for (int e = 0; e < atomsInSixthSphere.size(); e++) {                                                            IAtom curAtomSixth = (IAtom) atomsInSixthSphere.get(e);                                                            sixthBond = mol.getBond(curAtomFifth, curAtomSixth);                                                            if (mol.getAtomNumber(curAtomSixth) != atomPosition && getIfBondIsNotRotatable(mol, sixthBond, detected))                                                            {                                                                sphere = 6;                                                                bondOrder = sixthBond.getOrder();                                                                bondNumber = mol.getBondNumber(sixthBond);                                                                theBondIsInA6MemberedRing = false;                                                                checkAndStore(bondNumber, bondOrder, singles, doubles, bondsInCycloex, mol.getAtomNumber(curAtomSixth), atoms, sphere, theBondIsInA6MemberedRing);                                                                atomsInSeventhSphere = mol.getConnectedAtomsList(curAtomSixth);                                                                if (atomsInSeventhSphere.size() > 0) {                                                                    for (int f = 0; f < atomsInSeventhSphere.size(); f++)                                                                    {                                                                        IAtom curAtomSeventh = (IAtom) atomsInSeventhSphere.get(f);                                                                        seventhBond = mol.getBond(curAtomSeventh, curAtomSixth);                                                                        if (mol.getAtomNumber(curAtomSeventh) != atomPosition && getIfBondIsNotRotatable(mol, seventhBond, detected))                                                                        {                                                                            sphere = 7;                                                                            bondOrder = seventhBond.getOrder();                                                                            bondNumber = mol.getBondNumber(seventhBond);                                                                            theBondIsInA6MemberedRing = false;                                                                            checkAndStore(bondNumber, bondOrder, singles, doubles, bondsInCycloex, mol.getAtomNumber(curAtomSeventh), atoms, sphere, theBondIsInA6MemberedRing);                                                                        }                                                                    }                                                                }                                                            }                                                        }                                                    }                                                }                                            }                                        }                                    }                                }                            }                        }                    }                }            }        }        //Variables        double distance;        double sum;        double smooth = -20;        double partial;        int position;        double limitInf = 1.4;        double limitSup = 4;        double step = (limitSup - limitInf) / 15;        IAtom atom2;///////////////////////THE SECOND CALCULATED DESCRIPTOR IS g(H)r TOPOLOGICAL WITH SUM OF BOND LENGTHS    distance = 0;	sum = 0;	smooth = -20;	position = 0;	atom2 = null;	org._3pq.jgrapht.Graph mygraph = MoleculeGraphs.getMoleculeGraph(mol);	Object startVertex = clonedAtom;	Object endVertex;	org._3pq.jgrapht.Edge edg;	java.util.List mylist;	IAtom atomTarget;	IAtom atomSource;	Integer thisAtom;	partial = 0;	limitInf = 1.4;	limitSup = 4;	step = (limitSup - limitInf)/15;		if(atoms.size() > 0) {		//ArrayList gHr_topol_function = new ArrayList(15);		for(double ghrt = limitInf; ghrt < limitSup; ghrt = ghrt + step) {  			sum = 0;			for( int at = 0; at < atoms.size(); at++ ) {				partial = 0;				distance = 0;				thisAtom = (Integer)atoms.get(at);				position = thisAtom.intValue();				endVertex = mol.getAtom(position);				atom2 = mol.getAtom(position);				mylist = org.openscience.cdk.graph.BFSShortestPath.findPathBetween(mygraph,startVertex,endVertex);				for (int u = 0; u < mylist.size(); u++) {					edg = (org._3pq.jgrapht.Edge)mylist.get(u);					atomTarget = (IAtom)edg.getTarget();					atomSource = (IAtom)edg.getSource();					distance += calculateDistanceBetweenTwoAtoms(atomTarget, atomSource);				}				partial = atom2.getCharge() * Math.exp( smooth * (Math.pow( (ghrt - distance) , 2)));				sum += partial;			}			//gHr_topol_function.add(new Double(sum));			rdfProtonCalculatedValues.add(sum);			logger.debug("RDF gr-topol distance prob.: "+sum+ " at distance "+ghrt);		}	}	else {		for (int i=0; i<ghr_topol_desc_length; i++) rdfProtonCalculatedValues.add(Double.NaN);	}	return new DescriptorValue(		getSpecification(), getParameterNames(), 		getParameters(), rdfProtonCalculatedValues,		descriptorNames	);	}	    //Others definitions    private boolean getIfBondIsNotRotatable(Molecule mol, org.openscience.cdk.interfaces.IBond bond, IAtomContainer detected) {        boolean isBondNotRotatable = false;        int counter = 0;        IAtom atom0 = bond.getAtom(0);        IAtom atom1 = bond.getAtom(1);        if (detected != null) {            if (detected.contains(bond)) counter += 1;        }        if (atom0.getFlag(CDKConstants.ISINRING)) {            if (atom1.getFlag(CDKConstants.ISINRING)) {                counter += 1;            } else {                if (atom1.getSymbol().equals("H")) counter += 1;                else counter += 0;            }        }        if (atom0.getSymbol().equals("N") && atom1.getSymbol().equals("C")) {            if (getIfACarbonIsDoubleBondedToAnOxygen(mol, atom1)) counter += 1;        }        if (atom0.getSymbol().equals("C") && atom1.getSymbol().equals("N")) {            if (getIfACarbonIsDoubleBondedToAnOxygen(mol, atom0)) counter += 1;        }        if (counter > 0) isBondNotRotatable = true;        return isBondNotRotatable;    }    private boolean getIfACarbonIsDoubleBondedToAnOxygen(Molecule mol, IAtom carbonAtom) {        boolean isDoubleBondedToOxygen = false;        java.util.List neighToCarbon = mol.getConnectedAtomsList(carbonAtom);        org.openscience.cdk.interfaces.IBond tmpBond;        int counter = 0;        for (int nei = 0; nei < neighToCarbon.size(); nei++) {            IAtom neighbour = (IAtom) neighToCarbon.get(nei);            if (neighbour.getSymbol().equals("O")) {                tmpBond = mol.getBond(neighbour, carbonAtom);                if (tmpBond.getOrder() == 2.0) counter += 1;            }        }        if (counter > 0) isDoubleBondedToOxygen = true;        return isDoubleBondedToOxygen;    }    // this method calculates the angle between two bonds given coordinates of their atoms    public double calculateAngleBetweenTwoLines(Vector3d a, Vector3d b, Vector3d c, Vector3d d) {        Vector3d firstLine = new Vector3d();        firstLine.sub(a, b);        Vector3d secondLine = new Vector3d();        secondLine.sub(c, d);        Vector3d firstVec = new Vector3d(firstLine);        Vector3d secondVec = new Vector3d(secondLine);        return firstVec.angle(secondVec);    }    // this method store atoms and bonds in proper lists:    private void checkAndStore(int bondToStore, double bondOrder,                               ArrayList singleVec, ArrayList doubleVec,                               ArrayList cycloexVec, int a1,                               ArrayList atomVec, int sphere, boolean isBondInCycloex) {        if (!atomVec.contains(new Integer(a1))) {            if (sphere < 6) atomVec.add(new Integer(a1));        }        if (!cycloexVec.contains(new Integer(bondToStore))) {            if (isBondInCycloex) {                cycloexVec.add(new Integer(bondToStore));            }        }        if (bondOrder == 2.0) {            if (!doubleVec.contains(new Integer(bondToStore))) doubleVec.add(new Integer(bondToStore));        }        if (bondOrder == 1.0) {            if (!singleVec.contains(new Integer(bondToStore))) singleVec.add(new Integer(bondToStore));        }    }    // generic method for calculation of distance btw 2 atoms    private double calculateDistanceBetweenTwoAtoms(IAtom atom1, IAtom atom2) {        double distance;        Point3d firstPoint = atom1.getPoint3d();        Point3d secondPoint = atom2.getPoint3d();        distance = firstPoint.distance(secondPoint);        return distance;    }    // given a double bond    // this method returns a bond bonded to this double bond    private int getNearestBondtoAGivenAtom(Molecule mol, IAtom atom, org.openscience.cdk.interfaces.IBond bond) {        int nearestBond = 0;        double[] values;        double distance = 0;        IAtom atom0 = bond.getAtom(0);        IAtom atom1 = bond.getAtom(1);        List bondsAtLeft = mol.getConnectedBondsList(atom0);        int partial;        for (int i = 0; i < bondsAtLeft.size(); i++) {            IBond curBond = (IBond) bondsAtLeft.get(i);            values = calculateDistanceBetweenAtomAndBond(atom, curBond);            partial = mol.getBondNumber(curBond);            if (i == 0) {                nearestBond = mol.getBondNumber(curBond);                distance = values[0];            } else {                if (values[0] < distance) {                    nearestBond = partial;                }                /* XXX commented this out, because is has no effect                     *                     else {                        nearestBond = nearestBond;                    }*/            }        }        return nearestBond;    }    // method which calculated distance btw an atom and the middle point of a bond    // and returns distance and coordinates of middle point    private double[] calculateDistanceBetweenAtomAndBond(IAtom proton, org.openscience.cdk.interfaces.IBond theBond) {        Point3d middlePoint = theBond.get3DCenter();        Point3d protonPoint = proton.getPoint3d();        double[] values = new double[4];        values[0] = middlePoint.distance(protonPoint);        values[1] = middlePoint.x;        values[2] = middlePoint.y;        values[3] = middlePoint.z;        return values;    }    /**     * Gets the parameterNames attribute of the RDFProtonDescriptor     * object     *     * @return The parameterNames value     */    public String[] getParameterNames() {        String[] params = new String[2];        params[0] = "atomPosition";        params[1] = "checkAromaticity";        return params;    }    /**     * Gets the parameterType attribute of the RDFProtonDescriptor     * object     *     * @param name Description of the Parameter     * @return The parameterType value     */    public Object getParameterType(String name) {        if (name.equals("atomPosition")) return new Integer(0);        return Boolean.TRUE;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -