2006年07月11日

CDKで分子のfragmentation その2

前回は、削除するbondを手動で設定しました。今回は、削除の候補となるbondを“Ringに含まれない単結合”と定義して、これを列挙する方法をメモしたいと思います。

まず、SSSRFinderクラスを用いて、Smallest Set of Smallest Rings (SSSR)の検出を行います。

 SSSRFinder sssr = new SSSRFinder(mol);
 RingSet rs = sssr.findSSSR();

次にMoleculeクラスのgetBondAt(int number)メソッドを用いて、bondを列挙し、各bondはRingSetクラスのgetRings(Bond bond)によりSSSRに含まれていないかチェックを行います。bondがSSSRに含まれていなければ、このメソッドは空のVectorを返しますので、これを利用します。単結合の判定はBondクラスのgetOrder()メソッドを用いて行うことができます。

 for(int i=0;i<mol.getBondCount();i++){
  Bond b = mol.getBondAt(i);
  Vector v = rs.getRings(b);
  if(v.size()==0&&b.getOrder()==1.0){
  System.out.println("bond_"+i);
  }
 }

もっとスマートな方法があるかもしれませんが、私は上記のような方法で“Ringに含まれない単結合”の判定を行っています。


banner_02.gif
人気ブログランキング(クリックして応援してね)


posted by わばのり at 08:17| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

2006年07月10日

CDKで分子のfragmentation

CDKを用いたシンプルな分子のfragmentation法についてメモしたいと思います。分子のfragmentationといえばRECAP(Retrosynthetic Combinatorial Analysis Procedure)法が有名なアルゴリズムですね。

RECAP:J Chem Inf Comput Sci. 1998;38(3):511-522

さて、ここでは、単純に分子中の任意の1つのbondを削除し、生成された2つの分子を取得したいと思います。
任意のbondとして下図左のbond(7-8)を削除したいと思います。Moleculeクラス(AtomContainerクラス)のremoveBond(Atom atom1, Atom atom2)メソッドを用いて削除しますが、CDKでは、原子の番号は0からn-1になりますので、以下のように記述します。

 mol.removeBond(mol.getAtomAt(6),mol.getAtomAt(7));

次に、ConnectivityCheckerクラスのpartitionIntoMolecules(AtomContainer atomContainer)メソッドを用いて共有結合で結ばれている原子の集合を分子とし、分割を行います。

 SetOfMolecules result = ConnectivityChecker.
  partitionIntoMolecules(mol);

最後に、SetOfMoleculeクラスのgetMolecules()メソッドによりfragmentを取得します。

 Molecule mols[] = result.getMolecules();

