posts - 431,  comments - 344,  trackbacks - 0
          CDK提供了通過smiles值進行子結構搜索,  org.openscience.cdk.smiles.smarts.SMARTSQueryTool

          package com.founder.cdk;

          import Java.io.File;
          import Java.io.FileNotFoundException;
          import Java.io.FileReader;
          import Java.util.ArrayList;
          import Java.util.List;

          import org.openscience.cdk.ChemFile;
          import org.openscience.cdk.ChemObject;
          import org.openscience.cdk.exception.CDKException;
          import org.openscience.cdk.interfaces.IAtomContainer;
          import org.openscience.cdk.io.MDLV2000Reader;
          import org.openscience.cdk.smiles.smarts.SMARTSQueryTool;
          import org.openscience.cdk.tools.manipulator.ChemFileManipulator;

          public class SMARTSQueryToolTest {

           static SMARTSQueryTool sqt;static {
                  try {
                      sqt = new SMARTSQueryTool("c2ccc1ccccc1c2");
                  } catch (CDKException e) {           
                  }
              }

           /**
            * @param args
            */
           public static void main(String[] args) {
            String filename = "H:\\molecules.sdf";
            try {
                      MDLV2000Reader reader = new MDLV2000Reader(new FileReader(new File(filename)));
                      ChemFile chemFile = (ChemFile) reader.read((ChemObject) new ChemFile());
                      List<IAtomContainer> containersList = ChemFileManipulator.getAllAtomContainers(chemFile);
                     
                      List<IAtomContainer> substructureList = new ArrayList<IAtomContainer>();
                      
                      sqt.setSmarts("c1ccc3c(c1)ccc4c2ccccc2ccc34");  //重新設置匹配的smiles值
                      boolean matched = false;
                      for (IAtomContainer molecule : containersList) {
                          matched = sqt.matches(molecule);
                          if (matched){
                           substructureList.add(molecule);
                          }
                      }
                      System.out.println(substructureList.size());
                     
                      for (IAtomContainer molecule : substructureList) {
                           System.out.println(molecule.getProperty("ID"));
                      }
                     
                  } catch (CDKException e) {
                      e.printStackTrace();
                  } catch (FileNotFoundException e) {
                     e.printStackTrace();
                  }

           }

          }

          通過測試, matches方法速度很慢, 一般一個結構需要200ms-1000ms左右.

          posted on 2009-10-20 08:33 周銳 閱讀(600) 評論(0)  編輯  收藏 所屬分類: Java 、CDK
          主站蜘蛛池模板: 桐梓县| 沅陵县| 中牟县| 南靖县| 巴林左旗| 通渭县| 崇仁县| 二手房| 潜山县| 永福县| 毕节市| 柯坪县| 尉氏县| 石屏县| 华池县| 彩票| 厦门市| 濮阳市| 剑川县| 桐庐县| 广州市| 县级市| 宜章县| 亳州市| 凤凰县| 绵阳市| 荆门市| 东丰县| 忻州市| 万源市| 萝北县| 鹤峰县| 河间市| 剑阁县| 石柱| 阿城市| 株洲市| 邻水| 康乐县| 石嘴山市| 德州市|