ツールの開発

From Pitagora-Galaxy Wiki
Jump to: navigation, search

Main Page >> Admin >>

ツール XML の書き方 〜 ラッパー君と実体君

通常はラッパー君と実体君がいる。

ラッパー君: ツールの実行の際のパラメータ選択画面を定義する XML ファイル。ここから実体くんを呼び出す。
  • 例 tab2csv.xml(ラッパー君のテンプレートとして使うとよい)
<tool id="tab2csv" name="Tabular to CSV" version="0.2">
  <description>converter</description>
  <command interpreter="bash">
    tab2csv.sh $input_file $output_file $dq
  </command>
  <inputs>
    <param name="input_file" type="data" format="tabular" label="File (tabular)"/>
    <param name="dq" type="boolean" truevalue="--double-quotation" falsevalue="" checked="False" label="Double quotation" />
  </inputs>
  <outputs>
    <data name="output_file" format="csv" label="${tool.name} on ${on_string}"/>
  </outputs>
  <help>
  to be written.
  </help>
</tool>
実体君: ツールの処理を記述するスクリプト(shell / python / ruby / Rscript など)ファイル。
  • 例 tab2csv.sh
if [ -e $3 ]
then
sed -e 's/\t/,/g' $1 > $2
else
sed -e 's/\t/","/g' $1 | sed -e 's/^\|$/"/g' > $2
fi

ツールの作り方 〜 ラッパー君の登録

  • tool_conf.xml を作成する
$ cd ~/galaxy-dist/config
$ cp tool_conf.xml.sample tool_conf.xml
  • tool_conf.xml を編集する
$ vi tool_conf.xml
...
  <section id="test" name="Test">
    <tool file="gatk_1_6_pitagora/GATKCombineVariants.xml" />
    <tool file="gatk_1_6_pitagora/GATKCountCovariate.xml" />
    <tool file="gatk_1_6_pitagora/GATKIndelRealigner.xml" />
    <tool file="gatk_1_6_pitagora/GATKRealignerTargetCreator.xml" />
    <tool file="gatk_1_6_pitagora/GATKSelectVariants.xml" />
    <tool file="gatk_1_6_pitagora/GATKTableRecalibration.xml" />
    <tool file="gatk_1_6_pitagora/GATKUnifiedGenotyper.xml" />
  </section>
</toolbox>
  • Galaxy を再起動する
$ sudo service galaxy restart
(password: galaxy)

ツールの作り方 〜 Tool Dependencies

  • requirements タグを加える

<tool id="peakcalling_macs14" name="MACS14" version="1.4.2">

 <description>Model-based Analysis of ChIP-Seq (1.4.2)</description>
 <version_command>macs14 --version</version_command>
 <command interpreter="python">macs14_wrapper.py $options_file $output_bed_file $output_extra_files $output_extra_files.files_path</command>
 <requirements>
   <requirement type="package" version="2.15.0">R</requirement>
   <requirement type="package" version="1.4.2">macs14</requirement>
 </requirements>
  • tool_dependencies.xml を作る

<tool_dependency>

 <package name="R" version="2.15.0">
       <repository changeset_revision="8ab0d08a3da1" name="package_r_2_15_0" owner="devteam" prior_installation_required="False" toolshed="http://toolshed.g2.bx.psu.edu" />
 </package>
 <package name="macs14" version="1.4.2">
       <repository changeset_revision="58e7660968d9" name="package_macs_1_4_2" owner="ryo-tas" prior_installation_required="False" toolshed="http://toolshed.g2.bx.psu.edu" />
 </package>

</tool_dependency>

ツール XML の書き方(外部サービスと連携するタイプ)

  • FileBrowserの例
    • inputs actions: 同じサーバーにサービスがある場合、URLは "../../filebrowser"(Galaxyを参照するURLの2つ上の階層)のようにして参照できる
<tool name="Local File" id="local_file_browser" tool_type="data_source">
    <description>browser</description>
    <command interpreter="perl">link_path_2.pl $source $dest</command>
    <inputs action="../../filebrowser/main.html" check_values="false" method="get">
        <display>go to Local File Browser $GALAXY_URL</display>
        <param name="GALAXY_URL" type="baseurl" value="/tool_runner" />
        <param name="tool_id" type="hidden" value="local_file_browser" />
    </inputs>
    <request_param_translation>
        <request_param galaxy_name="URL_method" remote_name="URL_method" missing="post" />
        <request_param galaxy_name="URL" remote_name="URL" missing="" />
        <request_param galaxy_name="dbkey" remote_name="db" missing="?" />
        <request_param galaxy_name="file_name" remote_name="name" missing="no_name" />
        <request_param galaxy_name="source" remote_name="path" missing="" label="Original File Path" />
    </request_param_translation>
    <uihints minwidth="800"/>
    <outputs>
        <data name="dest" format="data" label="${tool.name}: ${file_name}"/>
    </outputs>
    <options sanitize="False" refresh="True"/>
