RDKitのMolオブジェクトにarrayデータを属性として持たせる方法(強引に)

RDKitのMolオブジェクトにリストとかnumpyのアレイをプロパティとしてセットしたかったので、Gregさんにメソッド用意されていないのか、やり方がないのか聞いてみたら、C++じゃないと出来ないとのこと。

セット系だと

  • SetBoolProp
  • SetDoubleProp
  • SetIntProp
  • SetProp
  • SetUnsignedProp

しか用意されていなくて、困ったなぁと途方にくれていたところ、 SetPropって文字列格納するからとりあえずシリアライズすればいけるんじゃないの ということでやってみた

>>> from rdkit import Chem
>>> import numpy as np
>>> import pickle
>>> mol = Chem.MolFromSmiles("CC")
>>> ar = np.array([[1,2,3],[4,5,6]])
>>> mol.SetProp("arraydata",pickle.dumps(ar))
>>> pickle.loads(mol.GetProp("arraydata"))
array([[1, 2, 3],
       [4, 5, 6]])

というわけで無事にセットできましたとさ。pickle使っているのはnumpyだとファイルかファイルハンドルとるので面倒くさかったから。

読書の機会損失

フライト用に湊かなえの「豆の上で眠る」と三浦しおんの「まほろ駅前狂騒曲」を買っていったのだけど、行きの途中で読み切ってしまった。帰りに読むものがないから困る。

豆の上で眠るは、読み終えてみるとなるほどなーと思う事件を取り扱っているんだけど、主人公の歪みっぷりのお陰でその線を感じさせないのが良かった。

まほろ駅は前作全部読んでいるから、すっと入って爽快に終わる感じで良かった。

両方の作者共に好きなんで満足です。

論文も幾つか消化したので集中力を発揮したのでまぁいいかなと。

で、そろそろうちのワンコが「朝やでー」って吠え始める頃合いなんだろうけど、こっちは夜が更けたばっかりだけど、外に出る気力もないのでビール飲みながらエントリを書いてみたりしているけど全然眠くならない…

もう一本BECKSを流し込んで寝ようw

Pygamess 0.4.0をリリースしました

何故か5年半ぶりのアップデートです。主な変更点はバックエンドのライブラリをopenbabelからRDKitに変えたことです。

その間もずっとソースコードの管理をしていてくれたGitHubには感謝しかないですな。あと来月ハンズオンやるので、興味を持ったら参加してください。

chemoinformaticsというか古典的なケミストリーで、励起とか軌道が関与する事象を追っかけようとすると、精度に満足しないし、解釈もしにくいかと思います。。そんな時に「じゃぁ量子化学計算でもするか、100化合物くらいのGAMESS INPUTでもつくるか!」とはならないと思います(ほんとにめんどくさいんだよ…)。

ケモインフォのぬるま湯に慣れきった我々はそもそも量子化学計算ソフトの複雑怪奇なインプットファイルなんてつくりたくもないし、ランだってしたくない。その結果に興味があるだけなのでそういうめんどくさいことは見えないところでやってほしいわけです。

pygamessはそういう目的のために作られたライブラリです。

Pork Adobo with Sprite

スプライトを使ったアドボのレシピがあったので試してみた。アドボ美味しいけどハイカロリーだな。

1505016580 1505016584

こっちはPork Bicol Expressというらしい。ギナタアンと何がちがうのかというと、グリーンチリで辛さを加えるか否からしい。

1505016586

スープは、普通に鰹と昆布で出汁をとって、クローブとブラックペッパー加えてラッサム風にした。レモン汁ちょっと入れすぎたかな。

1505016582

尚、具はネギと豆腐。

沼津自慢フェスタに行ってきた

沼津は通勤経路なので余裕でいける。金曜夜なので土砂降り明けにもかかわらず結構ヒトがいた。

リパブリューのゼロと開会式

1505015625 1505015627

ベアードビール風オブジェと川沿い

1505015629 1505015631

王味のハチノスは八角が効いていて美味。今度食べに行きたい。

1505015633

風にあたりながら夜に飲めるの楽しいですね。

PygamessのバックエンドをOpenbabelからRDKitに変更しているところ

今の会社がRDKitを使っていたり、gamessで計算したエネルギーとか軌道係数をそのままRDKit+Pandasに持っていけると都合が良かったりするので、バックエンドをRDKitに変更しようとしている。

とりあえず、このコミットでtotal energyが出るようになった。

久々にコードの修正していて、 なんじゃ、この書きなぐったようなコードは? と感じたのでもう少し綺麗に書き直したい。

