2006年09月29日

JOELibのJPanel3Dの使い方

JOELibに含まれているJPanel3Dクラスを使ったサンプルプログラムを以下に示します。今回は、コンストラクタ内で表示用の分子を作成し、JPanel3DクラスのaddMolecule(JOEMol mol)メソッドを使って分子を表示させていますが、通常は、ファイル読み込みボタンなどを経由して、分子を読み込み、表示させることが多いと思います。

JPanel3DTest.java:


こんな感じで表示されます。

JPanel3D.png

自作のアプリケーションを作る際に、JPanel3Dを使えば、簡単に分子Viewerを含めることができるので、とても便利だと思います。


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

2006年09月08日

JOELibでShortest Path Length Matrix

JOELibでは、DistanceMatrixクラスを使うことにより、原子ペア間の最短パス長を要素として持つMatrixを取得することができます。

 DistanceMatrix dm = new DistanceMatrix();
 int m[][]=null;
 try {
  DescResult result = dm.calculate(mol);
  m = ((IntMatrixResult)result).value;
 } catch (DescriptorException e) {
  e.printStackTrace(); 
 }

特に、トポロジカルなatom pair descriptorsを自作する際に便利な機能だと思います。


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

2006年09月07日

JOELibでAtomTypeの変換

JOELibでは、JOETypeTableクラスを使うことにより、AtomTypeの変換を行うことができます。例として、mol2形式のAtomTypeである'N.3'をmm2形式のAtomTypeへと変換してみます。

 JOETypeTable jtt = JOETypeTable.instance();
 jtt.setFromType("SYB");
 jtt.setToType("MM2");

 String atom_type = jtt.translate("N.3");
 System.out.println("N.3 -> "+atom_type);

実行結果:
 N.3 -> 8

mol2の'N.3'はmm2では'8'と変換されました。
変換自体は、joelib/data/plain/types.txtを参照して行われているようです。このtypes.txtはいろいろと参考になると思います。


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

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

2006年09月04日

Implicit HydrogenとExplicit Hydrogen

Implicit HydorgenとExplicit Hydorogenの違いをJOELibを使って確認したいと思います。

例として、エタンを用います。Ethane 1はmol形式中に水素原子を含んでおり、Ethane 2は含んでいません。

ethane2.png

 for(int i=1;i<=mol.numAtoms();i++){
  JOEAtom atom = mol.getAtom(i);
  if(!atom.isHydrogen()){
   System.out.println("Atom: "+i);
   int imp_H = atom.implicitHydrogenCount();
   int exp_H = atom.explicitHydrogenCount();
   System.out.println(" Implicit Hydrogen: "+imp_H);
   System.out.println(" Explicit Hydrogen: "+exp_H);
  }
 }

ethane 1の実行結果:
 Atom: 1
  Implicit Hydrogen: 3
  Explicit Hydrogen: 3
 Atom: 2
  Implicit Hydrogen: 3
  Explicit Hydrogen: 3

ethane 2の実行結果:
 Atom: 1
  Implicit Hydrogen: 3
  Explicit Hydrogen: 0
 Atom: 2
  Implicit Hydrogen: 3
  Explicit Hydrogen: 0

Implicit Hydrogenの算出は、水素原子を座標情報として明確に考慮する必要がない処理において、役に立つ機能ですね。


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

2006年08月10日

JOELibでHashcodeの生成

JOELibのAbstractDatabaseクラスを用いたHashcodeの生成についてメモしたいと思います。このクラスにはHashcodeを生成するために以下の3つのメソッドが用意されています。

 getHashcode(JOEMol mol)
 getSMILESHashcode(JOEMol mol)
 getMoleculeHASH(JOEMol mol)

