PyMOL v1.5をosx10.6.8に入れた

リリースしている安定版はインストールできなかったので、svnのtrunk(r3983)を入れた。それからbrewを使っているのでsetup.pyをちょっと変える必要があった。

/opt/localはmacports用の設定だと思うので/usr/X11に変更しないとGL/gl.hがないとかそんなエラーを吐くはず。

156         EXT = "/usr/X11"
157         inc_dirs=["ov/src",
158                   "layer0","layer1","layer2",
159                   "layer3","layer4","layer5",
160                   EXT+"/include",
161                   EXT+"/include/GL",
162                   EXT+"/include/freetype2",
163                   "modules/cealign/src",
164                   "modules/cealign/src/tnt",
165                   "generated/include",
166                   "generated/src",
167                   ]

それからPmwはソースをダウンロードしてきて入れた。なくても動くと思うが、import errorが出るので気持ち悪かったから後から入れておいた。

恋するプログラムをCoffeeScriptで書いてみた

8章のマルコフモデルの実装までやった。ちなみに二単語のプレフィックスによるモデルを作ってた。ちなみにNodeで作る人工無脳は一単語ですね。こっちはリアルタイム化させているので面白いです。

9章はググらせるだけなのでこれでおしまいでいいやと。

ProductName 恋するプログラム―Rubyでつくる人工無脳
秋山 智俊
毎日コミュニケーションズ / ?円 ( 2005-04 )


いい本だと思うんだけどなかなか復刊しないですね。

coffeescriptでディープコピーをやる方法を探していたらCoffeeScript Cookbookを見つけたので、Smooth CoffeeScriptとあわせて読んでみる予定。

化合物の合成ストーリーはケミスト言語による文章構築

ところで、人口無能はつくってて楽しいですね。とか書いていて、ふとケミストの合成の流れもマルコフ性があるんじゃないかなぁと思った。思ったというより確信に近い。プレフィックスに構造とイシュー(活性改善とか代謝よくするとか)を入れてやれば、次に修飾したがるところって容易に想像できるよね。実際ベースラインとしてのファーマコフォアをたもちながらっていうよりは、直近の結果にものすごい左右されやすいという性格があってだなぁ(略)。

例えば、ある文章中の単語をランダムに並べ換えて、それをもとの文章に戻すっていう問題を考えた場合マルコフ性をうまく利用すればどの位うまく解けるんだろうかね?

そういう風に考えると、特許化合物のリストっていうのはランダムな単語リストと同じになるわけで、合成のマルコフ性を利用して合成の流れを再構築しなおすってのは面白いかもしれんなぁと思った。

そのうちもう少し良く考えてみようっと。

pybelで立体構造を立ち上げる

pybel(openbabel)で立体構造の立ち上げを行うのは簡単だ。

import pybel
mol = pybel.readstring("smi", "c1ccccc1C")
mol.make3D()
mol.write("mol")

コードを眺めていたら構造をたちあげるメソッドは

  • make3d
  • localopt
  • globalopt # ただし2.3.1ではコメントアウトされてた

make3dもglobaloptもlocaloptのstep数を変えて呼び出している。

localoptメソッドはデフォルトではmmff94パラメータを使って最急降下法で構造最適化をしている。

XML::Writerを使ってCytoscape用のXGMMLを出力する

Perlでコードを書いていてCytoscape用にファイルを出力したかったんだがGraph::GMLは読み込み専用だし、Graph::XGMMLはCytoscapeじゃ読み込めないし、、、

Graph::XGMMLのソースコードを読んでみたら、XML::Writerを使えばいいみたいなので書いた。

