CytoScapeRPCでXGMMLファイル出力

Pocket

CytoScapeRPC から直接は GML ファイルしか出力できなかった。
他の機能でできないか調査。
executeCommand() という機能があるが、使える機能なのかさっぱりわからない。
なので、CytoScape のソースを見ながら調べることにする
Javaは書けないし・・・

$list = $client->getNamespaceList();
for($i=0;$i<count($list);$i++)
{
    $string = $client->getCommandList($list[$i]);
    echo "########### %s ###########\n", $list[$i]);
    print_r($string);
}

上の php のコードを実行したら下記のように表示された

############### commandtool ##############
Array
(
    [0] => run
)
############### network view ##############
Array
(
    [0] => update
    [1] => make current
    [2] => fit
    [3] => export
    [4] => zoom
    [5] => list
    [6] => focus
    [7] => get current
    [8] => create
)
############### edge ##############
Array
(
    [0] => export attributes
    [1] => select
    [2] => get selected
    [3] => get attribute
    [4] => deselect
    [5] => list attributes
    [6] => import attributes
    [7] => set attribute
)
############### clustermaker ##############
Array
(
    [0] => connectedcomponents
    [1] => kmeans
    [2] => scps
    [3] => getnetworkcluster
    [4] => hierarchical
    [5] => showdialog
    [6] => transclust
    [7] => getcluster
    [8] => glay
    [9] => ap
    [10] => hascluster
    [11] => mcode
    [12] => autosome_network
    [13] => autosome_heatmap
    [14] => mcl
)
############### property ##############
Array
(
    [0] => clear
    [1] => get
    [2] => set
)
############### quit ##############
Array
(
    [0] =>
)
############### exit ##############
Array
(
    [0] =>
)
############### network ##############
Array
(
    [0] => make current
    [1] => destroy
    [2] => export
    [3] => add nodes
    [4] => add edges
    [5] => import
    [6] => list
    [7] => get current
    [8] => create
)
############### node ##############
Array
(
    [0] => export attributes
    [1] => select
    [2] => get selected
    [3] => get attribute
    [4] => deselect
    [5] => list attributes
    [6] => import attributes
    [7] => set attribute
)
############### session ##############
Array
(
    [0] => open
    [1] => new
    [2] => save
)
############### layout ##############
Array
(
    [0] => default
    [1] => get default
    [2] => grid
    [3] => get current
)
############### vizmap ##############
Array
(
    [0] => apply
    [1] => import
)
############### group ##############
Array
(
    [0] => getState
    [1] => remove
    [2] => getViewer
    [3] => getInnerEdges
    [4] => list
    [5] => add
    [6] => create
    [7] => getNodes
    [8] => getOuterEdges
    [9] => destroy
    [10] => getGroup
    [11] => setViewer
    [12] => setState
)
############### clusterviz ##############
Array
(
    [0] => newnetworkview
    [1] => knnview
    [2] => nestednetworkview
    [3] => treeview
    [4] => heatmapview
)

表示されるプラグインとないプラグインがある気がする。
commandTool はインストールしてるし小さそうなので、調べてみることにする。

をダウンロードしてきて、commandtool で grep してみると、
に commandtool という文字列発見。
CyCommandManager.reserveNamespace() でネームスペースの予約はしてるようだ。
run の他に sleep もあるような気がするが・・・。

続いて、CytoScape のソースを svn から引っ張ってくる

$ svn co http://chianti.ucsd.edu/svn/cytoscape/trunk cytoscape

下記コマンドでどのファイルがどのネームスペースに登録されているのかを調べる

$ grep -r reserveNamespace *

Cytoscape のソース中では、register() でネームスペースを予約するようだ。
さらにたどっていくと、coreplugins/CoreCommands/src/main/java/coreCommands/CoreCommands.java に記述発見。

  public CoreCommands() {
    logger = CyLogger.getLogger(CoreCommands.class);

    // Register our built-ins -- these should really be
    // provided directly by the core...
    try {
      EdgeNamespace.register("edge");
      QuitNamespace.register("exit");
      LayoutNamespace.register("layout");
      GroupNamespace.register("group");
      NetworkNamespace.register("network");
      NetworkViewNamespace.register("network view");
      NodeNamespace.register("node");
      PropertyNamespace.register("property");
      SessionNamespace.register("session");
      VizMapNamespace.register("vizmap");
      QuitNamespace.register("quit");
    } catch (Exception e) {
      logger.error(e.getMessage());
    }
  }

executeCommand() の args は各ソースの addArguments() を調べればわかりそうだなぁ
PHP で使う場合、連想配列で渡せばいいのかな

試しに、ネットワークをエクスポートできるか調べてみる。
NetworkNamespace.java のコードを読んでみると、コマンドと引数一覧が書いてある

public class NetworkNamespace extends AbstractGraphObjectHandler {
  static String NETWORK = "network";

  // Commands
  static String CREATE = "create";
  static String DESTROY = "destroy";
  static String EXPORT = "export";
  static String GETCURRENT = "get current";
  static String IMPORT = "import";
  static String LIST = "list";
  static String MAKECURRENT = "make current";

  // Arguments
  static String NAME = "name";
  static String CREATEVIEW = "createview";
  static String CURRENT = "current";
  static String PARENT = "parent";
  static String FILE = "file";
  static String TYPE = "type";

PHP で CytoScape を操って画像を出力するコードに下記のコードを追加
file をファイル名、type をファイルタイプと考えて早速実行!

        $client->executeCommand(
                                "network",
                                "export",
                                array(
                                        "file" => "/tmp/hoge.xgmml",
                                        "type" => "xgmml",
                                )
                        );

あらー、うまく XGMML 形式で出力できちゃったよ!!

2件のコメント

  1. Since I can only read a little japanese, so I have to ask in english. Do you know how to do this in python? If you do, please let me know. Thanks in advance.

  2. I figure it out! Thanks you very much.

    import xmlrpclib
    server = xmlrpclib.ServerProxy(“http://localhost:9000″)
    server.Cytoscape.executeCommand(‘network’,’export’,{‘file’:”tmp.xgmml”,’type’:”xgmml”})

コメントを残す