ただし、最後のメソッドは上2つのメソッドの結果を同時に返すメソッドですので実質的には2種類のHashcodeを得ることができます。
それでは、getHashcodeとgetSMILESHashcodeの違いを具体的に見てみます。入力した分子構造は、L体、D体のアラニンの部分構造です。

 JOEMol mol1 = new JOEMol();
 JOEMol mol2 = new JOEMol();
 String smiles1 = "CC(=O)[C@H](C)N";
 String smiles2 = "CC(=O)[C@@H](C)N";
 JOESmilesParser.smiToMol(mol1, smiles1, "mol1");
 JOESmilesParser.smiToMol(mol2, smiles2, "mol2");
 
 int hashcode1 = AbstractDatabase.getHashcode(mol1);
 int hashcode2 = AbstractDatabase.getHashcode(mol2);

 int smileshash1 = AbstractDatabase.getSMILESHashcode(mol1);
 int smileshash2 = AbstractDatabase.getSMILESHashcode(mol2);

 System.out.println("getHashcode()");
 System.out.println(hashcode1);
 System.out.println(hashcode2);

 System.out.println("getSMILESHashcode()");
 System.out.println(smileshash1);
 System.out.println(smileshash2);

結果:
getHashcode()
-715427484
-715427484

getSMILESHashcode()
1803284766
1004112044

getHashcode()ではD体、L体の区別ができないないのに対し、getSMILESHashcode()では区別されています。大きな違いはここにあるのですが、どちらのメソッドも入力する分子の番号付けが変わると異なるHashcodeが生成されてします。したがって、Morgan法などで再番号付けされた分子構造を入力しなければ特定の分子に対してユニークなHashcodeを得ることができませんので注意が必要です。


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

2006年08月06日

Lazy Structure-Activity Relationships

Lazy Structure-Activity Relationships(lazar)という毒性予測ツールが公開されています。JOELibが利用されているとのことです。Web版も公開されているため試しに使ってみるにも便利だと思います。Rat,Mouse,Hamsterに対するCarcinogenicityなどの予測ができるようです。論文のpreprintもPDFで公開されていますので、内部的な処理も理解でき、勉強になると思います。


話は変わりますが、今日、“旅の指さし会話帳DS ドイツ”を買いました。少し遊んでみましたがなかなか面白いソフトです。ただ、私には実際に旅先でDSを相手に向けて質問することはできそうにありません(笑)。




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

2006年08月02日

JOELibでfingerprint

JOELibを使って分子のfingerprintを作成したいと思います。fingerprintは以前pythonのcheminformaticsライブラリであるfrownsの記事でも取り上げました。JOELibでは、SSKey3DSクラスを用いてfingerprintを生成できます。生成されるfingerprintは54bitです。各bitが何を示すのかはココをご覧ください。

まずは、SSKey3DSクラスのgetDescInfo()メソッドを用いて、Descriptorの情報を調べます。

 SSKey3DS ssk = new SSKey3DS();
 DescriptorInfo di = ssk.getDescInfo();
 System.out.println(di.getName());
 System.out.println(di.getResult());

出力:
 Pharmacophore_fingerprint_1
 joelib.desc.result.BitResult

SSKey3DSはBitResultを返すことが分かりました。

それでは、実際にfingerprintの取得を行ってみます。fingerprintの計算は、calculate(JOEMol mol)メソッドで行います。戻り値であるDescResultはBitResultにキャストします。そして、maxBitSizeでfingerprintの長さ及びgetBinaryValue()メソッドで生成されたfingerprintを取得します。

 SSKey3DS ssk = new SSKey3DS();
 sreader.readNext(mol);
 DescResult result = ssk.calculate(mol);
 int fp_size = ((BitResult)result).maxBitSize;
 JOEBitVec br = ((BitResult)result).getBinaryValue();
 for(int i=0;i<fp_size;i++){
  if(br.get(i)){
   System.out.print("1");
  }else{
   System.out.print("0");
  }
 }

最後に、例として葉酸のfingerprintを生成したいと思います。

folic.png
               ↓
Fingerprint:
111001110000101100100010000100101010001011111111111111

