📄 structureresonancegenerator.java
字号:
for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("RearrangementCation3Reaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } } if(anionR){ /* RearrangementAnion1Reaction*/ IReactionProcess type = new RearrangementAnion1Reaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); IReactionSet setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("RearrangementAnion1Reaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } /* RearrangementAnion2Reaction*/ type = new RearrangementAnion2Reaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("RearrangementAnion2Reaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } /* RearrangementAnion3Reaction*/ type = new RearrangementAnion3Reaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("RearrangementAnion3Reaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } } if(radicalR){ /* RearrangementRadical1Reaction*/ IReactionProcess type = new RearrangementRadical1Reaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); IReactionSet setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("RearrangementRadical1Reaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } /* RearrangementRadical2Reaction*/ type = new RearrangementRadical2Reaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("RearrangementRadical2Reaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } /* RearrangementRadical3Reaction*/ type = new RearrangementRadical3Reaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("RearrangementRadical3Reaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } } if(bondR){ /* DisplacementChargeFromAcceptorReaction*/ IReactionProcess type = new DisplacementChargeFromAcceptorReaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); IReactionSet setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("DisplacementChargeFromAcceptorReaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } /* DisplacementChargeFromDonorReaction*/ type = new DisplacementChargeFromDonorReaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("DisplacementChargeFromDonorReaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } } if(hyperconjugationR){ /* HyperconjugationReaction*/ IReactionProcess type = new HyperconjugationReaction(); type.setParameters(params); removeFlags(setOfAtomContainer.getAtomContainer(i)); IReactionSet setOfReactions = type.initiate(setOfReactants, null); if(setOfReactions.getReactionCount() != 0) for(int k = 0 ; k < setOfReactions.getReactionCount() ; k++) for(int j = 0 ; j < setOfReactions.getReaction(k).getProducts().getAtomContainerCount() ; j++){ IAtomContainer set = setOfReactions.getReaction(k).getProducts().getAtomContainer(j);// logger.debug("HyperconjugationReaction"); if(!existAC(setOfAtomContainer,set)) setOfAtomContainer.addAtomContainer(setOfReactions.getReaction(k).getProducts().getAtomContainer(j)); } } /* this makes a limition of the search */ if(maxStructuresToObtain != -1) if(setOfAtomContainer.getAtomContainerCount() > maxStructuresToObtain) break; if(i == 0 && setOfAtomContainer.getAtomContainerCount() > 9) return setOfAtomContainer; } } catch (CDKException e) { logger.error("Error while getting all resonance structures: "); logger.error(e.getMessage()); logger.debug(e); } return setOfAtomContainer; } /** * Search if the setOfAtomContainer contains the atomContainer * * @param set ISetOfAtomContainer object where to search * @param atomContainer IAtomContainer to search * @return True, if the atomContainer is contained */ private boolean existAC(IAtomContainerSet set, IAtomContainer atomContainer) {// logger.debug("smiles: "+(new SmilesGenerator(set.getBuilder())).createSMILES((IMolecule) atomContainer)); atomContainer = setID(atomContainer); for(int i = 0 ; i < set.getAtomContainerCount(); i++){ IAtomContainer ac = setID(set.getAtomContainer(i)); QueryAtomContainer qAC = QueryAtomContainerCreator.createSymbolChargeIDQueryContainer(ac);// QueryAtomContainer qAC = QueryAtomContainerCreator.createAnyAtomContainer(atomContainer,false); try { if(UniversalIsomorphismTester.isIsomorph(atomContainer,qAC)){// logger.debug("exist"); return true; } } catch (CDKException e1) { System.err.println(e1); logger.error(e1.getMessage()); logger.debug(e1); } } return false; } /** * remove the possible flags about CDKConstants.REACTIVE_CENTER * * @param atomContainer * @return */ private IAtomContainer removeFlags(IAtomContainer atomContainer){ for(int i = 0 ; i < atomContainer.getAtomCount(); i++) atomContainer.getAtom(i).setFlag(CDKConstants.REACTIVE_CENTER,false); for(int i = 0 ; i < atomContainer.getBondCount(); i++) atomContainer.getBond(i).setFlag(CDKConstants.REACTIVE_CENTER,false); return atomContainer; } /** * Set the ID as position * * @param atomContainer * @return */ private IAtomContainer setID(IAtomContainer atomContainer){ for(int i = 0 ; i < atomContainer.getAtomCount(); i++){ atomContainer.getAtom(i).setID(""+atomContainer.getAtomNumber(atomContainer.getAtom(i))); } return atomContainer; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -