未完成
CDK, The Chemistry Development Kit
本家 http://sourceforge.net/apps/mediawiki/cdk/index.php?title=Main_Page
化合物を取り扱うライブラリなのかな。これで各種記述子の演算が可能。加え化合物検索も。
BioPerl的なツールとして使えるのかと。
*同じperlならperlmolだろうっとは思うが機能が少ないみたい。
スクリプト的な使い方をしたいのでGroovyでjavaを使います。javacでコンパイル、実行もいいのだが、こっちの方が楽かなぁって思っている。
確かに扱う規模が大きければjavac/javaで動かすけどね。

インストール

基本となるjava環境をまずインストールしてからgroovyをインストール

# yum groupinstall "Java Platform"
# yum install java-1.7.0-openjdk
# alternatives --config java       *使用するjavaを選定
# export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64
# wget http://dist.groovy.codehaus.org/distributions/groovy-binary-2.0.4.zip
# cd /opt
# unzip /tmp/groovy-binary-2.0.4.zip
# export PATH=${PATH}:/opt/groovy/bin

次にCDKのインストール。ここ http://sourceforge.net/projects/cdk/files/cdk/ から最新リリースを取得
この時はver-1.4.13で、そのリンクを辿って、cdk-1.4.13.jarを取得
2012y10m02d_231252588.png
このファイル cdk-1.4.13.jar を

# mkdir -p /opt/cdk
# mv cdk-1.4.13.jar /opt/cdk
# cd /opt/cdk
# ln -s cdk-1.4.13.jar cdk.jar

として、次に各自の.bashrcとか.cshrcのCLASSPATH環境変数にこのcdk.jarを加えます

$ echo "export CLASSPATH=/opt/cdk/cdk.jar" >> ~/.bashrc

コード

極めて簡単なコード

$ cat sample.groovy
name='World'
println "Hello $name!"
$ groovy sample.groovy
Hello World!

な感じ。

下記はgroovyとは関係なく、sdファイルから構造式な画像を書き出すjavaソース。

mol2png.java
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
-
|
|
|
|
|
-
|
|
-
|
-
|
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
-
|
-
|
!
|
|
|
|
|
|
|
|
|
-
|
!
|
|
|
|
|
|
-
|
-
|
!
|
!
|
|
!
!
import java.util.List;
import java.util.ArrayList;
 
import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.RenderedImage;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import org.openscience.cdk.DefaultChemObjectBuilder;
import org.openscience.cdk.Molecule;
import org.openscience.cdk.geometry.GeometryTools;
import org.openscience.cdk.inchi.InChIToStructure;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.interfaces.IMolecule;
import org.openscience.cdk.io.SDFWriter;
import org.openscience.cdk.layout.StructureDiagramGenerator;
import org.openscience.cdk.renderer.visitor.*;
import org.openscience.cdk.renderer.generators.*;
import org.openscience.cdk.renderer.color.*;
import org.openscience.cdk.renderer.elements.*;
import org.openscience.cdk.renderer.font.*;
import org.openscience.cdk.renderer.selection.*;
import org.openscience.cdk.renderer.*;
import org.openscience.cdk.aromaticity.CDKHueckelAromaticityDetector;
 
import javax.imageio.*;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.File;
 
import org.openscience.cdk.io.MDLReader;
import org.openscience.cdk.io.iterator.IteratingMDLReader;
import org.openscience.cdk.exception.CDKException;
 
 
 
 
class mol2png{
  public static void main(String[] args){
    IMolecule              mol = null;
    IteratingMDLReader  reader =null;
    int WIDTH = 200;
    int HEIGHT= 200;
 
    try{
    FileReader  r = new FileReader("sample.sd");
           reader = new IteratingMDLReader(r,DefaultChemObjectBuilder.getInstance());
    } catch(FileNotFoundException e1) {
                System.out.println(e1.toString());
    } catch (IOException e) {
                System.out.println(e.toString());
    }
 
    Rectangle drawArea = new Rectangle(WIDTH, HEIGHT);
    Image image = new BufferedImage( WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
 
 
    StructureDiagramGenerator sdg = new StructureDiagramGenerator();
 
       List<IGenerator> generators = new ArrayList<IGenerator>();
       generators.add(new BasicBondGenerator());
       generators.add(new BasicAtomGenerator());
 
       AtomContainerRenderer renderer = new AtomContainerRenderer(generators, new AWTFontManager());
 
 
 
       int i = 1;
       while( reader.hasNext() ){
          mol = null;
          mol = (IMolecule)reader.next();
          try {
              CDKHueckelAromaticityDetector.detectAromaticity(mol);
          }catch (CDKException cdke) {
              cdke.printStackTrace();
          }
 
       Graphics2D g2 = (Graphics2D)image.getGraphics();
       g2.setColor(Color.WHITE);
       g2.fillRect(0, 0, WIDTH, HEIGHT);
 
 
          System.out.println( mol.getAtomCount() + Integer.toString(i) );
 
          sdg.setMolecule(mol);
          try{
             sdg.generateCoordinates();
          }catch (Exception e){ }
          mol = sdg.getMolecule();
 
           renderer.setup(mol, drawArea);
          renderer.paint(mol, new AWTDrawVisitor(g2));
          
 
          try{
             ImageIO.write((RenderedImage)image, "PNG", new File( i + ".png"));
          }catch (IOException e ){
             System.out.println(e.toString());
          }
          i++;
      }
 
 
  }
}

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2012-10-02 (火) 23:22:49 (1784d)