以前メモしたScreeningAssistantのdiversity計算には、このSSKey3DSクラスで作成したfingerprintが利用されているようです。


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



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

2006年07月26日

JOELibで分子のfragmentation

前回CDKで分子のfragmentationを行いました。JOELibでは、SMARTSFragmentationクラスを用いることで、SMARTSパターンを利用したfragmentationができます。

今回は、例として、ペプチド結合(アミド結合)を切断することにより分子のfragmentationを行ってみます。まずは、SMARTSパターンをVectorにaddします。ここでは、1つのパターンしかaddしていませんが、複数のSMARTSパターンをaddすることにより、様々なパターンで切断することができます。

 JOEMol mol = new JOEMol(inType,outType);
 String smartsPattern = "NC(=O)C";
 Vector smarts_vec = new Vector();
 smarts_vec.add(smartsPattern);

次に、SMARTSFragmentationクラスのインスタンスを作成し、SMARTSパターンの入ったVectorをsetします。

 SMARTSFragmentation sf = new SMARTSFragmentation();
 sf.setPattySMARTS(smarts_vec);

最後に、getFragmentation(JOEMol mol)メソッドにより分子のfragmentationを行います。結果はJOEMolVectorとして返ってきます。

 sreader.readNext(mol);
 JOEMolVector mol_vec = sf.getFragmentation(mol);
 for(int i=0;i<mol_vec.getSize();i++){
  swriter.writeNext(mol_vec.getMol(i));
 }

以下の図は、Ala-Glu-Tyrをfragmentationした例です。

frag_smarts.png


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

2006年07月25日

JOELibで分子画像の作成

JOELibで分子画像を出力したいと思います。分子画像の作成には、Mol2Imageクラスを利用します。instance()メソッドでインスタンスを作成した後、setDefaultHeight(int height)とsetDefaultWidth(int width)メソッドを用いて、高さと幅のピクセル数を指定します。

 Mol2Image image = Mol2Image.instance();
 image.setDefaultHeight(350);
 image.setDefaultWidth(350);

Mol2Imageクラスには、SMARTSパターンに一致する部分をハイライトして表示する機能がありますので、SMARTSパターンを定義します。
 
 String smartsPattern = "c1ccccc1";
 JOESmartsPattern smarts = new JOESmartsPattern();
 if(!smarts.init(smartsPattern)){
  System.err.println("Invalid SMARTS pattern.");
 }

次に、mol2image(JOEMol mol, JOESmartsPattern smarts)メソッドを用いて画像を作成します。画像はBufferedImageとして返ってきます。

 sreader.readNext(mol);
 BufferedImage bimage = null;
 bimage = image.mol2image(mol,smarts);

最後に、png形式でファイル出力することにします。

 ImageIO.write(bimage,"png",new File("test.png"));

test.png

SMARTSパターンによるハイライト機能は便利ですね。


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

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

2006年07月17日

ScreeningAssistant その3

今回は、実際にScreeningAssistantを使って、化合物のフィルタリングを行ってみます。ScreeningAssistantを起動し、メインメニューから[Database]->[New]を選択すると、"Open database"ダイアログが開きます。前回構築したligandinfoを選択し、Openボタンをclickすると、"DataBase Viewer"が開き、操作可能な状態になります。

まずはデータベース内の化合物の分布をいくつかの視点から確認してみます。"DataBase Viewer"のメニューから、[Charts]->[Pie Charts]->[Compounds Repertition]を選択すると、化合物の総数に対するサプライヤーの割合がわかります(この例では、サプライヤーではなくChemBankとChemPDBですが)。

sa6.png



次に、Chemical Spaceを視覚化したいと思います([Charts]->[Chemical Space])。

sa7.png

ScreeningAssistantのメインな機能といえるフィルタリングを行ってみます。"DataBase Viewer"の虫眼鏡みたいなアイコンをclickすると"Compounds Selection"ダイアログが表示されます。フィルタはQuery部分で定義するのですが、ここではMwは500以下(mw <= '500')、反応性の高い官能基はなし(is_reactive = '0')、logPは5以下(logP <= 5)を満たす化合物を取得するフィルタを定義します。OKボタンをclickすると実行され、"DataBase Viewer"上に反映されます。

sa8.png

ファイルへの出力は、"DataBase Viewer"のメニューから[Database]->[Export]を選択し、表示される"Export"ダイアログで行います。ここでは、ExportしたいFieldも選択できます。さらに、Diversityを考慮して出力する化合物数も調節できます。

sa9.png

ちなみに、反応性の高い官能基等の設定は、メインメニューの[Configure]->[Structural Filters]からSMARTSにより設定できます。

sa10.png

データベース管理の知識がなくても簡単に操作できますし、GUIもなかなか良いと思います。重複分子はImportの際、自動的に削除されているみたいです。それにしても便利なソフトウェアだと思います。


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


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

2006年07月16日

ScreeningAssistant その2

今回は、ScreeningAssistantのインストールからデータベースの構築までをメモしたいと思います。ScreeningAssistantは以下のURLのdownloadから取得できます。
 http://www.univ-orleans.fr/icoa/screeningassistant/index.html
ScreeningAssistantを利用するためには、以下の3つのソフトウェアが必要です。
 Java 5 JRE, Java3D, EasyPHP(MySQL)
ただし、他のserverで稼動しているMySQLを利用できる場合は、EasyPHPのインストールは必要ありません。また、EasyPHPではなく、単にMySQLをインストールしても問題ないと思います。

現在、ScreeningAssistantはWindows版のみが配布されております。ただしソースコードも入手できますので、他の環境でもがんばれば動作するかもしれません。インストール自体は、上記3つのソフトウェアをインストール後、入手した"SAb02.exe"を実行するだけです。

インストールが完了すると、デスクトップにScreeningAssistantへのショートカットが作成されますので、W-clickします。ScreeningAssistantが立ち上がり、"Structure Viewer"のみが表示されていると思います。まず、データベースの作成から行います(EasyPHPの起動をお忘れなく)。メニューから[Database]->[New]を選択すると"MySQL Account"ダイアログが現れます。EasyPHPのデフォルトではこのままOKをclickすれば認証されます。

sa2.png

続いて、"Open Database"ダイアログが表示されます。今回は、LigandInfoで公開されているsdfを利用し、データベースを構築したいと思います。"Create new"にligandinfoと入力し、Createボタンをclickします。そうするとSelect Databaseにligandinfoが表示されますので、選択してOpenボタンをクリックします。

sa3.png

Openボタンを押すと、"DataBase Viewer"が表示されますので、メニューから[Database]->[Append]を選択します。

sa4.png

そうすると"Append File"ダイアログが表示されますので、File/Dir.にLigandInfoから取得したChemBankのデータファイル名を入力します。ID FieldにはIDをCas Fieldはnoneを選択します。そしてProvider情報として今回は、ChemBankと入力し、最後にOKボタンをclickします。

sa5.png

これで、データベースへの登録作業がスタートします。登録が終了すると"DataBase Viewer"に化合物情報が表示され、データベースの構築ができたことになります。


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

2006年07月15日

ScreeningAssistant

ScreeningAssistant(Orleans大学で開発されている)は、化合物データベースからHigh Throughput ScreeningやVirtual Screeningで利用する化合物郡を、様々なフィルタを用いて選択可能とするソフトウェアです。さらに、Chemical Spaceの可視化、重複分子の除去、反応性の高い官能基の認識等の機能ももっています。フィルタで用いる様々なDescriptorの計算には、JOELibを用い、化合物を管理するデータベースにはMySQLを用いています。

sa1.png

利用するとよくわかりますが、グラフがとてもきれいです。これはJFreeChartsJGoodiesを利用して描画されているようです。
非常に有益なソフトウェアだと思いますので、興味のある方はぜひお試しください。


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