sub write_xgmml {
  open my $output, '>', 'output.xgmml';
  my $xml  = XML::Writer->new(OUTPUT=>$output);
  $xml->xmlDecl('UTF-8');
  $xml->startTag('graph',
                directed=>"1",
                label=>"Sample1",
                'xmlns:dc'=>"http://purl.org/dc/elements/1.1/",
                'xmlns:xlink'=>"http://www.w3.org/1999/xlink",
                'xmlns:rdf'=>"http://www.w3.org/1999/02/22-rdf-syntax-ns#",
                'xmlns:cy'=>"http://www.cytoscape.org",
                'xmlns'=>"http://www.cs.rpi.edu/XGMML"
               );

  my $i = 1;
  my %dict;

  #add node
  foreach my $key ( keys %$ids ){
    $dict{$key} = $i;
    $xml->startTag('node',
                  id => $i,
                  label => $key,
                 );
    $xml->emptyTag('att',
                  type => 'string',
                  name => 'canonicalName',
                  value => $key
                 );

    $xml->emptyTag('att',
                  type => 'real',
                  name => 'property',
                  value => $ids->{$key}->{'property'} ? $ids->{$key}->{'property'} : 0.0
                 );

    $xml->endTag('node');
    $i++;
  }

  #add edge
  for my $e (@$spt) {
    $xml->startTag('edge',
                  label  => "$e->[0] to $e->[1]",
                  source => $dict{$e->[0]},
                  target => $dict{$e->[1]}
                 );
    $xml->emptyTag('att',
                  type=>'string',
                  name=>'canonicalName',
                  value=> "$e->[0] to $e->[1]"
                 );
    $xml->endTag('edge');
  }

  $xml->endTag('graph');
  $xml->end;
  close($output);
}

基本的にstartTagとendTagで包んでemptyTagで属性を入れてくだけですね。あとCytoscapeのIDって整数じゃないとダメだったような気がするので、そうなるように書いたんだけど実際どうだったかは忘れた。

アジャイルソウヤクサムライ

アジャイル開発を創薬系にどう取り込んでいくかっていう観点で。

ProductName アジャイルサムライ−達人開発者への道−
Jonathan Rasmusson
オーム社 / 2730円 ( 2011-07-16 )


第V部のアジャイルなプログラミングに関しては昔考えたことがあるので、II−IV部あたりを。III部の計画づくりはうまく取り込むのが難しそうな気がするけどIV部の運営は色々参考になる。

まず、ソフトウェア開発と初期創薬開発の似ている部分異なる部分を書いておくが、特に異なる部分が重要。

異なる点

  • 工学的にコントロールできるわけではなく、発見に頼る部分がある。つまり作ってみて評価してみないとわからない部分が大きい
  • 成功したかしないかの二択。9割完成したとかはない(こういうのは失敗とみなされる)
  • ベロシティがうまく見積もれない。ブレークスルードリブンなので非連続の進捗になりやすい
  • あっちを動かすとこっちがおかしくなるというなかでバランスをとリながらベストを探るという多次元最適化戦略になることが多い

似ている点

  • 何人もの異なるエキスパートの協調作業を強いられる。役割はきちんよ分かれているが、優秀な人材は幾つかのフィールドをまたぐことができる(インフラもフロントエンドもできるプログラマみたいな感じ)
  • 自分のジョブしかできないヒトはスコープが狭いし、メタな視点に立てない。学習意欲のない人の生産性が低いもの一緒

みんなをバスに乗せる

スタートを切る前からだめになってしまうプロジェクトの主な理由は次の二点

  • 答えるべき問いに答えられない
  • 手強い質問をする勇気を持てない

まぁ、創薬プロジェクトでもよくありますね、認識しておかなければいけない問題を敢えて目をつぶって進めてた結果、激ハマリっていうパターンが。

手強い質問を先にすませてしまうためにインセプションデッキというツールが使える。

インセプションデッキは10の手ごわい質問と問題から構成されており、いずれの課題もプロジェクトを開始する前に聞いておかないとまずい質問ばかりだ

エレベーターピッチ

効能

  • 明快になる
  • チームの意識を顧客に向けさせる
  • 核心を捉える

テンプレート

  • [潜在的なニーズを満たしたり抱えている課題を解決したい]したい
  • [対象顧客]向けの、
  • [プロダクト名]というプロダクトは、
  • [プロダクトのカテゴリ]です。
  • これは[重要な利点、対価に見合う説得力のある理由]ができ、
  • [代替手段の最右翼]とは違って、
  • [差別化の決定的な特徴]が備わっている。

やらないことリスト

「やる」、「やらない」、「あとで決める」をきちんと見える化しておくツール。

創薬プロジェクトで「やらない」にタスクを入れるのはなかなか難しいかも。なので、「やる」と「後で決める」を明確に分けられればいいかな。

アジャイルなプロジェクト運営

ジャストインタイム分析の利点

  • 最新かつ最も充実した情報に基づいて分析できる
  • プロジェクトが進むにつれて分析がうまくなっていく
  • 手戻りが大量に発生することを避けられる

