<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>cdk / Drkcore</title><link>http://blog.kzfmix.com/cdk</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Wed, 18 Oct 2006 23:16:43 +0919</lastBuildDate><item><title>CDKで型があわねーとかいうエラー</title><link>http://blog.kzfmix.com/entry/1161181003</link><description>&lt;p&gt;Depth-Firstでみっけた&lt;a href="http://depth-first.com/articles/2006/08/28/drawing-2-d-structures-with-structure-cdk"&gt;Structure-CDK&lt;/a&gt;が使いたいということでcdk-20050826.jarからcdk-20060714.jarにあげたら&lt;a href="http://blog.kzfmix.com/entry/1159366804"&gt;この前つくったモジュール&lt;/a&gt;が動かなくなった。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;sdg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setMolecule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mol&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;sdg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generateCoordinates&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;mol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sdg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getMolecule&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;のところで、&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Smi2Mol_899b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;java:49:&lt;/span&gt; &lt;span class="err"&gt;互換性のない型&lt;/span&gt;
&lt;span class="err"&gt;検出値&lt;/span&gt;  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;openscience&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cdk&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;interfaces&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IMolecule&lt;/span&gt;
&lt;span class="err"&gt;期待値&lt;/span&gt;  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;openscience&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cdk&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Molecule&lt;/span&gt;
        &lt;span class="n"&gt;mol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sdg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getMolecule&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                             &lt;span class="o"&gt;^&lt;/span&gt;
