python

化合物から水素原子を引き抜いたラジカルの組み合わせ

ある化合物がCYPにより水酸化されて代謝されると分かっている場合に、全ての水素原子の乖離エネルギーを求めてラジカル生成エネルギーの低い順に代謝部位のあたりをつけたりしますが、毎回手で水素を消去した組み合わせを作るのは面倒なのでopenbabelでやっ…

GAMESSでさくっと構造最適化をしたい

forcefieldを用いた構造最適化の限界は、特に芳香環での部分電荷なんかに顕著に現れます。そのため、必要最低限の量子化学計算のスキルはケミストには必須だと思います。しかし、量子化学計算ソフトウェアは歴史的経緯からか、ライトユーザーにとってはどう…

アロマティックなヘテロ環を漏れなくさがす

MORPHというアロマティックなヘテロ環を探索するツールの論文があります。結局、総当りで探していってバリデータで確認すればいいっぽいので、単環で探すようなものを書いてみました。戦略としては単純で、まず総当りで評価するSMILES Stringを生成します。…

ライブラリ中の特定の構造を削除する

サブストラクチャーサーチで集めたライブラリや、テンプレート構造を使って作ったバーチャルライブラリ群のプロパティを分析ししたいときに、テンプレート構造やサーチクエリに使った構造は要らない(むしろ邪魔)ことが多いと思います。そういう場合プロパ…

GASTONで頻度よく現れる部分構造を探る

MCSは最大共通部分構造なので、頻度よく現れる部分構造を探したいときにはちょっと適切ではないのでGASTONを使うと良いのですが、GASTONは一般的なグラフに対して検索するようになっているので、化合物のデータはGASTONのファイル形式に変換してから計算を実…

fingerprintの由来を知りたい

openbabelのFP4フィンガープリントは部分構造由来のビット列なので、どのパターンに由来するビットが立っているのか知りたいときがよくあります。(MACCSなんかも同様に)pybelを使えば簡単にサーチできるようです。 import pybel def readsmartsfile(filename…

構造をランダムに切断したい

現在の創薬シーンにおいてはフラグメントベースのドラッグデザイン(FBDD)やそれをcomputational的に行うのは主流に近いと思います。 ランダムに結合を切る方法としてhttp://www.ncbi.nlm.nih.gov/pubmed/16995724というのがあるのでopenbabelを使って簡単に…

脱塩したい(pybelで)

化合物の物性などを予測する時には、イオン化の状態を揃えて中性にしたり脱塩して、単一の化合物にするというルーチンワークが必須です。openbabelにはそのためのメソッドとしてStripSaltというものが用意されています。例として以下の化合物の脱塩をしてみ…

pybelで特性を計算する

pybelはcalcdescメソッドでlogP,MR,TPSAを計算することができます import pybel mol = pybel.readstring('smi','COC=C') mol.calcdesc() #{'LogP': 0.77629999999999999, # 'MR': 17.146000000000001, # 'TPSA': 9.2300000000000004} mol.OBMol.GetExactMass…

InChiKeyで出力したい

InChiKeyはInChiを固定長の文字列(25文字)で表現したもので、化合物表現ではなく単なるハッシュ値が欲しい時に便利です。特に、化合物の大きさによらず固定長の文字列となるので見た目にもよろしいです。openbabelモジュールを利用する場合には'K'オプション…

化合物の描画をしたい

pybelには簡単に構造描画をするためのメソッドが用意されています。ただし、このメソッドを使うためにはPILとOASAの2つのライブラリが必要なので別途インストールしておきましょう。 import pybel mymol = pybel.readstring('smi','CCOC(=O)C1=C(NC(=C(C1C2=…

化合物の立体構造を計算したい(pybelで)

pybelはopenbabelのpythonラッパーをもっとpythonらしく書けるようにしたラッパー関数群です。openbabel-2.2.0に付属しているpybelはmake3Dというメソッドが利用できるのでこれを使うとopenbabelラッパーより見通しのよいコードの記述ができます import pybe…

化合物の立体構造を計算したい

openbabel-2.2.0のpythonバインディングはOBBuilderを呼べないのでラッパーを使います。OBOp.FindType('Gen3D')がそれです。 import openbabel obConversion = openbabel.OBConversion() obConversion.SetInAndOutFormats("smi", "mdl") mol = openbabel.OBM…