>>> from pygamess import Gamess
>>> from rdkit import Chem
>>> from rdkit.Chem import AllChem
>>> m = Chem.MolFromSmiles("CC")
>>> m = Chem.AddHs(m)
>>> AllChem.UFFOptimizeMolecule(m,maxIters=200)
0
>>> g = Gamess()
>>> g.input(m)
' $contrl runtyp=energy scftyp=rhf mult=1  $end\n $basis gbasis=sto ngauss=3 $end\n $system mwords=30  $end\n $DATA\n6324\nC1\nC      6.0     -0.7593407291    0.0107048487   -0.0162273112 \nC      6.0      0.7593414912   -0.0107048029    0.0162270652 \nH      1.0     -1.1594363804   -0.1004995560    1.0135868837 \nH      1.0     -1.1131931576    0.9732198527   -0.4420381632 \nH      1.0     -1.1342180646   -0.8246918478   -0.6443526878 \nH      1.0      1.1342169299    0.8246865647    0.6443564239 \nH      1.0      1.1594357587    0.1005043120   -1.0135855392 \nH      1.0      1.1131941519   -0.9732193715    0.4420333286 \n$END\n'
>>> nm = g.run(m)
>>> nm.GetProp("total_energy")
'-78.302511907400003'

なんでGamessなんて使うかというと光毒性予測モデルのようなHOMO-LUMOギャップとか励起状態が効いてくるような現象を予測しようとした場合それなりの計算してあげないといけないからね。

Mishima.syk #11やります

次回の日程と内容が決まりました。

次回は2017/10/14@沼津で、GIt,GitHubのハンズオンをやります。

皆様の参加をお待ちしております。

なぜGit, GitHubのハンズオンなのかというと、最近のJ.C.I.M, J.M.Cといったメディシナルケミストリー、ケモインフォマティクス系の論文でも当たり前に「実装はGitHubにあげてあるから」みたいなことが書いてあって、

お前、その実装に興味あったらプルリク送るなり、Issue報告するなりコミットするの当然だろ?

というような意図が透けて見えるわけだけど、そもそもGitもGitHubも使えないとそういうあたりに貢献できないし、普通に困るだろうなぁという感じの話が出たからです。

実は、静岡のようなちょっと田舎のプログラマーコミュニティでも「えーまだgit使ってないの〜?」みたいな話が出たことがあってハンズオンをしたことがあります。

5年前だけどなw

つまり、プログラミングというかコード管理とかコミュニティの醸成などはこの業界はそのくらいは余裕で遅れているってことです。

プルリク送って取り込まれるとモチベーションがすごいあがるし、是非基本的なあたりは覚えて、ケモインフォティクス、バイオインフォマティクスコミュニティに貢献できるようになれるといいなぁと願っています。

大瀬崎でスノーケリング

野生のラブライバーの巣、つまり大瀬崎に行ってきた。密度的には内浦のほうが濃いけど、チャリで来る人とかいるからすごいな~と感心した次第。

尚、海のコンディションは波が高く、透明度も若干低めだったので、写真映えするようなものが少なく残念なショットばかりになってしまった。

知らん魚と、フロートのしたの小魚。

1503837397 1503837400

鯛の群れと、大きい魚

1503837402 1503837404

海から眺める富士山とキンギョハナダイ。実際はもっと綺麗だった…

1503837407 1503837409

タカッパと鯛の群れ(二度目)

1503837411 1503837414

天気は良いけど、風が強かった。あとこの時期でも海の家がやっていて、海水浴客が結構いたのはびっくりでした。 普段の年は終わっていてガランガランだしね。お盆が寒かったから延長したのかな?

1503837416

駐車場でタマムシを見つけた。人生で二度目かな数十年ぶりに見て感動してしまった。

1503837418

次のスノーケリングはいつ行けるのだろうか?

Gene symbolでpubmed検索をする

Gene symbolでpubmed検索をしたい場合には[sym]というオプションを付ければいいらしい。

あとはeutilに投げればXMLが返ってくるのでXPathでゴニョればいい。

例えばトポイソメラーゼIIでガン関連の文献がいくつあるかを調べたい場合にはこんな感じ。

import requests
from urllib import quote_plus
import xml.etree.ElementTree as ET

base_url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term="
query = "TOP2A[sym] AND Cancer"

url = "{0}{1}".format(base_url, quote_plus(query))
r = requests.get(url)

root = ET.fromstring(r.content)
print root.find("Count").text

ここで一句

田子の浦に うち出でてみれば ワンリキーの みなと公園に飴は降りつつ

1503218641

先週くらいから田子の浦みなと公園がワンリキーの巣になっていて、ワンリキー集めおじさん達が大挙して押し寄せていました(10人くらいだけどw)

朝の一時間くらいで10匹ぐらいはゲットできて飴も結構たまったので、暑くなる前に退散してカイリキーを少し揃えてみた。

1503218643

最近ハピナス、ラッキー増えたからこいつらでさくさく撃破していきたい、カビゴンも。

そして通勤経路のジムバッジを金にして、アイテム不足を解消したいw