2006年07月14日

JOELibで塩・溶媒分子の除去

JOELibでは、CDKのConnectivityCheckerクラスに相当するクラスとして、ContiguousFragmentsクラスがあります。2つ以上の分子が1つのmolファイルに含まれる場合、以下のコードでそれらを分割できます。

 ContiguousFragments cf = new ContiguousFragments();
 JOEMolVector molv = cf.getFragmentation(mol);
 for(int i=0;i<molv.getSize();i++){
  JOEMol frag = new JOEMol(inType,outType);
  frag = molv.getMol(i);
  //処理
  ....
 }

先日のCDKの記事と同様に最も原子数の多い分子を選択すれば、ほとんどの場合、塩・溶媒分子などを除去できます。
幸いなことに、JOELibのJOEMolクラスにはstripSalts()メソッドが実装されており、このメソッドは上記の処理と同等な処理をしてくれますので便利です。


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

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月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年06月28日

JOELibでRDFコードの計算

RDFコードは3次元descriptorの1つで、RDF(動径分布関数)に基づいて考案されたものです。JOELibではRDFコードを計算するためにRadialDistributionFunctionクラスが用意されています。
基本的な使い方は次のようになります。

RadialDistributionFunction rd = new RadialDistributionFunction();
DescResult result = rd.calculate(mol);
double v[] = ((APropDoubleArrResult)result).value;

最終的には、double[]として結果を受け取るのですが、その際、
(APropDoubleArrResult)をどのようにして知るかというと、RadialDistributionFunctionクラスのgetDescInfo()メソッドとDescriptorInfoクラスのgetResult()メソッドを次のように使うとできます。

DescriptorInfo di = rd.getDescInfo();
System.out.println(di.getResult());
出力:joelib.desc.result.APropDoubleArrResult

RDFコードで使われている原子の物性はデフォルトではGasteiger_Marsiliになっています。
RDFコードは、分子の回転や並進に依存しない3次元descriptorですので、分子の重ね合わせをしなくとも分子間のRDFを比較することができ、便利です。
個人的にお気に入りのdescriptorですので、またメモしたいと思ってます。


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

2006年06月25日

JOELibの分子Viewer

JOELibでは、Viewerクラスを用いることで簡単に分子Viewerを利用することができます。Viewerクラスのインスタンスを生成する際、コンストラクタに分子ファイル名を渡すことにより、分子を表示させることができます。ちなみにUIManagerはアプリケーションの見た目を変えるクラスです。

 try
 {
  UIManager.setLookAndFeel
   (UIManager.getSystemLookAndFeelClassName());
 }
 catch (Exception e)
 {
  e.printStackTrace();
 }
 Viewer view = new Viewer(args[0]);

次のような概観となります。
viewer1.png

menuからViewを選ぶと、表示形式及び各種物性情報などを原子の色として視覚的に表現することができます。私の環境では、若干動作が不安定なところが見られますが、何かと使える場面があると思います。


viewer2.png


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

2006年06月22日

JOELibでDescriptorの計算

JOELibのDescriptorsは、"Native values","Atom properties","Fingerprints","Transformations"の4つのカテゴリーに分けられています。"Native values"は、Drug-likenessフィルタやQSARで利用可能な基本的なDescriptorsの集まりですので、今回は、この"Native values"の取得方法についてメモしたいと思います。

"Native values"に属するDescriptor名を知るには、DescriptorHelperクラスのインスタンスを生成し、getNativeDescs()メソッドを実行します。

 Vector nativeDes = DescriptorHelper.instance().getNativeDescs();
 String desName;
 for (int i = 0; i < nativeDes.size(); i++)
 {
  desName = (String)nativeDes.get(i);
  System.out.println(desName);
 }

ここで得られるdesNameがDescriptorの値を取得する際に必要となります。

