2006年08月13日

CDKでMDL形式の読み込み

CDKにおけるMDL形式(mol,sdf)ファイルの入力方法をメモしたいと思います。CDKのバージョンは、cdk-20060718を用いて行います。

まずは、1分子のみ(mol形式)の入力方法です。分子の入力確認をするために、とりあえずは、getAtomCount()メソッドで原子数を表示させています。
 
 fr = new FileReader(new File(filename));
 mr = new MDLReader(fr);
 mol = (IMolecule)mr.read(new Molecule());
 //原子数の表示
 System.out.println(mol.getAtomCount()); 

次は、複数の分子が入っているファイル(sdf形式)から一分子づつ入力する方法です。

 fr = new FileReader(new File(filename));
 imr = new IteratingMDLReade(fr,
        DefaultChemObjectBuilder.getInstance());
 while (imr.hasNext()){
  mol = (IMolecule)imr.next();
  //原子数の表示
  System.out.println(mol.getAtomCount());
 }

一分子づつ入力しますので、大規模なsdf形式の入力に適しています。

最後は、sdf形式を一度に入力する方法です。

 fr = new FileReader(new File(filename));
 mr = new MDLReader(fr);
 chemfile = (IChemFile)mr.read(new ChemFile()); ←@
 //原子数の表示
 for(int i=0;i<chemfile.getChemSequenceCount();i++){
  IChemSequence cs = chemfile.getChemSequence(i);
   for(int j=0;j<cs.getChemModelCount();j++){
    IChemModel cm = cs.getChemModel(j);
    ISetOfMolecules sms = cm.getSetOfMolecules();
     for(int k=0;k<sms.getMoleculeCount();k++){
      IMolecule mol = sms.getMolecule(k);
      System.out.println(mol.getAtomCount());
     }
   }
 }

上記ソースの@の行のみで複数の分子(sdf形式)を一度に入力しています。入力された各分子の原子数を知るためには、"//原子の表示" 以下の作業が必要となります。ChemSequenceクラス, ChemModelクラス, Moleculeクラスの関係が理解できると思います。


banner_02.gif
人気ブログランキング(クリックして応援してね)


posted by わばのり at 09:24| Comment(3) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。