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 周銳 閱讀(603) 評論(0)  編輯  收藏 所屬分類: JavaCDK
          主站蜘蛛池模板: 宁化县| 墨玉县| 兴国县| 天祝| 泸定县| 远安县| 吉木萨尔县| 甘洛县| 涿州市| 万安县| 武胜县| 大荔县| 广安市| 咸宁市| 高密市| 获嘉县| 卢湾区| 海安县| 叶城县| 于田县| 潜江市| 清河县| 高阳县| 南宫市| 黄龙县| 竹山县| 隆尧县| 巩义市| 北京市| 武陟县| 阿图什市| 荆门市| 乌兰县| 呼和浩特市| 诸暨市| 安化县| 同仁县| 温宿县| 石嘴山市| 禄劝| 阿城市|