&lt;span class="err"&gt;エラー&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="err"&gt;個&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;もげー、型が違うってなんでじゃ？&lt;/p&gt;</description><pubDate>Wed, 18 Oct 2006 23:16:43 +0919</pubDate><category>chemoinformatics</category><category>java</category><category>cdk</category></item><item><title>CDK使ったモジュールを書いてみた</title><link>http://blog.kzfmix.com/entry/1159366804</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1156116268"&gt;Inline::JavaでCDKのニ次元構造立ち上げをperl&lt;/a&gt;でやれるようになったんだけど、やっぱuseして使いたいのでモジュール化してみた。&lt;/p&gt;
&lt;p&gt;最初、&lt;a href="http://perldoc.jp/docs/modules/Inline-0.43/Inline.pod"&gt;Inlineでモジュールを書く方法&lt;/a&gt;の通りに書いてみたらエラーを吐いて動かないので、どうしたもんかと。&lt;br /&gt;
で、少し探してみたら、&lt;a href="http://www.perl.com/pub/a/2003/11/07/java.html"&gt;あまり深く考えなくて、普通にコンストラクタだけ用意してやればOK&lt;/a&gt;ということらしい。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="mi"&gt;8008&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;our&lt;/span&gt; &lt;span class="nv"&gt;$VERSION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;0.01&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;Inline&lt;/span&gt; &lt;span class="n"&gt;Java&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;DATA&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$class&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nn"&gt;CDK::Simple::&lt;/span&gt;&lt;span class="n"&gt;smi2mol&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="bp"&gt;__DATA__&lt;/span&gt;
&lt;span class="n"&gt;__Java__&lt;/span&gt;
&lt;span class="nb"&gt;import&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StringWriter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;import&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;後は&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="err"&gt;コードがジャヴァジャヴァと。&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で、使ってみる。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;CDK::&lt;/span&gt;&lt;span class="n"&gt;Simple&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$smiles_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;C(=O)O&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$parser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$smiles_string&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;お～、モジュールだ。実行すると無駄にタメがあるのはjavaだから～。ところで、newでblessする必要はないのかな?とか気になる。&lt;/p&gt;
&lt;p&gt;実際に作ってみて、Inline::Java使ったモジュールは意外に簡単だった。&lt;/p&gt;</description><pubDate>Wed, 27 Sep 2006 23:20:04 +0919</pubDate><category>perl</category><category>java</category><category>cdk</category></item><item><title>Inline::JavaでCDKのニ次元構造立ち上げをperlから</title><link>http://blog.kzfmix.com/entry/1156116268</link><description>&lt;p&gt;_in house_でケモインフォ関連のプログラミングをするのに、二次元構造の立ち上げツール（またはライブラリ）と、構造描画ツールは必須だが、いまのとこ&lt;a href="http://blog.kzfmix.com/entry/1139668371"&gt;CDK&lt;/a&gt;を使うという選択肢しかない。&lt;/p&gt;
&lt;p&gt;実用Perlプログラミングに&lt;a href="http://mfpm.blogdb.jp/app/view/Inline::Java/"&gt;Inline::Java&lt;/a&gt;を使うとjavaのコードをperlに組み込めると書いてあったので、CDKを組み込んでみたヨ。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311280X/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51ZM9ZJ30PL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;実用 Perlプログラミング 第2版&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Simon Cozens&lt;br /&gt;
    オライリージャパン / 3360円 ( 2006-03-01 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;まぁ、要するに、&lt;br /&gt;
&lt;strong&gt;Q.そこまでしてperlで処理したいのか？&lt;/strong&gt;  &lt;br /&gt;
&lt;strong&gt;A. もちろんですヨ、奥さん&lt;/strong&gt;&lt;br /&gt;
ということなんだが。&lt;/p&gt;
&lt;p&gt;さて、インストールはj2sdkの場所を指定しないといけないのでcpan -iだとこける。そのため地道に、buildディレクトリで再インストール。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;cpan&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Inline&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.51&lt;/span&gt;
&lt;span class="n"&gt;$&lt;/span&gt; &lt;span class="n"&gt;perl&lt;/span&gt; &lt;span class="n"&gt;Makefile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PL&lt;/span&gt; &lt;span class="n"&gt;J2SDK&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jdk1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="n"&gt;_08&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="n"&gt;$&lt;/span&gt; &lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt;
&lt;span class="n"&gt;$&lt;/span&gt; &lt;span class="n"&gt;make&lt;/span&gt;
&lt;span class="n"&gt;$&lt;/span&gt; &lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;
&lt;span class="n"&gt;$&lt;/span&gt; &lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ただ、make javaで&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;注&lt;span class="p"&gt;:&lt;/span&gt;入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注&lt;span class="p"&gt;:&lt;/span&gt;詳細については、&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Xlint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;unchecked&lt;/span&gt; オプションを指定して再コンパイルしてください。
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;とかいう警告が出るが、testは通るのでまぁ気にしないということで。&lt;/p&gt;
&lt;p&gt;で、コードを書いてみる。&lt;/p&gt;
&lt;p&gt;参考にしたjavaのコード&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://cheminfo.informatics.indiana.edu/~rguha/code/java/"&gt;http://cheminfo.informatics.indiana.edu/~rguha/code/java/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cheminformatics.seesaa.net/article/20455721.html"&gt;http://cheminformatics.seesaa.net/article/20455721.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::java
    use Inline Java =&amp;gt; &amp;lt;&amp;lt;'END_OF_JAVA_CODE' ;
    import java.io.StringWriter;
    import java.io.IOException;
    import org.openscience.cdk.Molecule;
    import org.openscience.cdk.exception.CDKException;
    import org.openscience.cdk.io.MDLWriter;
    import org.openscience.cdk.smiles.SmilesParser;
    import org.openscience.cdk.layout.StructureDiagramGenerator;
    import org.openscience.cdk.tools.HydrogenAdder;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;smi2mol&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;smi2mol&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;smi&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="n"&gt;Molecule&lt;/span&gt; &lt;span class="n"&gt;mol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;SmilesParser&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SmilesParser&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;mol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parseSmiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;smi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="n"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;ise&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;ise&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printStackTrace&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;StringWriter&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;MDLWriter&lt;/span&gt;  &lt;span class="n"&gt;mw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;StringWriter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;mw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;MDLWriter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printStackTrace&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;HydrogenAdder&lt;/span&gt; &lt;span class="n"&gt;ha&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HydrogenAdder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;try&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;ha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addExplicitHydrogensToSatisfyValency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mol&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printStackTrace&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;StructureDiagramGenerator&lt;/span&gt; &lt;span class="n"&gt;sdg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;StructureDiagramGenerator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;try&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;sdg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setMolecule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mol&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;sdg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generateCoordinates&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;mol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sdg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getMolecule&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;mw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mol&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;printStackTrace&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;END_OF_JAVA_CODE&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$alu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;smi2mol&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;    
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$smiles_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$alu&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$smiles_string&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;実行してみる&lt;/p&gt;
&lt;p&gt;::: sh
    $ perl test.pl "C(=O)O"&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;  &lt;span class="n"&gt;CDK&lt;/span&gt;

  5  4  0  0  0  0  0  0  0  0999 &lt;span class="n"&gt;V2000&lt;/span&gt;
    1&lt;span class="p"&gt;.&lt;/span&gt;2990   &lt;span class="o"&gt;-&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;7500    0&lt;span class="p"&gt;.&lt;/span&gt;0000 &lt;span class="n"&gt;C&lt;/span&gt;   0  0  0  0  0  0  0  0  0  0  0  0
    0&lt;span class="p"&gt;.&lt;/span&gt;0000    0&lt;span class="p"&gt;.&lt;/span&gt;0000    0&lt;span class="p"&gt;.&lt;/span&gt;0000 &lt;span class="n"&gt;O&lt;/span&gt;   0  0  0  0  0  0  0  0  0  0  0  0
    2&lt;span class="p"&gt;.&lt;/span&gt;5981   &lt;span class="o"&gt;-&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;0000    0&lt;span class="p"&gt;.&lt;/span&gt;0000 &lt;span class="n"&gt;O&lt;/span&gt;   0  0  0  0  0  0  0  0  0  0  0  0
    1&lt;span class="p"&gt;.&lt;/span&gt;2990   &lt;span class="o"&gt;-&lt;/span&gt;2&lt;span class="p"&gt;.&lt;/span&gt;2500    0&lt;span class="p"&gt;.&lt;/span&gt;0000 &lt;span class="n"&gt;H&lt;/span&gt;   0  0  0  0  0  0  0  0  0  0  0  0
    3&lt;span class="p"&gt;.&lt;/span&gt;8971   &lt;span class="o"&gt;-&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;7500    0&lt;span class="p"&gt;.&lt;/span&gt;0000 &lt;span class="n"&gt;H&lt;/span&gt;   0  0  0  0  0  0  0  0  0  0  0  0
  2  1  2  0  0  0  0 
  3  1  1  0  0  0  0 
  1  4  1  0  0  0  0 
  3  5  1  0  0  0  0 
&lt;span class="n"&gt;M&lt;/span&gt;  &lt;span class="n"&gt;END&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;水素が付加されて、座標も計算されたMOLファイルが出力される。&lt;/p&gt;
&lt;p&gt;javaって例外を返す可能性がある場合try,catch構文入れないと強制的にエラーになるのね。try,catch構文は読みやすいけど、強制されんのはちょっとやだナァと。単にフォーマットをコンバートするだけのコードなのに結構長くなっちゃったし。&lt;/p&gt;
&lt;p&gt;::: perl
    use CDK;
    use Chemistry::Mol;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$mol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;CDK::&lt;/span&gt;&lt;span class="n"&gt;smi2sdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$molecule&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$mol&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;みたいにモジュールにしてuseして使えばCDKを意識しなくてよくなる。&lt;/p&gt;</description><pubDate>Mon, 21 Aug 2006 08:24:28 +0919</pubDate><category>chemoinformatics</category><category>perl</category><category>java</category><category>cdk</category></item><item><title>CDKで吐かせたmolはChemrubyでの構造描画が?だヨ</title><link>http://blog.kzfmix.com/entry/1139669175</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1139645753"&gt;ココ&lt;/a&gt;のエントリでの構造描画は流れ的にChemrubyで描くべきなんだけど。&lt;/p&gt;
&lt;p&gt;そもそも画像描画のステップには&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;2次元座標を保持したオブジェクトの生成&lt;/li&gt;
&lt;li&gt;画像描画&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;が必要で、smilesのような座標情報のない形での構造情報は、何かで構造立ち上げしないといけない。chemrubyは立ち上げ処理できないらしいので、この作業は他の何かに任せるわけだ。
ちなみに、perlmolは芳香環が含まれない場合には、座標のついた形でmol形式に保存してくれるんだが、座標があったりなかったりとかはかなり使いにくいし、普通芳香環のない構造扱うことってあんまないでしょ？&lt;/p&gt;
&lt;p&gt;な感じなので、&lt;a href="http://blog.kzfmix.com/entry/1139668371"&gt;CDK&lt;/a&gt;を使うのがデフォルト。&lt;/p&gt;
&lt;p&gt;で、CDKで"OC=C-C=C"をmol形式にするとこうなる&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;
  CDK

5  4  0  0  0  0  0  0  0  0999 V2000
    0.0000    0.0000    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    1.2990   -0.7500    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.5981   -0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    3.8971   -0.7500    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    5.1962   -0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  2  1  1  0  0  0  0 
  3  2  2  0  0  0  0 
  4  3  1  0  0  0  0 
  5  4  2  0  0  0  0 
M  END
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;うまく座標が割り当てられてますな。これをchemrubyを使ってpngに変換するとこうなる&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;
irb(main):001:0&gt; require 'RMagick'
=&gt; true
irb(main):002:0&gt; require 'chem'
=&gt; true
irb(main):003:0&gt; mol = Chem.open_mol("diene.mol")
irb(main):004:0&gt; mol.save("rbtest.png")
&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img alt="rbtest" src="http://www.kzfmix.com/images/blosxom/rbtest.png" /&gt;&lt;/p&gt;
&lt;p&gt;水酸基の情報が落ちてしまったヨ。&lt;/p&gt;</description><pubDate>Sat, 11 Feb 2006 23:46:15 +0919</pubDate><category>cdk</category><category>chemruby</category></item><item><title>CDKで構造描画</title><link>http://blog.kzfmix.com/entry/1139668371</link><description>&lt;p&gt;smilesから二次元座標を立ち上げるには、&lt;a href="http://cdk.sourceforge.net/"&gt;CDK&lt;/a&gt;を使う。openbabelとかperlmolはここらへんが未実装。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
 StructureDiagramGenerator sdg = newStructureDiagramGenerator();
 sdg.setMolecule(someMolecule);
 sdg.generateCoordinates();
 Molecule layedOutMol = sdg.getMolecule();
&lt;/blockquote&gt;

&lt;p&gt;これで二次元座標が起こせる。&lt;/p&gt;
&lt;p&gt;さらに、&lt;a href="http://cdk.sourceforge.net/apicvs/org/openscience/cdk/renderer/Renderer2DModel.html"&gt;org.openscience.cdk.renderer&lt;/a&gt;で構造をpngやjpgに書き出せる。&lt;/p&gt;
&lt;p&gt;&lt;img alt="dopamine" src="http://www.kzfmix.com/images/blosxom/dopamine001.png" /&gt;&lt;/p&gt;
&lt;p&gt;でもCDKでも画像サイズを小さくするとサイズにあわせてダブルボンドの幅を小さくしたりフォントも綺麗に見えるように小さくなったりというような親切設計ではないんだよね。&lt;/p&gt;
&lt;p&gt;&lt;img alt="dopamine" src="http://www.kzfmix.com/images/blosxom/dopamine002.png" /&gt;&lt;/p&gt;
&lt;p&gt;こんな風になってしまうな。今回eclipse使ってjavaで書いたけど、今後はこれをjythonで書き直す予定ダ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blue.chem.psu.edu/~rajarshi/code/java/"&gt;http://blue.chem.psu.edu/~rajarshi/code/java/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cdk.sourceforge.net/apicvs/"&gt;http://cdk.sourceforge.net/apicvs/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sat, 11 Feb 2006 23:32:51 +0919</pubDate><category>java</category><category>cml</category><category>cdk</category><category>eclipse</category></item><item><title>CDKで構造描画(Linux)</title><link>http://blog.kzfmix.com/entry/1136378732</link><description>&lt;p&gt;linuxで二次元構造立ち上げる場合はXからの場合は問題ないが、ターミナルから起動するときにはjavaのAWTでこけるのでXvfbで仮想Xを起動してからprogramを動かす。FC1はXFree86-XvfbだけどFC2はxorg-x11-Xvfbだった。yumで入れられなくてちょっと悩んだ。&lt;/p&gt;
&lt;p&gt;Linuxは画像出力サーバーとかCGIで使いたいからこの設定は必須でしょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.doumo.jp/postgretips/tips.jsp?tips=6"&gt;http://www.doumo.jp/postgretips/tips.jsp?tips=6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 04 Jan 2006 21:45:32 +0919</pubDate><category>cml</category><category>colinux</category><category>cdk</category></item></channel></rss>