最後の手戻りを避けられるのは大きな利点だな。それからリリースボードとストーリーボードは便利そうだ。

アジャイルな計画づくり

これが一番納得出来なかった。ベロシティが見積もれないようなプロジェクトだと与えられた期間を頑張るしかないんじゃないかなぁと思う。

それから名前が付いてるのかどうかわからんけど、探索的なプロジェクトだと締め切り間際になると集中力を発揮して何とかやり切るパワーみたいなのってありますよね。そういうのも重要だと思うんだよね。

というわけで、この部に関してはモヤモヤ感が残っているのでまた後で書くかもしれない。

openbabel-2.3.1が出てますね。

2.3.1がリリースされたようです。

個人的に興味があるのは

  • PNG files from Open Babel contain molecular information and can be read to give the MDL Molfile.
  • Pybel now uses the built-in 2D depiction, and no longer needs OASA.

とABINITのフォーマットに対応したあたりかな。

あと、openbabel-python.iをいじってたので、ここをいじった場合のコンパイルのオプションをメモっておく。swigが有効になるようにしないといけないのに気付かなくてハマった。

cmake ../openbabel-2.3.1 -DPYTHON_BINDINGS=ON -DEIGEN2_INCLUDE_DIR=/usr/local/tmp/eigen-eigen-2.0.12 -DRUN_SWIG=ON

OBGenericからOBOrbitalDataへのキャストをできるようにして、vectorの設定もしたので、手元のpythonバインディングでは

orb = toOrbitalData(mol.GetData(openbabel.ElectronicData))
orb.GetAlphaOrbitals()[orb.GetAlphaHOMO()-1].GetEnergy()

とやるとHOMOのエネルギー(eV)を得られるようになっている。

追記12.01.28

homebrewでいれたpythonで使いたい場合optionで指示する

$ cmake ../openbabel-2.3.1 -DPYTHON_BINDINGS=ON \
  -DPYTHON_LIBRARY=/usr/local/lib/libpython2.7.dylib -DPYTHON_EXECUTABLE=/usr/local/bin/python \
  -DEIGEN2_INCLUDE_DIR=/Users/kzfm/openbabel/eigen-eigen-2.0.17 -DRUN_SWIG=ON

2011年に読んだ本

去年2010年に読んだ本というエントリを書いたので、今年も読んだ本の中から良かったものを選んでみた。

アジャイルな手法とか、最近のソーシャルネットの手法を効果的に取り込んだ、創薬研究プロセスとかそのためのインフラ構築に興味があるので、ビジネス本はそういうあたりがインスパイアされそうなものを選んであります。

技術書は色々読んだが、Scalaはもう少し追いかけていきたいなぁと思っている。

ビジネス本

ProductName 「新しい働き方」ができる人の時代
セス・ゴーディン
三笠書房 / 1470円 ( 2011-07-01 )


働き方やこどもの教育には関心があるので、今後どういう方向に向かうのかっていうのは興味がある。

ProductName アジャイルサムライ−達人開発者への道−
Jonathan Rasmusson
オーム社 / 2730円 ( 2011-07-16 )


まだ書評を書いてないけど、これは非常に面白いです。賛成できないところもあるけど、それすら「なぜ賛成できないのだろうか?」と考えさせられるので読んでて楽しかった。インセプションデッキと、エレベーターピッチは創薬プロジェクトでも有効だろうなと思うので取り入れてみたいなぁと。

ProductName デザインの骨格
山中俊治
日経BP社 / 1680円 ( 2011-01-29 )


僕はドラッグデザインにはアートの要素が沢山含まれていて楽しい仕事だと思っているし、工業デザインの範疇に入ると考えている。

技術書

技術書は

ProductName パーフェクトJavaScript (PERFECT SERIES 4)
井上 誠一郎
技術評論社 / 3360円 ( 2011-09-23 )


Javascript使いになろうとするなら必読かな。

ProductName 達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
ミック
翔泳社 / 2520円 ( 2008-02-07 )


集合指向言語として考えればSQLの言語仕様は非常に面白い

ProductName Scala実践プログラミング―オープンソース徹底活用
小笠原 啓
秀和システム / 2940円 ( 2011-06 )


Perlでいうところの「モダンPerl入門」またはPythonで言うところの「エキスパートPythonプログラミング」に対応する感じの中級を目指す人向けの本

