<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>perlmol / Drkcore</title><link>http://blog.kzfmix.com/perlmol</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Mon, 23 Oct 2006 20:00:19 +0919</lastBuildDate><item><title>PerlMolでSMARTS</title><link>http://blog.kzfmix.com/entry/1161601219</link><description>&lt;p&gt;&lt;strong&gt;Chemistry::File::SMARTS Version 0.22&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;基本的な事柄&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;implicit,explicit&lt;/strong&gt;&lt;br /&gt;
implicit:明示的に指定されていないbondとか(水素)原子も含んだ完全な形で。&lt;br /&gt;
smiles記法では（明らかに省略できる）水素原子は省略するのでexplicit,implicitという区分けがある。MOLもそうだけど。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;http://cheminformatics.seesaa.net/article/23253094.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などを参照するとイメージはわかるはず。&lt;/p&gt;
&lt;h4&gt;patern match check&lt;/h4&gt;
&lt;p&gt;パターンマッチの確認は以下のコードでおこなった。&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;#!/usr/bin/perl&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;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="nn"&gt;Chemistry::File::&lt;/span&gt;&lt;span class="n"&gt;SMARTS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Chemistry::File::&lt;/span&gt;&lt;span class="n"&gt;SMILES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Chemistry::&lt;/span&gt;&lt;span class="n"&gt;Ring&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;aromatize_mol&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$SMARTS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$SMILES&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@ARGV&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;SMARTS: $SMARTS\n&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="s"&gt;&amp;quot;SMILES: $SMILES\n&amp;quot;&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;$pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Chemistry::&lt;/span&gt;&lt;span class="n"&gt;Pattern&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$SMARTS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;smarts&amp;#39;&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;$react&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Chemistry::&lt;/span&gt;&lt;span class="n"&gt;Mol&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$SMILES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;smiles&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;aromatize_mol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$react&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;$count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pattern&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$react&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
    &lt;span class="nv"&gt;$count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&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;$count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;h4&gt;Atomic Primitives&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;*&lt;br /&gt;
