CytoScapeRPCでXGMMLファイル出力

Pocket

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

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

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

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

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

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

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

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

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

<br />
$ grep -r reserveNamespace *<br />

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

<br />
  public CoreCommands() {<br />
    logger = CyLogger.getLogger(CoreCommands.class);</p>
<p>    // Register our built-ins -- these should really be<br />
    // provided directly by the core...<br />
    try {<br />
      EdgeNamespace.register(&quot;edge&quot;);<br />
      QuitNamespace.register(&quot;exit&quot;);<br />
      LayoutNamespace.register(&quot;layout&quot;);<br />
      GroupNamespace.register(&quot;group&quot;);<br />
      NetworkNamespace.register(&quot;network&quot;);<br />
      NetworkViewNamespace.register(&quot;network view&quot;);<br />
      NodeNamespace.register(&quot;node&quot;);<br />
      PropertyNamespace.register(&quot;property&quot;);<br />
      SessionNamespace.register(&quot;session&quot;);<br />
      VizMapNamespace.register(&quot;vizmap&quot;);<br />
      QuitNamespace.register(&quot;quit&quot;);<br />
    } catch (Exception e) {<br />
      logger.error(e.getMessage());<br />
    }<br />
  }<br />

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

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

<br />
public class NetworkNamespace extends AbstractGraphObjectHandler {<br />
  static String NETWORK = &quot;network&quot;;</p>
<p>  // Commands<br />
  static String CREATE = &quot;create&quot;;<br />
  static String DESTROY = &quot;destroy&quot;;<br />
  static String EXPORT = &quot;export&quot;;<br />
  static String GETCURRENT = &quot;get current&quot;;<br />
  static String IMPORT = &quot;import&quot;;<br />
  static String LIST = &quot;list&quot;;<br />
  static String MAKECURRENT = &quot;make current&quot;;</p>
<p>  // Arguments<br />
  static String NAME = &quot;name&quot;;<br />
  static String CREATEVIEW = &quot;createview&quot;;<br />
  static String CURRENT = &quot;current&quot;;<br />
  static String PARENT = &quot;parent&quot;;<br />
  static String FILE = &quot;file&quot;;<br />
  static String TYPE = &quot;type&quot;;<br />

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

<br />
        $client-&gt;executeCommand(<br />
                                &quot;network&quot;,<br />
                                &quot;export&quot;,<br />
                                array(<br />
                                        &quot;file&quot; =&gt; &quot;/tmp/hoge.xgmml&quot;,<br />
                                        &quot;type&quot; =&gt; &quot;xgmml&quot;,<br />
                                )<br />
                        );<br />

あらー、うまく 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”})

コメントを残す