ラベル Spotfire の投稿を表示しています。 すべての投稿を表示
ラベル Spotfire の投稿を表示しています。 すべての投稿を表示

2010年2月27日土曜日

PythonでOpenBabelを使う

TIBCO Spotfire3.1が欧米でリリースされ、日本国内でも近々リリースされると思います。

今回のリリースでの目玉はTextView上でのスクリプトの実行が可能になり、ガイドっぽいことができるようになるのとHeatMapのサポート、Bar&LineChartなどいろいろありますが(詳細)、地味ですがIronPythonのScriptのサポートがあります。

これを機にちょっとPythonを勉強しておこうと思って、環境を作ります。詳細はこちら

  1. Python2.6をインストール http://www.python.org/download/
    • 最新版は3.1なのですがOpenBabelで構造表示に使うPILとOASAが2.6までしか対応していないので。
  2. Pythonのパスを設定
  3. OpenBabel GUIをインストール
  4. OpenBabelのパスを通す
    1. PATHにI:\Program Files\OpenBabel-2.2.3を追加
  5. 環境変数「BABEL_DATADIR」をセット
    1. 例えば、set BABEL_DATADIR=I:\Program Files\OpenBabel-2.2.3な感じ
  6. OpenBabel Python bindingsをインストール
    1. PILとOASAをインストール、いずれもPython2.6用を入れます
    2. OpenBabelのWebにあるテストスクリプトを動かしてみる
    テストスクリプトのうち「mol.make3D()」を実行してみて、
    ==============================
    *** Open Babel Error  in OpenBabel::OBForceFieldMMFF94::ParseParamFile
      Cannot open parameter file
    こんなエラーが出る場合は、環境変数のBABEL_DATADIRが正しくセットされていない時です。コマンドプロンプトでecho %BABEL_DATADIR%とやってみてOpenBabelのGUIのインストールフォルダーが出ることを確認しましょう。

    2010年2月4日木曜日

    Spotfire DecisionSiteで.NET

    ずっとTIBCO Spotfire+C#で仕事していると、たまにSpotfire DecisionSiteのスクリプトをいじらなきゃいけなくなったときに超めんどくさくなります。

    なんといってもデバッグできない。昔はしこしこJavascriptでAlertとかログファイルに書き出したりしてなんとか構築したのに、もう戻れなくなっている。

    ということで、DecisionSiteでVisualStudio C#を使う方法を検討しました。もちろん直接Javascriptのデバッグもできるとは思いますが、それじゃ面白くないので、C#でクラスライブラリーを作ってそれを参照させることにしました。

    VisualStudio C#でクラスライブラリーを作ります。このとき「COM参照」ができるようにPropertiesを設定しておきます。

    ClassはPublicで作って普通にコンパイルするとdllとtblファイルが出来ます。この2つのファイルをDecisionSiteのガイドやツールに登録してやればJavascriptのnew ActiveX(<namespace.class名>)で使えるようになります。あとは登録したpublic methodを呼べば使えるというわけです。

    思っていたより結構気軽なので、よく使うレコードセット処理や文字列処理を入れて使う予定です。

    2010年2月2日火曜日

    TIBCO SpotfireとOracle Procedure

    TIBCO SpotfireではOracleのテーブル、ビューに加えてProcedureに対応しています。Procedureというより、REF CURSORで返されるデータセットを受け取れるといったほうが正確ですね。

    具体的には、Packageとして作成したFunctionでREF CURSORとして返すような動的なSQLを作ることで、柔軟なOracleクエリーの結果を受け取ることができます。

    これが意外と便利で、作り方によっては同じクエリーでもユーザごとに異なる結果をとったり、テーブルをまたいだ結果をとったり、ユーザ操作をハックして選択したデータに応じた結果を取得できます。

    もちろん通常の操作で、データの更新や追加、消去などをProcedureに入れることで、SpotfireからOracleのデータテーブルの操作もできます。

    一度トライしてみてください。

    2010年1月28日木曜日

    SOM

    TIBCO SpotfireでSOMをすべく、R Integrationを作ってます。

    とりあえず版はできたけど、精度が大丈夫なのかがよく分からない。DSの結果と比べて検証しなきゃ。

    2010年1月23日土曜日

    構造編集用の.NET Framework Class library:Hyleos

    構造編集に便利そうな.NET Framework Class libraryを見つけました。

    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月19日火曜日

    TIBCO Spotfire上でsdf2smi

    っつーわけでCDKをTIBCO Spotfireに組み込んでsdf2smi、Daylightで言うところのmol2smiを作ってみました。

    とりあえず動きました。とりあえずというのは遅い!もう速くするのが課題。

    ついでに言うと、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が多く出ますが無視。

    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を認識して動作するというわけです。

    なんかウィルスの動きをミミックしているみたいで、どうゆうわけかやな気分ですが、とりあえず動きそうなんで、この仕様でがんばろうっと。