TIBCO SpotfireでSOMをすべく、R Integrationを作ってます。
とりあえず版はできたけど、精度が大丈夫なのかがよく分からない。DSの結果と比べて検証しなきゃ。
2010年1月26日火曜日
OpenBabelでOBMolインスタンスのコピー
OpenBabelでOBMolのインスタンスをコピーする時、デバッグに苦労する現象に遭遇しました。
OBMol mol1 = new OBMol();
OBMol mol2 = new OBMol();
(この間、mo1,2lの操作をする)
mol1 = mol2;
この代入でエラーは出ませんが、mol1のインスタンスは非常に不安定で、突然消えたりします。
これは、mol1のインスタンスのメモリー領域がmol2で上書きされることで、(おそらく)mol1のポインターが確保されないまま操作されていることによります。たちの悪いことに、この操作でのエラーは何も出ません。
mol1にmol2を上書きする場合は
mol1 = new OBMol(mol2)
として、mol1をちゃんと初期化してmol2をコピーしましょう。
これが原因で10日ほど悩みました。
OBMol mol1 = new OBMol();
OBMol mol2 = new OBMol();
(この間、mo1,2lの操作をする)
mol1 = mol2;
この代入でエラーは出ませんが、mol1のインスタンスは非常に不安定で、突然消えたりします。
これは、mol1のインスタンスのメモリー領域がmol2で上書きされることで、(おそらく)mol1のポインターが確保されないまま操作されていることによります。たちの悪いことに、この操作でのエラーは何も出ません。
mol1にmol2を上書きする場合は
mol1 = new OBMol(mol2)
として、mol1をちゃんと初期化してmol2をコピーしましょう。
これが原因で10日ほど悩みました。
2010年1月23日土曜日
構造編集用の.NET Framework Class library:Hyleos
構造編集に便利そうな.NET Framework Class libraryを見つけました。
http://www.hyleos.net/
このサイトが会社なのか有志なのか分かりません。少なくともOpen Sourceではなさそうです。でもFreeでの配布とのことでちょっと使ってみました。
ここで配布しているClass libraryを使うと、構造編集用のBoxが使えて、ダブルクリックでDrawingソフトが起動し、構造の修正ができます。
http://www.hyleos.net/
このサイトが会社なのか有志なのか分かりません。少なくともOpen Sourceではなさそうです。でもFreeでの配布とのことでちょっと使ってみました。
ここで配布しているClass libraryを使うと、構造編集用のBoxが使えて、ダブルクリックでDrawingソフトが起動し、構造の修正ができます。
ISISのStructure Boxのような感じで、とりあえずSymyx Drawとの連動は正常に動作しました。
構造編集ソフトとの連携が通常のようにMIMEタイプでやり取りしていればほとんどのDraw系ソフトと連携できるはずで、ISIS Drawとの連携も出来そう。
Boxからの構造の取り出し、Smiles変換機能など、必要な機能は一通り揃っています。OpenBabelへのSmilesでの連携も確認できました。
早速、月曜日に試してみようっと。ちゃんと動作すればTIBCO Spotfireへ組み込んでみよう。
2010年1月20日水曜日
Oracleでも正規表現が使える
Oracleの格納した文字列に対して10g以上では正規表現が使えるようです。
http://www.atmarkit.co.jp/fdb/rensai/sqlclinic01/sqlclinic01_1.html
化合物の部分構造情報を文字列としてCLOBに格納しておいても正規表現で検索できるので何かに使えそう。
select CompId from CompDB where REGEXP_LIKE(CompKey, 'c1ccccc1|C1CCCCC1')
でベンゼンとシクロヘキサンを含む構造が取得できるとか。
http://www.atmarkit.co.jp/fdb/rensai/sqlclinic01/sqlclinic01_1.html
化合物の部分構造情報を文字列としてCLOBに格納しておいても正規表現で検索できるので何かに使えそう。
select CompId from CompDB where REGEXP_LIKE(CompKey, 'c1ccccc1|C1CCCCC1')
でベンゼンとシクロヘキサンを含む構造が取得できるとか。
2010年1月19日火曜日
TIBCO Spotfire上でsdf2smi
っつーわけでCDKをTIBCO Spotfireに組み込んでsdf2smi、Daylightで言うところのmol2smiを作ってみました。
とりあえず動きました。とりあえずというのは遅い!もう速くするのが課題。
ついでに言うと、OpenBabelを使ったsmi2sdf、Daylightでいうところのsmi2molも組み込みました。こちらはそこそこ実用的な速度が出てます。
このあたり、JavaのLibraryを少し無理に.NET Frameworkに移した影響があるのかも。
ようはOpenBabelが早く2D変換をサポートしてくれれば済むのですが。
とりあえず動きました。とりあえずというのは遅い!もう速くするのが課題。
ついでに言うと、OpenBabelを使ったsmi2sdf、Daylightでいうところのsmi2molも組み込みました。こちらはそこそこ実用的な速度が出てます。
このあたり、JavaのLibraryを少し無理に.NET Frameworkに移した影響があるのかも。
ようはOpenBabelが早く2D変換をサポートしてくれれば済むのですが。
2010年1月17日日曜日
.NETでCDKを使う
CDKはjavaのmolecular class libraryのようなものです。java版のpipeline pilotであるKnimeではメインのChemistry engineとして採用されています。
CDKを.NET環境で使うためのやり方が紹介されていたのでやってみました。
Using the CDK with the .Net framework and Mono
まずjavaのjarファイルを.NETのクラスライブラリー化するためのツールIKVMをダウンロードします。私が落としたのは「ikvmbin-0.42.0.3」です。
ついでCDKのjarファイルを落とします。私が落としたのは「cdk-1.2.4.1.jar」です。
IKVMを使ってこのCDKをdll化します。
コマンドプロンプトでikvm.exeのあるフォルダーに移動して
ikvmc -assembly:cdk_dotnet -target:library cdk-1.2.4.1.jar
と打つとcdk_dotnet.dllが出来ます。この際にWarningが多く出ますが無視。
CDKを.NET環境で使うためのやり方が紹介されていたのでやってみました。
Using the CDK with the .Net framework and Mono
まずjavaのjarファイルを.NETのクラスライブラリー化するためのツールIKVMをダウンロードします。私が落としたのは「ikvmbin-0.42.0.3」です。
ついでCDKのjarファイルを落とします。私が落としたのは「cdk-1.2.4.1.jar」です。
IKVMを使ってこのCDKをdll化します。
コマンドプロンプトでikvm.exeのあるフォルダーに移動して
ikvmc -assembly:cdk_dotnet -target:library cdk-1.2.4.1.jar
と打つとcdk_dotnet.dllが出来ます。この際にWarningが多く出ますが無視。
VisualStudio2008のC#のコンソールアプリケーションを作成して、参照設定にcdk_dotnet.dllを含めikvmのbinフォルダーの中のdllをすべて登録します。
これでCDKが使えるようになりました。
具体的なコードは上記のサンプルコードを参照してください。Molファイルを読み込んで計算値を出力してくれました。
using System;
namespace CDK_test
{
//Using aliases for convenience and to avoid importing whole
//packages
using FReader = java.io.FileReader;
using TPSA = org.openscience.cdk.qsar.descriptors.molecular.TPSADescriptor;
using LogP = org.openscience.cdk.qsar.descriptors.molecular.XLogPDescriptor;
using DoubleResult = org.openscience.cdk.qsar.result.DoubleResult;
using Builder = org.openscience.cdk.DefaultChemObjectBuilder;
using IMol = org.openscience.cdk.interfaces.IMolecule;
using MolReader = org.openscience.cdk.io.iterator.IteratingMDLReader;
using Consts = org.openscience.cdk.CDKConstants;
class Program
{
static void Main(string[] args)
{
FReader fReader = new FReader("C:\Test.mol");
MolReader molReader = new MolReader(fReader, Builder.getInstance());
IMol mol;
DoubleResult dr;
LogP logP = new LogP();
TPSA tpsa = new TPSA();
double logPVal, tpsaVal;
string name;
while (molReader.hasNext())
{
mol = (IMol)molReader.next();
dr = (DoubleResult)logP.calculate(mol).getValue();
logPVal = dr.doubleValue();
dr = (DoubleResult)tpsa.calculate(mol).getValue();
tpsaVal = dr.doubleValue();
//the title of each mol in the file is the name of the mol
name = (String)mol.getProperty(Consts.TITLE);
Console.WriteLine("{0} {1} {2}", name, logPVal, tpsaVal);
}
Console.ReadLine();
}
}
}
今回は純粋な.NETのclass libraryしか参照していないので、そのままSpotfireのツールに出来そうです。
2010年1月15日金曜日
OpenBabelをTIBCO Spotfireへ実装する
OpenBabelをTIBCO Spotfireへ実装することにしました。
Spotfireはご存知の通り、大量データの可視化ツールですが、開発環境にC#を採用することで、適用できるツールの範囲が広がりました。
もちろんOpenBabelの.NETモジュールを使うことでTIBCO Spotfireなら比較的簡単に実装が可能です。
ひとつ問題があります。旧タイプのDLL(Win32 APIなどを呼び出すときの仕様)はVisualStudioでは使用可能ですが、TIBCO SpotfireのBuilderでは登録を拒否されます。このあたりは要改善事項です。
OpenBabel .NETはこのタイプのDLLを使っているので、そのままでは登録できません。
あれやこれやと悩んだのですが、ようやく解決策が見つかりました。DLLのファイルをいったん拡張子をtxtにします。TextファイルならSpotfireのBuilderも安心して登録することが出来るのでClientに送信が出来ます。起動するときにこれらのTextファイルの拡張子をdllに戻してやります。するとOpenBabelがちゃんとdllを認識して動作するというわけです。
なんかウィルスの動きをミミックしているみたいで、どうゆうわけかやな気分ですが、とりあえず動きそうなんで、この仕様でがんばろうっと。
Spotfireはご存知の通り、大量データの可視化ツールですが、開発環境にC#を採用することで、適用できるツールの範囲が広がりました。
もちろんOpenBabelの.NETモジュールを使うことでTIBCO Spotfireなら比較的簡単に実装が可能です。
ひとつ問題があります。旧タイプのDLL(Win32 APIなどを呼び出すときの仕様)はVisualStudioでは使用可能ですが、TIBCO SpotfireのBuilderでは登録を拒否されます。このあたりは要改善事項です。
OpenBabel .NETはこのタイプのDLLを使っているので、そのままでは登録できません。
あれやこれやと悩んだのですが、ようやく解決策が見つかりました。DLLのファイルをいったん拡張子をtxtにします。TextファイルならSpotfireのBuilderも安心して登録することが出来るのでClientに送信が出来ます。起動するときにこれらのTextファイルの拡張子をdllに戻してやります。するとOpenBabelがちゃんとdllを認識して動作するというわけです。
なんかウィルスの動きをミミックしているみたいで、どうゆうわけかやな気分ですが、とりあえず動きそうなんで、この仕様でがんばろうっと。
2010年1月12日火曜日
Smilesから2D構造を表示する
Smiles文字列を見ただけで2D構造が浮かぶ人ようなすごい人はいいのですが、全く浮かばない私はSmilesから2D構造を表示して見たいわけです。
通常はDaylight Toolkitのsmi2molを使ってSmilesをSDファイルに変換してからISISやSpotfireなどで見る訳ですが、WindowsとUnixを行ったり来たりするのはうざい。なんとかWindows環境だけで2D構造を起こせないかと探していたらありました。
Indigoの中のDingoというモジュールを使えばSmilesやSmartsに加えてMolファイルやRxnファイルを読み込んで、構造を画像(PDF、PNG、SVG、HDC、Bitマップ、Metaファイル)として出力できます。とりあえず見るという目的ならこれで充分。
しかも.NET Class LibraryもついているのでVisualStudioですぐに動かせます。TIBCO SpotfireのRendererにも転用可能です(というかもう作った)。
これで座標の入ったMolファイルとしても出せればいいのですが、調べたところでは出来なさそう・・・。
登録:
投稿 (Atom)