実際に、Descriptorの値を取得するには、DescriptorFactoryクラスのgetDescriptor(String name)メソッドでDescriptorを取得し、calculate(JOEMol mol)メソッドによりDescriptorの値の計算を行います。

 Descriptor descHBA = DescriptorFactory.getDescriptor("Number_of_HBA_2");
 DescResult results = descHBA.calculate(mol);

Descriptorの値をint型にするには次のように記述します。

 int hba =((IntResult)results).getInt();

logPのようにdouble型のDescriptorの値をもつものは、次のように記述します。
 
 double logP =((DoubleResult)results).getDouble();

CDKと同様に、JOELibでもDescriptorの値を取得すれば、簡単にrule of fiveフィルタが作成でき便利です。
ちなみにJOELibでのlogPの計算は、以下の論文の手法が使われています。

 J. Chem. Inf. Comput. Sci., 1999, 39, 868-873.


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

2006年06月21日

JOELibでPOVRay

JOELibを用いて分子をPOVRay形式で出力してみます。POVRayは、レイトレーシング法により高品質な3次元画像を生成するフリーな3Dグラフィックスツールです。JOELibはPOVRayのシーン記述ファイルである「POVファイル」を出力することができるため、センスがあれば(私にはありませんが)、非常にかっこいい分子画像を作成することができます。

まずは、POVRayクラスのインスタンスを生成し、initWriter(OutputStream os)メッソドを実行します。

 joelib.io.types.POVRay ray = new joelib.io.types.POVRay();
 ray.initWriter(output);

次に分子の表示形式のセットを行います。
 
 ray.setOutputType(joelib.io.types.POVRay.SPHERE);

ここでは、SPHERE表示を選択しています。その他の表示形式は、POVRayクラスのField Summaryをご覧ください。
POVファイルの出力はwrite(JOEMol mol)メソッドで行います。
 
 ray.write(mol);

出力ファイルをPOVRayにより描画してみます。

SPHERE形式
SPHERE.png

Ball and Stick形式
BandS.png
 
POVRayで描画させると真っ先にやりたくなる操作は、縮小・拡大/回転だと思います。POVファイルの一番下にある以下のような部分にrotate<>及びscale<>を書き加えることにより実現できます。

object { Molecule1
   rotate<90,0,0>
   scale<0.8,0.8,0.8>
}


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



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

2006年06月19日

JOElibで水素原子の付加

JOElibでは、JOEMolクラスのaddHydrogens()メソッドにより、H原子を付加することができます。H原子を付加する際、基本的には、以下のコードにより、H原子の個数を決定しています(実際のJOELib中のコードです)。

 hcount = atom.getImplicitValence() - atom.getValence();

JOELibの便利な機能として、pHを考慮したH原子の付加ができます。具体的には、joelib/data/plain/phmodel.txtに従っています。例えば、carboxylic acidの場合、以下のように記述されています。

TRANSFORM O=CO[#1:1] >> O=CO
TRANSFORM O=C[OQ1-0:1] >> O=C[O-:1]

この記述によれば、COOHはCOO-に変換されるため、負に荷電しており、H原子は付加されません。したがって、phmodel.txtをカスタマイズすることにより、H原子の付加を自由にコントロールできます。記述方法は、Reaction SMARTSだと思います。

もう1つ便利な機能として、polar hydrogensのみの付加があります。例えば、水素結合のパターンを目視で認識する際に便利ですし、Amberにもこれに対応した力場パラメータが存在するので、分子モデリングでも利用することができます。

それでは、JOEMolクラスのaddHydrogens(boolean polaronly, boolean correctForPH)メソッドを用いて、上述した内容をアラニンを用いて確認したいと思います。第一引数が、polar hydrogensのみのH原子付加を行うか、第二引数は、phmodel.txtを用いたH原子付加のコントロールを行うかを示しております。

hbond.png
上図中のtrue,falseは第一引数、第二引数の順番になっております。ちなみに、addHydrogens()メソッドでは、false,trueとなっております。


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

広告


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

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

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


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。