未完成
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を取得
このファイル 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ソース。
-
-
|
|
|
|
|
-
|
|
-
|
-
|
!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
-
|
-
|
!
|
|
|
|
|
|
|
|
|
-
|
!
|
|
|
|
|
|
-
|
-
|
!
|
!
|
|
!
!
| 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++;
}
}
}
|