全ての原子にマッチ&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a,A&lt;br /&gt;
Aromatic(a) or Aliphatic(A)。
PerlMolではChemistry::Ringでaromatize_molしとかないと認識しない。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;D&amp;lt;n&amp;gt;,X&amp;lt;n&amp;gt;,x&amp;lt;n&amp;gt;&lt;br /&gt;
結合原子数(n)を有するAtomにマッチ。明示的(D)か、内在的(X)か。つまり、Dは明示的にHとの結合が指定されていない限りこれをカウントしない。xはリングのコネクティビティだが、PerlMolではサポートされてないっぽい。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;H&amp;lt;n&amp;gt;,h&amp;lt;n&amp;gt;&lt;br /&gt;
明示的なHをカウントする(H)か内在的なものも含めるか(h)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;R&amp;lt;n&amp;gt;,r&amp;lt;n&amp;gt;&lt;br /&gt;
n原子からなるSmallest Set of Smallest Rings (SSSR)のメンバーにマッチ(R)。PerlMolだとRかどうかだけしか判断していないので&amp;lt;n&amp;gt;は関係ないかも。リングサイズが最小のSSSRのメンバーにマッチ(r)。芳香環かそうでないかは判断せず、n員環のメンバーであればマッチ&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;こんな感じ&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;smartstest&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;C1CCCCC1CCC&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# 6&lt;/span&gt;
&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;smartstest&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;c1ccccc1CCC&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# 6&lt;/span&gt;
&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;smartstest&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;c1cc1CCC&amp;#39;&lt;/span&gt;    &lt;span class="c1"&gt;# 0&lt;/span&gt;
&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;smartstest&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;c1cc1CCC&amp;#39;&lt;/span&gt;    &lt;span class="c1"&gt;# 3&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;v&amp;lt;n&amp;gt;
バレンス。いわゆる手を伸ばせる数(Nは3で、Cは4)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;lt;n&amp;gt;,+&amp;lt;n&amp;gt;,#n
チャージの有無と原子番号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;@,@@,@&amp;lt;c&amp;gt;&amp;lt;n&amp;gt;,@&amp;lt;c&amp;gt;&amp;lt;n&amp;gt;?
キラルはPerlMolではサポートされてない。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bond Primitives&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;-,=,#,:
一重結合(-)、二重結合(=)、三重結合(#)、芳香属性の結合(:)
aromatizeしてるのに二重結合がカウントされるのがわからん。局在化した芳香環の二重結合だけ読んでるっぽいので、SMARTS書くとき注意&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下の例&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;smartstest&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;c:c&amp;quot;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;c1ccccc1&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SMARTS:&lt;/span&gt; &lt;span class="n"&gt;c:c&lt;/span&gt;
&lt;span class="n"&gt;SMILES:&lt;/span&gt; &lt;span class="n"&gt;c1ccccc1&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;smartstest&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;c=c&amp;quot;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;c1ccccc1&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SMARTS:&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="n"&gt;SMILES:&lt;/span&gt; &lt;span class="n"&gt;c1ccccc1&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="err"&gt;./&lt;/span&gt;&lt;span class="nv"&gt;smartstest&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;c-c&amp;quot;&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;c1ccccc1&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SMARTS:&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="n"&gt;SMILES:&lt;/span&gt; &lt;span class="n"&gt;c1ccccc1&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;~,@
ワイルドカード(~)、リング結合全て(@)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;/,,/?,?
PerlMolでサポートされてるかどうか調べてない(とりあえず使わないので後回し)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Logical Operator&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;!,&amp;amp;,,(commma),;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;否定(!),論理積(&amp;amp;,; ただし、&amp;amp;は最初に評価される),論理和(,)&lt;/p&gt;
&lt;h4&gt;Component-level grouping&lt;/h4&gt;
&lt;p&gt;PerlMolではサポートされていない&lt;/p&gt;
&lt;p&gt;こういうのをblogに突っ込むのは無理がある。素直にWiki+Markdown入れようと思ったヨ。&lt;/p&gt;</description><pubDate>Mon, 23 Oct 2006 20:00:19 +0919</pubDate><category>perl</category><category>perlmol</category></item><item><title>Perlクイズを読み終えた</title><link>http://blog.kzfmix.com/entry/1154602675</link><description>&lt;p&gt;一ヶ月くらい前から暇をみては&lt;a href="http://www.hyuki.com/pq/"&gt;Perlクイズ&lt;/a&gt;を解いていたのだが、ここ2,3日は集中してすすめることができた。というわけで、本日終了。&lt;/p&gt;
&lt;p&gt;最後のほうはパズルばかりでかなり手ごわいクイズが並んだが、一通りやり遂げた。&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/4797321261/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51VJ2DQ44NL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;結城浩のPerlクイズ&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    結城 浩&lt;br /&gt;
    ソフトバンククリエイティブ / ?円 ( 2002-08 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://del.icio.us/kzfm/perlquiz"&gt;特に面白かったのはここらへん&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;初盤ではハッシュの操作とか正規表現なんかの問題が多かったが、特にソート関係は勉強になった。&lt;/p&gt;
&lt;p&gt;あとは、「&lt;a href="http://blog.mag2.com/m/log/0000015670/105098367.html"&gt;あらかじめ行数がわかっていなくてもランダムに行を表示する&lt;/a&gt;方法は特にイテレータ使ってる場合にランダムに一個選びたい場合にイイ。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1137502149"&gt;chemicho&lt;/a&gt;っていうプログラムを書いていたときに、&lt;a href="http://www.perlmol.org/"&gt;perlmol&lt;/a&gt;の部分構造マッチのメソッドがイテレータで、ヒット数を返すメソッドがなかったため、マッチした部分の中からランダムで一箇所選ぶためにわざわざ一回スキャンしてヒット数を調べてから、int(ヒット数*rand)番目を再度イテレータ使って取得するという二回同じイテレータをまわすプログラムだったという。&lt;/p&gt;
&lt;p&gt;これって無駄だなと思っていたので、上のやり方はエレガントじゃ！と感動した。&lt;/p&gt;</description><pubDate>Thu, 03 Aug 2006 19:57:55 +0919</pubDate><category>perl</category><category>perlmol</category></item><item><title>openbabelのperlラッパー</title><link>http://blog.kzfmix.com/entry/1149690771</link><description>&lt;p&gt;&lt;a href="http://openbabel.sourceforge.net/wiki/Main_Page"&gt;openbabel&lt;/a&gt;にはobfitっていうツールがあることを&lt;a href="http://cheminformatics.seesaa.net/article/18242478.html"&gt;ケムインフォマティクスに虚空投げ&lt;/a&gt;で知った。なかなかイカス。今まで、「babelって調子いいフォーマットコンバーターだよな」ぐらいの認識だったヨ。&lt;/p&gt;
&lt;p&gt;でもobfitはmol,molで重ね合わせるコマンドライン向きのプログラムなんで、普通にライブラリをMCSでぶん回すには、シェルスクリプト書いたりしなきゃならんし、シェルスクリプトでまわすとin,outでテンポラリのファイルがたくさんできるからやだナァ。&lt;/p&gt;
&lt;p&gt;と思ったのでドキュメント漁りをしてみたら、&lt;strong&gt;Chemistry::OpenBabel&lt;/strong&gt;っていうperlラッパーがあった。
うーんCPANでみたことないなぁ、、、と思ったらCPANにはあがってなくて、展開したアーカイブのscripts/perl/で配布してるみたい。&lt;/p&gt;
&lt;p&gt;ソースを眺めたら、SWIG使っているのね。普通にインストールはOK。C++の関数をそのままPerlでラップしてるみたいなので、obfitのソース眺めながら、そのままperlで書きなおしてやれば、perlスクリプトとして使えるかな?って感じなのであとでやる。&lt;/p&gt;
&lt;p&gt;それよりもSWIG覚えたいかも。実用perlプログラミングの初版には詳しく書いてあったはずだけど、第二版ではばっさり削られてInline::Cとかになってた。こんなん覚えてくるとperlでjavaライブラリの&lt;a href="http://almost.cubic.uni-koeln.de/cdk/"&gt;CDK&lt;/a&gt;とか呼びたくなるにちがいないんだろうけど、Inline::Javaって使えるのかな？これもあとで調べる。&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/4900900826/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51V51T5Z27L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;実用Perlプログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    スリラム スリニバサン&lt;br /&gt;
    オライリー・ジャパン / ?円 ( 1998-11 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;ただ、API見る感じだと、Chemistry::OpenBabeで分子のモディファイとか&lt;a href="http://blog.kzfmix.com/entry/1139645753"&gt;リアクション関連&lt;/a&gt;いじるのやりにくくなかろうか？やっぱPerlMolははずせないわなと思ったが、Readmeに、そのうちPerlMolとopenbabelのグルーモジュール作るよん！って書いてあった。ナイス、楽しみ。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
Future development will include a "glue module" to integrate with
PerlMol and other Perl chemistry projects.
&lt;/blockquote&gt;

&lt;p&gt;で、さらに&lt;a href="http://cheminformatics.seesaa.net/"&gt;ケムインフォマティクスに虚空投げ&lt;/a&gt;でOELibという記述が何度か出てきたので、もしや&lt;a href="http://www.cybernet.co.jp/lifescience/openeye/product/toolkit/oechem.shtml"&gt;OpenEye&lt;/a&gt;かと思ったら、やっぱそうだった。OpenEyeのライブラリなんだったら別にPerlMol使わなくても、化合物いじり出来るんではないの？とか思ったが、&lt;a href="http://openbabel.sourceforge.net/wiki/FAQ"&gt;FAQ&lt;/a&gt;に歴史的な経緯が書いてあった。だから、やっぱ素直にPerlMol使ったほうがいいのでしょう。OEChemはOELibを書き直してるってことはデータの内部構造結構違うんだろうな。&lt;/p&gt;
&lt;p&gt;というわけで、ツールキットみたなかではいまんとこ&lt;a href="http://blog.kzfmix.com/entry/1149687065"&gt;OEChemが一番&lt;/a&gt;良く出来てる気がしてる。&lt;/p&gt;</description><pubDate>Wed, 07 Jun 2006 23:32:51 +0919</pubDate><category>perlmol</category><category>babel</category></item><item><title>In silico Library Enumeration of Synthetically Feasible Libraries</title><link>http://blog.kzfmix.com/entry/1147956882</link><description>&lt;p&gt;みんな、似たようなこと考えるのね。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://barryhardy.blogs.com/cheminfostream/2006/05/in_silico_libra.html" title="Cheminfostream: In silico Library Enumeration of Synthetically Feasible Libraries"&gt;Cheminfostream: In silico Library Enumeration of Synthetically Feasible Libraries&lt;/a&gt;
&lt;blockquote&gt;“The core functionality to enumerate focused de novo type libraries in Oracle for a number of organic transformations is already available”&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;一応、Feasibleだったとしてもだ、、、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sparseすぎ&lt;/li&gt;
&lt;li&gt;ActiveCompoundあったとしても、活性相関探るために近傍のcompsつくるために手動かさなきゃならんので意外にrapidじゃない。H2Lの部分は速くならないってこと。&lt;/li&gt;
&lt;li&gt;造り過ぎ&lt;/li&gt;
&lt;li&gt;楽しいので、ついつい作りすぎてしまうネ。100,000　x 100,000で100億でしょ。さらに多段階合成なんかでもう一回かますともう大変。作るほうはドンドコドンドコ量産されるのでとっても嬉しいんだけど。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;でも、大変なのはこっからだ。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;どうやって絞込みすんの?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;精度のいい予測つかって精度99.0%のモデルでも1億化合物残るね。Rule of X(5,3)だとかいっても、そもそも考慮されていたりするから、意外に減らせなかったり。そうすっと結構泣く。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;調子にのって作りすぎなきゃよかった&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;みたいな。みんな若気の至り汁が出て困ったことがあるはず。&lt;/p&gt;</description><pubDate>Thu, 18 May 2006 21:54:42 +0919</pubDate><category>chemoinformatics</category><category>perlmol</category></item><item><title>Diels-Alder Reaction (PerlMol)</title><link>http://blog.kzfmix.com/entry/1139645753</link><description>&lt;p&gt;PerlMolで化学反応のルーチンってどう書けばええの？と聞かれたことはないが、こんな感じで僕は書いてマスヨってことで、ひとつ&lt;a href="http://www.chem-station.com/odoos/data/ene-ene-1.htm"&gt;Diels-Alder反応&lt;/a&gt;をさせてみる。&lt;/p&gt;
&lt;p&gt;&lt;img alt="dareact" src="http://www.kzfmix.com/images/blosxom/dareac.png" /&gt;&lt;/p&gt;
&lt;p&gt;適当に用意したこんな反応だ。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;
#!/usr/bin/perl

use strict;
use warnings;
use Chemistry::File::SMILES;
use Chemistry::File::SMARTS;
use Chemistry::Ring 'aromatize_mol';

#反応させる基質を用意
my $react1 = Chemistry::Mol-&gt;parse('ClC=C dienophile', format =&gt; 'smiles');
my $react2 = Chemistry::Mol-&gt;parse('OC=C-C=C diene', format =&gt; 'smiles');

#dieneとdienophileのパターンをSMARTSで定義
my $dienophile_pat = Chemistry::Pattern-&gt;parse("C=C", format =&gt; 'smarts');
my $diene_pat = Chemistry::Pattern-&gt;parse("C=C-C=C", format =&gt; 'smarts');

#まずおまじない
aromatize_mol($react1);
aromatize_mol($react2);

#生成物に名前をつけ,基質をくっつける。
my $name = $react1-&gt;name . "+" . $react2-&gt;name;
my $prod = Chemistry::Mol-&gt;new(name =&gt; $name);
$prod-&gt;combine($react1, $react2);

#dieneとdienophilieのパターンを探し、みつかったら各オブジェクトにマップ
$dienophile_pat-&gt;match($prod);
my @atom_map1 = $dienophile_pat-&gt;atom_map;
my @bond_map1 = $dienophile_pat-&gt;bond_map;

$diene_pat-&gt;match($prod);
my @atom_map2 = $diene_pat-&gt;atom_map;
my @bond_map2 = $diene_pat-&gt;bond_map;

#反応用の原子が揃っているかチェック
if ($atom_map1[0] &amp;&amp; $atom_map1[1] &amp;&amp; $atom_map2[0] &amp;&amp; $atom_map2[3]) {

#結合の作成
    $prod-&gt;new_bond(atoms =&gt; [$atom_map1[0], $atom_map2[0]], order =&gt; '1');
    $prod-&gt;new_bond(atoms =&gt; [$atom_map1[1], $atom_map2[3]], order =&gt; '1');

#dieneとdienophileの結合次数を変える
    $bond_map1[0]-&gt;order(1);
    $bond_map2[0]-&gt;order(1);
    $bond_map2[1]-&gt;order(2);
    $bond_map2[2]-&gt;order(1);

my $smi = $prod-&gt;print(format =&gt; 'smiles', unique =&gt; 1, name =&gt; 1);

#SMILESで出力
    print "$smi\n";
}
&lt;/pre&gt;&lt;code&gt;
&lt;/blockquote&gt;

&lt;p&gt;早速実行してみると、&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;
$dareac.pl 
OC1C=CCCC1Cl    dienophile+diene
&lt;/pre&gt;&lt;code&gt;
&lt;/blockquote&gt;

&lt;p&gt;jchempaintで確認してみると&lt;/p&gt;
&lt;p&gt;&lt;img alt="daproduct" src="http://www.kzfmix.com/images/blosxom/daproduct.png" /&gt;&lt;/p&gt;
&lt;p&gt;ちゃんと環まいとるヨ。&lt;/p&gt;
&lt;p&gt;さて、スクリプトをくどくどと書いたけど、処理の流れは単純でわかりやすいのですヨ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基質の用意と反応する部分構造のパターン定義&lt;/li&gt;
&lt;li&gt;生成物のオブジェクトを作成し基質を放り込む(combine)&lt;/li&gt;
&lt;li&gt;パターンマッチさせたら、原子と結合に位置のマップ&lt;/li&gt;
&lt;li&gt;マップされた結合と原子に対して処理&lt;/li&gt;
&lt;li&gt;結合新しく作ったり、切り離したり&lt;/li&gt;
&lt;li&gt;原子オブジェクトの削除とか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;エッジとノードで表現するせいなんだと思うが&lt;strong&gt;マップされた結合と原子に対して処理&lt;/strong&gt;するルーチンが結構煩雑になり気味で、デバッグは大抵ココに集中したりする。dieneの端っこ結合作ったら、pな軌道が隣り合うから間は二重結合になるだろって思うが    $bond_map2[1]-&amp;gt;order(2)って明示しないと、ラジカルとして表現されちゃったりとか。sp2,sp3の情報入れとけば自動で判別するようにできるような気がするが難しいのだろうか?&lt;/p&gt;
&lt;p&gt;あとは、サンプルなのではしょってますが、この反応ではpara体も生成させることは出来ます。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;pre&gt;&lt;code&gt;#結合の作成
    $prod-&gt;new_bond(atoms =&gt; [$atom_map1[0], $atom_map2[3]], order =&gt; '1');
    $prod-&gt;new_bond(atoms =&gt; [$atom_map1[1], $atom_map2[0]], order =&gt; '1');
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;って書けばpara体出来上がり。&lt;/p&gt;
&lt;p&gt;というわけで、普通は二通りの生成物を提示するんだろうけど、&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.chem-station.com/odoos/data/ene-ene-1.htm" title="Diels-Alder反応"&gt;Diels-Alder反応&lt;/a&gt;
&lt;blockquote&gt;Diels-Alder付加体の二つの置換基はオルト位/パラ位を占めるように位置選択的に付加することが有機電子論から経験的に予測される(オルト-パラ則)。詳細にはFrontier軌道のローブ係数を求めて比較することで説明がなされる。すなわち、下図のようにHOMO/LUMOの係数が大きい点同士が重なるように付加する。&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;とあるように、軌道の計算してやればどっちが出来やすいか予測することは可能なので、反応処理ルーチンに&lt;a href="http://blog.kzfmix.com/entry/1137893694"&gt;PyQuante&lt;/a&gt;みたいな量子化学計算モジュールを組み込んで判断させてやれれば素敵かなぁと思っている。&lt;/p&gt;</description><pubDate>Sat, 11 Feb 2006 17:15:53 +0919</pubDate><category>perlmol</category></item><item><title>CML2SVG(Perl)</title><link>http://blog.kzfmix.com/entry/1138869167</link><description>&lt;p&gt;当初、CMLからSVGに変換するのは&lt;a href="http://blog.kzfmix.com/entry/1119150940"&gt;xslt&lt;/a&gt;でも用意すればと考えていた。だが、xsltイマイチ分からん、というより覚えるのがだるい。というわけで、「だらだら流れる(逐次処理する)んだったらSAXでも使おうかナァ」なんてノリでとりかかってみた。
しかし、bondのatomRefがatomidで、座標をatomエレメントから呼んでこないといけないので、やっぱSAXもメンドイかなってことで最終的にDOMりましたヨ。&lt;/p&gt;
&lt;p&gt;perlの&lt;a href="http://mfpm.blogdb.jp/app/view/XML::DOM/"&gt;XML::DOM&lt;/a&gt;と&lt;a href="http://mfpm.blogdb.jp/app/view/SVG/"&gt;SVG&lt;/a&gt;モジュール使用。&lt;/p&gt;
&lt;p&gt;とりあえず出来たSVGをconvertでpngにしてみた。&lt;/p&gt;
&lt;img src=/images/blosxom/cml2svg2png_sample.png /&gt;

&lt;p&gt;SVGは&lt;a href="/images/blosxom/cml2svg_test.svg"&gt;ココ&lt;/a&gt;だが一回セーブしてからでないとビューアーがうまく立ち上がらないような。&lt;/p&gt;
&lt;p&gt;あとは、アトムラベルのとことかダブルトリプルボンドの処理とかだけど、丁寧に書いていけばよいな。それから、スケーリングもちゃんと書かないといけないなぁ。もうちょっと、ましなスクリプトになったら落とせるようにしておくヨ。&lt;/p&gt;
&lt;p&gt;しかし、重要な問題が残っている（まぁコレに気付いてやる気レス化したため、プログラム書くのが延び延びになったんだが、、、）&lt;/p&gt;
&lt;p&gt;それは、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://openbabel.sourceforge.net/"&gt;openbabel&lt;/a&gt;も&lt;a href="http://www.perlmol.org/"&gt;PerlMol&lt;/a&gt;も座標を自動で発生してくれない!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ということだ。ちゅうわけで、&lt;a href="http://ja.wikipedia.org/wiki/SMILES"&gt;SMILES&lt;/a&gt;からCMLにすると泣く。まぁ座標の問題はそのうち対応するみたいなんで期待してる。&lt;/p&gt;</description><pubDate>Thu, 02 Feb 2006 17:32:47 +0919</pubDate><category>perlmol</category><category>CML</category><category>SVG</category></item><item><title>Perlmolのsmilesには名前が必須みたいだ</title><link>http://blog.kzfmix.com/entry/1137681352</link><description>&lt;p&gt;perlmolでparse_smiするとwarningが出るのでなんでかな？と思って調べたところ、名前を入れてやらないと駄目らしい。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/site_perl/5.8.3/Chemistry/File/SMILES.pm line 500.
Oc1ccccc1Cl 
&lt;/blockquote&gt;

&lt;p&gt;ってエラーがでるので、&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
my $react = Chemistry::Mol-&gt;parse('c1ccccc1Cl Cl-benzene', format =&gt; 'smiles'); 
&lt;/blockquote&gt;

&lt;p&gt;ってしてやれば解消される。&lt;/p&gt;</description><pubDate>Thu, 19 Jan 2006 23:35:52 +0919</pubDate><category>perlmol</category></item><item><title>ケミッチョ</title><link>http://blog.kzfmix.com/entry/1137502149</link><description>&lt;p&gt;さて、ここで、&lt;strong&gt;ケミッチョ&lt;/strong&gt;という言葉を定義しよう（なんつって）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ケミッチョ&lt;/strong&gt;とは、「それなりに生物学的等価性とか、(できれば)化学反応論に沿った形での合成化合物アイデアをたたき出す何か(でもいわゆる知的ではない)」と定義します。&lt;/p&gt;
&lt;p&gt;そして、&lt;strong&gt;ケミッチョ&lt;/strong&gt;のperlでの実装をchemichoとしてみた。つまり、図のように、まろやかに変異させていきつつ、中間状態をいくつか保持しておいて、サイクルをまわすようなコードを書くと。ちなみに、図はperlmolで反応を記述しやすいように部分構造検索が反応のトリガーになるようにしてます。&lt;/p&gt;
&lt;p&gt;&lt;img alt="chemicho" src="http://www.kzfmix.com/images/blosxom/mutateflow.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;変異の重みは適当に制御できるようにYAMLかXMLかなんかのコンフィグレーションファイル形式にすればいいでしょう。ってことで、暇を見てはコード書き書きしてます。&lt;/p&gt;
&lt;p&gt;一応、創薬的な偉さのイメージは↓な感じになると思う。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ケミッチョ(ランダム) &amp;lt;&amp;lt; (メディシナル)ケミスト &amp;lt;&amp;lt; 偉い仔(いわゆる神がかりな)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;とりあえず、ランダムにアイデア生成する人工無能っぽいモノをつくってみたい（ネーミングも含めて)
そして、グーグル界でオンリーワンを狙え！みたいなノリで、思いついたのが半年以上前のこと。で、エントリ書くのサボっているうちに&lt;a href="http://www.google.co.jp/search?q=%E3%82%B1%E3%83%9F%E3%83%83%E3%83%81%E3%83%A7&amp;amp;start=0&amp;amp;start=0&amp;amp;hl=ja&amp;amp;lr=lang_ja&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:ja-JP:official"&gt;グーグルでのオンリーワン&lt;/a&gt;はもろくも崩れさった模様。&lt;/p&gt;
&lt;p&gt;あと独りブレストにはやっぱ&lt;a href="http://wema.sourceforge.jp/"&gt;wema&lt;/a&gt;がいい！図はwemaで書いてます。&lt;/p&gt;</description><pubDate>Tue, 17 Jan 2006 21:49:09 +0919</pubDate><category>perlmol</category></item><item><title>debian(sarge)のperl5.8.4はperlmolが動かん</title><link>http://blog.kzfmix.com/entry/1137305972</link><description>&lt;p&gt;R4でコード書いていたら、以下のエラーが。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
Weak references are not implemented in the version of perl at /usr/local/share/perl/5.8.4/Chemistry/Atom.pm line 51
&lt;/blockquote&gt;

&lt;p&gt;どうも、Scalar::Utilのweakenが駄目みたいで、perlのバージョンのせいっぽい感じ。&lt;/p&gt;
&lt;p&gt;なんで、Perlのバージョンあげるか落とすかしないといけないんだけど、apt-getいまいち把握していないから、いじるの怖い。&lt;/p&gt;
&lt;p&gt;と、思ったら、&lt;/p&gt;
&lt;p&gt;colinuxだからイメージファイルコピーして、&lt;strong&gt;バックアップとっておけば、やりたい放題なことに気づく。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これから、ソースから5.8.7入れます。&lt;/p&gt;</description><pubDate>Sun, 15 Jan 2006 15:19:32 +0919</pubDate><category>colinux</category><category>perlmol</category></item><item><title>colinux(debian)にBioperlとPerlMolをインストール</title><link>http://blog.kzfmix.com/entry/1135049355</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1134996362"&gt;colinux&lt;/a&gt;はtelnetとftpの設定してしまえば、後はpoderosaみたいなターミナルソフトでアクセスだ(colinuxのコンソールは使いづらい)
あとキーボードを日本語対応にしたり、タイムゾーンを変更したりは&lt;a href="http://www2.starcat.ne.jp/~kanocl/colinux/colinuxtips.htm"&gt;ココ&lt;/a&gt;参照だ。&lt;/p&gt;
&lt;p&gt;とりあえず、せっかくdebian入れたことだし、sargeにアップグレードしておく。/etc/apt/source.list変えて、コマンドポチポチするだけダ。apt-getかなり便利と思った。&lt;/p&gt;
&lt;p&gt;さて、Linux側の環境を整えたら、&lt;a href="http://bio.perl.org/"&gt;Bioperl&lt;/a&gt;と&lt;a href="http://www.perlmol.org/"&gt;PerlMol&lt;/a&gt;をインストールするヨ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PerlMol&lt;/li&gt;
&lt;li&gt;オブジェクト指向で化合物とか反応を扱う。酸クロとかの反応用のモジュール作っておくとさらに便利。ただし、蛋白質とかの巨大なものを扱うにはどうじゃろか？今ひとつな気もする。構造立ち上げとかしっかりしてくればかなりいいツールになるんじゃないかと思っている。&lt;/li&gt;
&lt;li&gt;Bioperl&lt;/li&gt;
&lt;li&gt;とりあえずお約束。フォーマット変換とかは便利。ただし、モジュールの質はまちまち。ドキュメントに不備がある場合、直接コードを読むことになるが、そういうモジュールに限って泣きたくなる度が高い。で、結局自分で書いちゃったみたいな。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PerlMolはCPAN経由で入れる。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;
perl -MCPAN -e 'install PerlMol'
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;BioperlはCPAN経由だとやたらとはまって口が半開きになって、なんでだよチクショーなんてむかつきまくってイカリンコ汁が漏れるので、素直にapt-getで（それが大人スタイル）。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://packages.debian.org/unstable/science/bioperl"&gt;Package: bioperl &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;素直にしこしこapt-get installしましょう。blastとかclustalwなんかも一緒に入れておくと良いですぞ。&lt;/p&gt;</description><pubDate>Tue, 20 Dec 2005 12:29:15 +0919</pubDate><category>bioperl</category><category>colinux</category><category>perlmol</category></item></channel></rss>