</tool>

ツール XML で Tool Dependencies を参照する

  • tool_dependencies.xml
<?xml version="1.0"?>
<tool_dependency>
  <package name="R" version="2.15.0">
        <repository changeset_revision="8ab0d08a3da1" name="package_r_2_15_0" owner="devteam" prior_installation_required="False" toolshed="http://toolshed.g2.bx.psu.edu" />
  </package>
  <package name="macs14" version="1.4.2">
        <repository changeset_revision="58e7660968d9" name="package_macs_1_4_2" owner="ryo-tas" prior_installation_required="False" toolshed="http://toolshed.g2.bx.psu.edu" />
  </package>
</tool_dependency>

Tool Shed リポジトリの作成(開発時)

  • Galaxy Test Tool Shed にログインして新規リポジトリ作成
    • Create new repository
      • Name はよく考えて決める(クローン後は変更不可)
      • Synopsis, Detailed description はとりあえず Name と同じでOK(後で変更可)
      • Repository type は通常は Unrestricted でOK(後で変更可)
      • Categories はとりあえず未選択でOK(後で変更可)
  • 開発環境でレポジトリをクローン
$ hg clone https://pitagora@testtoolshed.g2.bx.psu.edu/repos/pitagora/<REPOSITORY_NAME>
$ cd <REPOSITORY_NAME>
  • ホームディレクトリに .hgrc ファイルを作り、username を記載する
$ cd ~/
$ vi .hg/hgrc
[ui]
username = <YOUR_EMAIL@HOST.COM>
  • このディレクトリ内に全てのファイルを格納、更新
  • レポジトリの更新を反映
$ cd <REPOSITORY_NAME>
$ hg add *
$ hg commit -m "commit"
$ hg push
  • Tool Shed の UI から、そのレポジトリの画面で Repository Actions > Reset all repository metadata
    • コミットで新しいRevisionができるのに、古いRevisionがRepository metadataと関連付けられたままになることがあるため。原因不明

Tool Dependency Package の作成

  • ツールのときと同様に、レポジトリを作成します。名前は「package_macs_1_4_2」のような感じにするのが慣習です。
  • レポジトリの中に、「tool_dependencies.xml」というファイルを作成します。
    • download_by_url: アップロードした圧縮ファイルのURL
    • shell_command: 一行でコマンドを記述。$INSTALL_DIRにインストールするようにします。
    • set_environment: 環境変数
  • Tips
    • download_by_url でダウンロードされる先は galaxy-dist/database/tmp/tmp-toolshed-XXXXXXX/
    • .tar.gz も .tar.bz2 も展開される
  • tool_dependencies.xml の例(python でインストールするタイプ)
<?xml version="1.0"?>
<tool_dependency>
    <package name="macs14" version="1.4.2">
        <install version="1.0">
            <actions>
                <action type="download_by_url">http://download.pitagora-galaxy.org/package/source/MACS-1.4.2-1.tar.gz</action>
                <action type="shell_command">export PYTHONPATH=$INSTALL_DIR/lib/python && python setup.py install --prefix $INSTALL_DIR --install-lib $INSTALL_DIR/lib/python</action>
                <action type="set_environment">
                    <environment_variable name="PYTHONPATH" action="prepend_to">$INSTALL_DIR/lib/python</environment_variable>
                    <environment_variable name="PYTHONPATH" action="prepend_to">$INSTALL_DIR/lib/python/site-packages</environment_variable>
                    <environment_variable name="PATH" action="prepend_to">$INSTALL_DIR/bin</environment_variable>
                </action>
            </actions>
        </install>
        <readme></readme>
    </package>
</tool_dependency>
  • tool_dependencies.xml の例(バイナリ展開するだけのタイプ)
<tool_dependency>
    <package name="sailfish_linux" version="0.6.3">
        <install version="1.0">
            <actions>
                <action type="download_by_url">https://github.com/kingsfordgroup/sailfish/releases/download/v0.6.3/Sailfish-0.6.3-Linux_x86-64.tar.gz</action>
                <action type="shell_command">cp -r * $INSTALL_DIR/</action>
                <action type="set_environment">
                    <environment_variable name="PATH" action="prepend_to">$INSTALL_DIR/bin</environment_variable>
                    <environment_variable name="LD_LIBRARY_PATH" action="prepend_to">$INSTALL_DIR/lib</environment_variable>
                </action>
            </actions>
        </install>
        <readme></readme>
    </package>
</tool_dependency>