あとは、以下のように単純にファイル出力することにより、fragmentをsdf形式等で取得できます。

 for(int i=0;i<mols.length;i++){
  Molecule frag = mols[i];
  try {
   mw.writeMolecule(frag);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

シンプルですが、便利な機能だと思います。

frag.png


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:14| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

2006年07月09日

CDKでsmi2sdf その2

CDKを使って化合物の2次元座標を生成するソースコード(smi2D.java)を下に示します。参考にしてください。
さて、今回はsmi2Dを使って、実際にSMILESから2次元座標を生成したいと思います。例として用いる化合物を下記に示します。

examples.smi:
 [N+](=O)([O-])c1cc(cc(c1O)Cl)[N+](=O)[O-] CompA
 Oc1c2c(nc(n1)N)[nH]nc2 CompB
 C[C]12[CH]([CH]3[CH]([C]4(C)C(=CC(=O)CC4) \
 CC3)[CH](C1)O)CC[C]2(C(=O)COC(=O)C)O CompC

実行:
 $ java smi2D examples.smi examples.sdf

生成された2次元座標は次のようになります。画像はbabelの小技mol2psを使って作成しました。

2dcoord.png

うまく生成できていると思います。
大量の化合物の2次元座標を生成すると、中には生成できない構造もあります。その場合、sdf中のx,y,z座標のところに?が入ります。このsdfをそのままbabelにかけるとうまく動作しないようですので、?を0などの適当な数値に変換することにより、とりあえずは動作するようになります。

smi2D.java



banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 11:00| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

2006年07月08日

CDKでsmi2sdf

CDKでは、化合物の2次元座標の生成ができます。最近、Web上で公開されている分子ファイルは3次元座標であることも多いのですが、いろいろな面で2次元座標も必要になることがあるので、CDKのこの機能は重宝しています。

まずは、連続してSMILESが格納されているファイルの読み込みには、IteratingSMILESReaderクラスを利用します。基本的な使い方を以下に示しますが、以前メモしたIteratingMDLReaderクラスと同じですね。

FileReader fr = null;
fr = new FileReader(new File(filename));
IteratingSMILESReader isr = new IteratingSMILESReader(fr);
while(isr.hasNext()){
 mol = (Molecule)isr.next();
}

2次元座標の生成には、StructureDiagramGeneratorクラスを利用します。setMolecule(Molecule mol)メソッドで分子をセットし、generateCoordinates()メソッドで2次元座標の生成を行い、最後に、getMolecule()メソッドで取得となります。

StructureDiagramGenerator sdg = new StructureDiagramGenerator();
sdg.setMolecule(mol);
sdg.generateCoordinates();
mol = sdg.getMolecule();


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:49| Comment(0) | TrackBack(0) | CDK | このブログの読者になる | 更新情報をチェックする

2006年07月07日

Virtual Computational Chemistry Laboratory

Virtual Computational Chemistry Laboratory (VCCLAB)は、様々なQSARに関連するソフトウェアをWebアプリケーションとして提供しています。

ソフトウェアのインストール作業は、RPMなどのパッケージ管理システムの普及で楽になりましたが、それでも自力でコンパイル/インストールする機会は多くあると思います。この作業に不慣れだと、ソフトウェアを使って計算結果がほしいだけなのに、コンパイルが通らず挫折となってしまいます(私もいまだに挫折を味わいますが)。
VCCLABの目的の1つは、このあたりの解決にもあるようです。

現在、以下のon-line softwareが提供されています。
・ALOGPS 2.1 is the most accurate program to predict lipophilicity and aqueous solubility of molecules
・ASNN calculates highly predictive non-linear neural network models
・BABEL is molecular structure information interchange hub
・PNN produces clearly interpretable analytical non-linear models
・PCLIENT generates more than 3000 descriptors
・E-DRAGON calculates DRAGON molecular indices
・PLS implements original two-step descriptors selection procedure
・UFS produces a reduced data set that contains no redundancy and a minimal amount of multicollinearity

QSAR関連のソフトウェアが一通り提供されていますね。
このように、各ソフトウェアが単独で提供されているのではなく、ある目的を達成するための手段として、系統的に提供されているのがVCCLABの大きな特徴だと思います(VCCLAB Servers: http://www.vcclab.org/servers/ )。
このような形態でのアカデミアのコラボレーションはすばらしいと思います。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 07:48| Comment(0) | TrackBack(0) | その他ツール | このブログの読者になる | 更新情報をチェックする

2006年07月06日

Morgan法でSMILESの規範化

先日、JOELibでMorgan法の利用法についてメモしました。今回は、Morgan法を利用してSMILESを規範化したいと思います。

まずは、JOESmilesParserクラスのsmiToMol(JOEMol mol, String smi, String title)メソッドを用いて、SMILESからmolへ分子構造情報を変換(入力)します。

 JOEMol mol=new JOEMol();
 String smiles_in = "c1ccc(O)cc1";
 if(!JOESmilesParser.smiToMol(mol,smiles_in,"test_data")){
  System.err.println("Could not loaded");
 }

あとは、前回と同様にMorganクラスを利用して再番号付けを行い、JOEMolクラスのtoString(IOType type)メソッドを用いてSMILESを出力します。ここで出力されるSMILESはMorgan法で再番号付けされた一義的なものですので、規範化されたSMILESといえます。

 Morgan morgan = new Morgan(new BasicTieResolver());
 if(morgan.calculate(mol)){
  JOEMol rmol = morgan.renumber(mol);
   if(!morgan.tieResolvingProblem()){
    String smiles_out = rmol.toString(IOTypeHolder.instance().getIOType("SMILES"));
    System.out.println(smiles_out);
  }
 }

例として、Frownの記事でも用いたフェノールの3つのSMILES表記を用いて規範化を行ってみます。

入力したSMILES:
 Oc1ccccc1
 c1ccccc1O
 c1ccc(O)cc1

出力されたSMILES:
 c1(O)ccccc1
 c1(O)ccccc1
 c1(O)ccccc1

全ての入力に対して、c1(O)ccccc1が出力されました。

今回はJOELibに実装されているMorgan法で規範化を行いましたが、規範化のアルゴリズムが異なれば出力されるSMILESも異なりますので、注意が必要です。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 07:50| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする

2006年07月05日

OpenBabelの小技

mol/sdf形式中のbond typeは、次の様に定義されています。
1=Single, 2=Double,
3=Triple, 4=Aromatic,
5=Single or Double,
6=Single or Aromatic,
7=Double or Aromatic,
8=Any
例えば、ナフタレンの場合、全ての結合は4としてもOKとなります。したがって、4と指定されたナフタレンのmol形式ファイル(naft.mol)を分子表示ソフトで見ると、下図左のような表記になります。しかしながら,下図右のような表記を希望する方も多いと思います。このような場合、4のbond typeを適切に2と1のbond typeへと変換する必要がありますが、当然、手作業でやりたくありません。
Openbabelでは、単純にmolからmolへ変換することにより、上記作業を実現することができます。

 $ babel -imol naft.mol -omol naft2.mol

ben.png

ネット上で公開されている化合物のsdf形式は、bond typeが4と指定されているものが多くありますので、この小技を使えばbond typeを1,2に戻せると思います(ただし、全てのケースにおいてうまく戻せるのかは分かりません)。それなりに使える機会があるのではないでしょうか。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:02| Comment(0) | TrackBack(0) | OpenBabel | このブログの読者になる | 更新情報をチェックする

2006年07月04日

JOELibでMorgan法

分子エディタで分子を書いてmol形式などで保存すると各原子に番号付けがされます。しかし、その番号付けは原子を書いた順番であったり、分子エディタに依存していたりと一義的に決定されるわけではありません。n原子の分子ではn!通りの番号付けが可能となるわけです。

一義的な原子の番号付けは、データベースに化学構造を登録する際、検索効率を大幅にUPさせますし、CanonicalなSMILES表現も可能とします。この一義的な原子の番号付けを可能とするアルゴリズムが1965年にMorganによって発表されました(J. Chem. Doc. 1965,5,107)。現在でも様々な場面でその改良版が利用されていると思います。

JOELibでは、Morganクラスを用いることで一義的な原子の番号付けができます。

まずBasicTieResolverクラスのインスタンスをMorganクラスのコンストラクタに渡します。calculate(JOEMol mol)メソッドでMorgan法のアルゴリズムが実行され、renumber(JOEMol mol)でMorgan法により再番号付けされた結果を得ることができます。最後にtieResolvingProblem()メソッドがfalseであれば、一義的に再番号付けがされていることを示しているようです(tieResolvingProblem()メソッドの判定基準はソースを見ていないので詳しくは分かりません)。

 Morgan morgan = new Morgan(new BasicTieResolver());
  if(morgan.calculate(mol)){
   JOEMol rmol = morgan.renumber(mol);
   if(!morgan.tieResolvingProblem()){
    System.out.println(rmol.toString());
   }
 }

例として、フェノールをMorgan法により再番号付けしてみます。

morgan.png
Morgan法はシンプルなアルゴリズムですので、自作するにもちょうどよい題材だと思います。興味のある方は、以下の書籍にアルゴリズムの詳細が載っていますので、ぜひチャレンジしてみてください。




banner_02.gif
人気ブログランキング(クリックして応援してね)




posted by わばのり at 07:42| Comment(0) | TrackBack(0) | JOELib | このブログの読者になる | 更新情報をチェックする

2006年07月03日

Ligand.info

ネット上で公開されている化合物データは、以前に少し取り上げたZINC以外にもLigand.infoというサイトから取得できます。Ligand.infoでは、ChemBank, ChemPDB, KEGG, NCI, AKos GmbH, Asinex Ltd, TimTecの化合物データを集めて、提供しています。また、類似化合物の検索もJava Appletで行うことができます。
日本でもJSTが提供している有機化合物辞書データベース「日本化学物質辞書」は有名ですね。

今後、取得可能な化合物データ数が数千万と増えてくると、管理するのも大変になるでしょうが、技術的にはおもしろい課題が多く含まれていると思いますので、楽しみにしています。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 08:31| Comment(0) | TrackBack(0) | その他ツール | このブログの読者になる | 更新情報をチェックする

2006年07月02日

PubChem

PubChemは低分子情報を提供しているデータベースであり、NCBIにより開発されたものです。
"PubChem Comound","PubChem Bioassay","PubChem Substance"の3つのカテゴリーから構成されています。

PubMedを利用されている方は、検索Wordを入力するBoxの左側にあるSearchのList Boxを見ると、上記3つが選択可能であることが分かると思います。

例えば、生薬成分の1つであるbaicaleinについて、その構造式、物性、生理活性などをPubmedを使ってabstractベースに調べるのは、時間のかかる作業だと思います。この作業を全て代替してくれるわけではありませんが、PubChemを利用すると、構造式,IUPAC,Mw,XLogP値などを簡単に調べることができます。さらに、baicaleinのassayの結果として、以下の4つのassay結果が登録されており、このうち3つでActiveであると記載されております。

 NCTR Estrogen Receptor Binding Database (NCTRER)
 Compound Screen Assay, Human AKR1C4
 Compound Screen Assay, Human CLK1
 NCI AIDS Antiviral Assay

あとは、化合物名を入力しなくとも、部分構造検索も可能ですので、興味のある化合物(骨格)及びその類似体の生理活性を調べる用途にも使えると思います。ユーザーインターフェースはPubMedユーザには、お馴染みのものですので、使いやすいと思います。

さすがに生物医学分野の利用者を対象としているだけあって、ユーザの要求分析がしっかりなされたデータベースだなと思います。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 15:21| Comment(0) | TrackBack(0) | その他ツール | このブログの読者になる | 更新情報をチェックする

2006年07月01日

AISMIG

AISMIG(an interactive server-side molecule image generator)は、クライアント側でプラグインやアプリケーションをインストールすることなしに、Webブラウザ上で分子画像ファイルを作成できるシステムです。
下のような画像をinteractiveに作成することができます。

molecule_ex.png

サーバサイドで画像の作成をPymolを使って行っているようです。
詳細は、論文がpublishされているので、興味のある方はチェックしてみてください。

 Nucleic Acids Res. 2005 Jul 1;33(Web Server issue):W705-9.

もう少しレスポンスが改善され、かつグラフィクスに特徴が出せるのであれば使いたいなとは思いますが、今のところ、AISMIGを使わなければいけない場面が私には見あたりません。しかし、サーバサイドで処理をしようとする試みは共感できますので、進展してほしいものです。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 14:11| Comment(0) | TrackBack(0) | 分子グラフィクス | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。