Scalaはもっと盛り上がってもいいと思うんだけどなぁ。

ProductName Emacs Lispテクニックバイブル
るびきち
技術評論社 / 3129円 ( 2011-11-26 )


Emacs使いは読まねばならん。もう少し自分好みに手を入れられるように積極的にelisp書いていきたいなぁ。

PDBデータに化合物情報を追記して一つのファイルにしたい

mol形式(sdf形式)のデータだと化合物の区切りが$$$$なので、化合物を追加したい場合は何も考えずにファイルに追記するだけでいいのでよいですね。

PDB形式のデータにsdf形式の化合物情報をマージしたいんだけど、いい方法ないかなぁと調べてみたところmol2でOKだった。

両方mol2形式にして

cat compounds.mol2 >> protein_data.mol2

ってやればマージできる。

どういう用途を想定しているかっていうと

ある適当な部分構造(substructure)を持っている化合物の複合体結晶構造に、同じsubstructureをもつ別の化合物のコンフォマーを発生しつつ複合体のsubstructureの座標でalignする

つまり

  • obconformerでコンフォマーを発生
  • 複合体結晶構造のリガンドの部分構造を使ってobfitでコンフォマーをアライン
  • 一つのファイルにまとめてドッキングモデル完成

みたいなことをやりたかったわけです。こういうのはファイルが2つに分かれてるとユーザーのヒトとか使いにくいしどういう計算したのかわからなくなっちゃうからね。

ProductName Bioinformatics Programming Using Python
Mitchell L. Model
Oreilly & Associates Inc / 5119円 ( 2009-12-23 )


Half Sphere Exposureという指標

biopythonのMLに「蛋白内部に埋没している残基をどうやってけいさんすんの?」っていう質問が流れてて、HSEっていう指標が実装されているのを知った。

HSEってのはCalphaとCbetaのベクトルと直交する平面で球を切ってUpとDownの半球のことで、その中に他の残基のCalphaとCbetaが幾つあるか数えるという単純なCNっていう指標で溶媒接触表面積の代わりに使えるらしい。

この指標って例えば(潜在的な)リガンド結合部位の予測に使えたりするんだろうか?

PPI阻害剤なんかのターゲット部位予測に使えたら面白いかもねと思った。

ProductName Python for Bioinformatics (Chapman & Hall/CRC Mathematical & Computational Biology)
Sebastian Bassi
Chapman and Hall/CRC / 5857円 ( 2009-10-07 )


社会ネットワーク分析の基礎

ネットワーク分析は楽しいですね。普段は化合物のネットワークとかいじっているんだけど、もう少し見識を広めるために違ったタイプのネットワークの分析手法を勉強してみたくなって本書を読んでみた。

社会ネットワークとは、アクターと呼ばれる行為者としての社会単位が、その意図的・非意図的な相互行為のなかで取り結ぶ社会諸関係の集合である

これらをミクロな視点からみていくか、マクロな視点からみていくかだけど、マクロな視点だと個人の特性が失われてしまうので、これはダメらしい。自分の経験では、(ケミストリーを知らない)ケモインフォマティクスのヒトが、個々の化合物をパラメーターで潰してしまって実態とかけ離れたマクロな解釈しかできないのをよく見るので、まぁそうかなとも思う。

で、よりよい社会像を得るためにどうしたら良いのかということで、社会構造の二重性モデルを使うのが、現代の社会ネットワーク分析らしいです。

個人的に興味が湧いたのは9章の「弱い紐帯」が重要か、ブリッジが重要かという話題とネットワークは凝集的で閉鎖的がいいのか、離散的で開放的がいいのか?という話題。第三部の「ソーシャル・キャピタル研究:組織論への展開」は読み物として面白かった。

セイヤーによれば「関係」は形式的なものと実質的なものに分けられる

形式的の関係とは「ともに30歳」みたいなもので、実質的な関係の例は「夫婦」

ハイパーグラフは個人がグループに所属するような所属関係のネットワークを表すのに利用されたり、重複メンバー関係をモデル化するのに便利

これは以前教えてもらったときに調べた

かなり教科書っぽいので、手を動かしたい場合は「ネットワーク分析 (Rで学ぶデータサイエンス 8) 」のほうが良いかも

ProductName ネットワーク分析 (Rで学ぶデータサイエンス 8)
鈴木 努
共立出版 / 3465円 ( 2009-09-25 )