2006年07月12日

SketchEl

一年程前、分子エディタを開発する機会があり、気楽に引き受けたのですが、自分で作りはじめると途中から“相当難しい”ことが分かりました。どうにか完成には至りましたが、これまでフリーで利用できる分子エディタに対し、レスポンスが遅いだの絵がきたないだの不満をたらたら言っていた自分に反省しています。

さて、今回は分子エディタ-SketchEl-を紹介したいと思います。jarファイルで提供されていますので、インストール作業は特に必要なく、ダウンロードして以下のコマンドで実行できます。

 $ java -jar SketchEl-1.06.jar

sketch.PNG

個人的には、SketchElは必要十分な機能をもっており、かつストレスなくレスポンスを返しますので、慣れるまで若干違和感のある部分もありますが、なかなか良いエディタだと思っています。


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

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) | その他ツール | このブログの読者になる | 更新情報をチェックする