Galaxy ツールを作る/コマンドを利用したGalaxyツール

提供:TogoWiki

2012年12月11日 (火) 04:25時点におけるKunitoo (トーク | 投稿記録)による版
(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内, 検索

ここではUNIXコマンドやスクリプトをGalaxyツールとして組み込む方法を説明する。

目次

自作スクリプトを利用したGalaxyツールの作成

Adding tools to Galaxy(英語)

https://bitbucket.org/galaxy/galaxy-central/wiki/AddToolTutorial

お持ち帰り用DBCLS Galaxyでのツール作成方法(1)

こんにちは、DBCLS Galaxy開発担当の森田です。

今回から2回にわたって、お持ち帰り用DBCLS Galaxy上で使えるツールの作成方法について説明します。

前回の記事ではDBCLS Galaxyのインストール方法について説明しました。

インストールを終え、標準搭載されたツールを使ったり、それらを組み合わせて

ワークフローを作るにしたがって、自分専用のツールを作成したくなるかもしれません。

今回は、そんな自分専用のGalaxyツールの作成方法について紹介します。

必要なツール

DBCLS Galaxy生成ツールの利用に先立ち、以下のものを用意してください。

  • DBCLS Galaxy
  • Ruby 1.8.6 以上 1.9 未満 (Ruby 1.9環境には対応していません。)
  • Rubygems 1.3 以上

準備

Galaxyにツールを追加する前に、いったん実行中のGalaxyを停止してください。

ツールのファイル構成

ここではツールを作成するにあたって、まずツール作成に必要なGalaxyのファイル構成について説明します。

Galaxyのルートディレクトリに移動して下さい。

$ cd /path/to/galaxy

まず最初に、各ツールが格納された、toolsディレクトリを確認しましょう。

$ ls tools
annotation_profiler  experimental   hyphy	    plotting	  sr_mapping  validation
data_destination     extract	    maf		    pubmed	  stats       visualization
data_source	     fasta_tools    medline	    regVariation  taxonomy
emboss_5	     fastx_toolkit  metag_tools     rubylib	  tmtools
encode		     filters	    new_operations  solid_tools   togows

toolsディレクトリにはさらに沢山のディレクトリが存在し、その中にツールの本体が格納されています。

例としてmedlineツールディレクトリの中を見てみましょう。

$ ls tools/medline
search_medline.rb  search_medline_direct.xml  search_medline_with_history.xml  spec

4つのファイルとディレクトリがありますが、このなかで実際のツールの処理を実行しているのは、

「search_medline.rb」です。これはRubyで書かれたスクリプトになっています。コマンドライン引数で

渡された情報をもとに処理を行い、指定された出力先へ書き込むプログラムになっています。

そして、そのスクリプトとGalaxyのツール画面から使えるようにするのが「search_medline_direct.xml」や

「search_medline_with_history.xml」などのツール設定ファイルです。このツール設定ファイルのなかで、

実際にどういった値をGalaxyから受け取り、それをどのようにして先ほどの「search_medline.rb」のような

コマンドラインプログラムに渡すか、ということを定義します。

そしてもう一つ重要なファイルとして、Galaxyのメイン画面左側にあるツールメニューの構成を設定するtool_conf.xmlがあります。

$ ls tool_conf.xml
tool_conf.xml

このファイルの中身を見てみましょう。途中に以下のような記述があるはずです。

 <section name='MEDLINE search' id='medline'>
   <tool file='medline/search_medline_direct.xml'/>
   <tool file='medline/search_medline_with_history.xml'/>
 </section>

このような形式でtool_conf.xmlにセクション名やツール設定ファイルの場所を指定することで、Galaxy画面左側のツールメニューにツールへのリンクが表示されるようになります。

以上でツールに必要なファイル構成の説明は終了です。最後のまとめとして、ツール一つを作成するのに必要なファイル群を列挙しておきます。

  • tools (ツール格納先)
  • tools/<section>/<commandline-tool-filename>.sh (ツールの処理を担当するコマンドラインプログラム。コマンドラインプログラムであればどんな言語で実装されているかは問われない。)
  • tools/<section>/<galaxy-tool-filename>.xml (各ツールの画面やコマンドラインプログラムの呼び出し方法を指定した設定ファイル。)
  • tool_conf.xml

ツールジェネレータを使ったツールの作成

前節ではツール作成に必要なファイルの構成について説明しました。このファイルを一つ一つ手作業で作る・修正することによってツールを作成することも可能ですが、今回はツールジェネレータを使って簡単にツールを作成してみたいと思います。

では、Galaxyのルートディレクトリで以下のコマンドを実行してみてください。

$ ./scripts/tool_generator/generate_tool.sh foo bar

「scripts/tool_generator/generate_tool.sh」に「foo」と「bar」という二つの引数を指定しています。このうち最初の「foo」は

ツールのカテゴリ名を示しています。そして2番面の「bar」がツール名をしめしています。

よって上記コマンドを実行することによって、fooカテゴリのbarというツールが生成されることになります。

では上記コマンドを実行して、ツール関連のファイル群がどう変更されたか確認してみましょう。

まず、toolsディレクトリ以下にfoo/bar.xmlとfoo/bar.shができているはずです。

$ ls tools/foo
bar.sh	bar.xml

そして、tool_conf.xmlの中身を見てみて下さい。中に以下のような記述が追加されているはずです。

 <section name='Foo' id='foo'>
   <tool file='foo/bar.xml'/>
 </section>

これでひとまず実行可能なGalaxyツールが作成されたはずです。

以下のコマンドを実行し、Galaxyを起動して確認してみましょう。

$ sh run.sh

ブラウザからGalaxyにアクセスし( http://localhost:37280/ )、画面左はしのtoolsペインに「Foo」- 「Bar」が追加されていれば、Galaxyツール追加は成功です。

まとめ

今回はツール作成に必要なファイルの構成と、ツールジェネレータをつかったそれらファイルの自動作成方法について解説しました。

次回は今回追加したツールの中身を確認したのち、その中身の改良を行っていきたいと思います。

お持ち帰り用DBCLS Galaxyでのツール作成方法(2)

前回でツールジェネレータでツール作成に必要なファイルを生成するところまでが完了しました。

今回はその生成されたツールを利用して、中身の改良を行っていきたいと思います。

必要なツール

ツールの改良に先立ち、以下のものを用意してください。

  • テキストエディタ

生成されたツールの中身の確認

ここでは前回生成したツールの中身を見ていきたいと思います。

まずは実際に生成されたツールを使って、現在どういった動作をするかを確認してみましょう。以下のようなデータを「Get Data」-「Upload File」で作ってください。

January
February
March
April
May
June
July
August
September
October
November
December

次に、そのデータを指定して、Foo/Barツールを実行してみましょう。以下のような結果が得られます。

Hello January!
Hello February!
Hello March!
Hello April!
Hello May!
Hello June!
Hello July!
Hello August!
Hello September!
Hello October!
Hello November!
Hello December!

みてもらったら分かるように、渡したデータの一行一行に「Hello」と「!」が付加されています。

ではいったん実行中のGalaxyを停止し、ツールの中身を見てみましょう。Galaxyのルートディレクトリに移動して下さい。

そして、処理の本体である「tools/foo/bar.sh」の中身を確認してみましょう。以下のようになっているはずです。

#!/bin/sh
awk '{ print "Hello " $0 "!" }' < $1 > $2

中身は単純なシェルスクリプトになっています。コマンドライン引数の1番目で指定されたファイルを標準入力としてリダイレクトして、awkに処理を引き渡しています。そのawkでは一行一行の先頭に"Hello "、後尾に"!"を付け足しているだけです。そしてその結果をコマンドライン引数の2番目に指定されたファイルパスに標準出力からリダイレクトしています。

「Hello」と「!」の付けたし処理がこの部分でおこなわれていたということが理解できます。

では、元となるデータファイルや出力先のファイルはコマンドライン引数の形で渡されていますが、この引き渡しはどのようにおこなわれているのでしょうか?その謎を紐解くのがもう一つのファイルである「tools/foo/bar.xml」です。

では、「tools/foo/bar.xml」の中身を確認してみましょう。以下のような記述がみつかるはずです。

 <command interpreter="sh">bar.sh '$source' '$output'</command>

この一文で、インタプリタ「sh」で「bar.sh」コマンドを呼び、コマンド引数として'$source'と'$output'を渡すという指定がなされています。インタプリタの指定である「interpreter="sh"」には任意のインタプリタを指定することが可能で、「Perl」や「Ruby」などの汎用スクリプト言語を利用することも可能です。

これでコマンドライン引数の渡し方は分かりましたが、「$source」や「$output」の出所がまだ不明です。それらに関しても「tools/foo/bar.xml」にちゃんと記述されています。

まず「$source」ですが、これは「tools/foo/bar.xml」の以下の部分に記述されています。

 <inputs>
   <param name="source" format="txt" type="data" label="Source Data" />
 </inputs>

<inputs>タグで囲まれた中身が入力方法の指定になり、この情報を元にGalaxyはツールの入力インタフェースを作成します。<inputs>の中に、name="source"としていされた<param>タグがあります。これが先ほどの「$source」が指し示している入力データです。ここではtype="data"と指定されているので、Galaxy上ではヒストリのなかからデータを選択するUIが表示されるようになります。コマンドラインに引き渡される際には「$source」にヒストリデータが入ったファイルのパスが格納されるようになります。

今回はヒストリの中からデータを選択するtype="data"しか指定していませんが、入力方法としてはこれ以外にも様々な方法が提供されています。それらの詳しい記述方法については、以下を参照してください。

http://g2.trac.bx.psu.edu/wiki/ToolConfigSyntax

また、「$output」に関しても、「$source」と同様に「tools/foo/bar.xml」の中で以下のように記述されています。

 <outputs>
   <data format="txt" name="output" />
 </outputs>

<outputs>タグで囲まれた中身が出力先の指定になります。name="output"となった<data>タグがありますが、これがコマンドライン引数に指定された「$output」に対応しています。この<outputs>タグや<data>タグ指定に関しても詳細は以下を参照してください。

http://g2.trac.bx.psu.edu/wiki/ToolConfigSyntax

これで、生成されたツールの動作確認は完了です。では次にこの中身を改良していきましょう。

生成されたツールの改良

ここからは、生成されたツールを改良して、設定ファイルやコマンドラインの書き方や作り方を体感していきましょう。

今回は例として1つのヒストリデータと、1つのテキストを入力し、テキストのパターンにあてはまる行を切り出すツールを作成してみます。

ツールを改良するにあたり、まず起動中のGalaxyを終了させて下さい。

では最初に設定ファイルを編集するため、テキストエディタで「tools/foo/bar.xml」を開いて下さい。現在ヒストリデータを入力できるようになっていますので、さらにテキストを入力できるように変更します。<inputs>タグの中身を以下のように変更して下さい。

 <inputs>
   <param name="source" format="txt" type="data" label="Source Data" />
   <param name="pattern" type="text" value="" label="Pattern" />
 </inputs>

コメントアウトされていた<param>タグを戻し、ちゃんと機能させただけです。このように入力を増やす場合には<inputs>の中に<params>を追加していきましょう。

では、この入力をコマンドに引き渡す為に、コマンド実行部分を以下のように変更しましょう。

 <command interpreter="sh">bar.sh '$pattern' '$source' '$output'</command>

'$source'の前に'$pattern'が追加されています。これにより、先ほど'$source'と'$output'は1番目・2番目のコマンドライン引数だったのが、2番目・3番目のコマンドライン引数になったことに注意してください。

これで設定ファイルの修正は完了です。

ではつづいて、実際の処理を行うコマンドプログラムである「tools/foo/bar.sh」を編集します。テキストエディタで「tools/foo/bar.sh」を開き、以下のように修正してください。

#!/bin/sh
grep $1 $2 > $3

「$1」、「$2」、「$3」は「$pattern」、「$source」、「$output」に対応しています。つまりコマンドプログラムの中では渡されたパターンテキストとソースヒストリデータをそのままgrepの引数に渡して、標準出力を出力先ファイルにリダイレクトさせているということになります。

これでツールの改良は終わりました。では以下のコマンドを実行し、実際に実行して確かめてみましょう。

$ sh run.sh

ブラウザからGalaxyにアクセスし( http://localhost:37280/ )、まずは先ほどと同様に、以下のようなデータを「Get Data」-「Upload File」で作ってください。

January
February
March
April
May
June
July
August
September
October
November
December

上記データがヒストリーに格納されたのを確認したら、次にFoo/Barツールを開いて下さい。

「Source Data」で先ほどのデータを、「Pattern」には「ry」という値を指定して実行してみましょう。

新しいデータがヒストリーに生成され、中身が以下のように「ry」を含むものだけ出力されれば成功です。

January
February

まとめ

今回は生成されたツールを改良して、オリジナルGalaxyツールを作成しました。

今回は簡単な設定しかしていませんが、ツールの説明記述やヘルプなど他にも様々な設定を行うことが出来ます。詳しくは他のツールの設定ファイルを読んだり、以下のドキュメントを参照してください。

http://bitbucket.org/galaxy/galaxy-central/wiki/ToolConfigSyntax

自分の好みのスクリプト言語処理系と組み合わせて、是非自分好みのツールを作り上げてみて下さい。

既存のツールを利用したGalaxyツールの作成

Galaxy NGS ツールの組み込み

http://wiki.galaxyproject.org/Admin/NGS%20Local%20Setup を読みつつインストール


1. BWA の組み込み

cd ~/Projects/bh10.10/galaxy/galaxy-central/tool-data
cp bwa_index.loc.sample bwa_index.loc
bwa_index.locに追記
hg18	/Users/mako/Projects/bh10.10/galaxy/hg18_data/hg18.fasta


bwa の実行ファイルをパスが通っているところに配置
sudo cp bwa /usr/local/bin
bwa_index.loc の記述に合うように hg18.fasta とそのインデックスファイルを任意のディレクトリに配置
cp ~/Projects/exome_tools_test/Data/hg18.* /Users/mako/Projects/bh10.10/galaxy/hg18_data/
hg18.fasta
hg18.fasta.ann
hg18.fasta.bwt
hg18.fasta.pac
hg18.fasta.rbwt
hg18.fasta.rpac
hg18.fasta.rsa
hg18.fasta.sa

Galaxy's built-in indexes will be available for download soon ということらしい


2. SAM Tools 組み込み

mate sam_fa_indices.loc
index	hg18	/Users/mako/Projects/bh10.10/galaxy/hg18_data/hg18.fasta
bwa の実行ファイルをパスが通っているところに配置
sudo cp ~/Downloads/exome_softwares/samtools/samtools /usr/local/bin/
hg18.fasta とそのインデックスファイルを galaxy ディレクトリに配置
cp ~/Projects/exome_tools_test/Data/hg18.fasta.fai /Users/mako/Projects/bh10.10/galaxy/hg18_data/


3. BEDTools 組み込み
http://groups.google.com/group/bedtools-discuss/browse_thread/thread/e3be681586693399 から始めた
http://cancan.cshl.edu/publicgalaxy/ ショウケースになってる

cp -r ../../../Download/galaxy_BEDTools/tool-data/BEDTools ~/Projects/bh10.10/galaxy/galaxy-central/tool-data/
cp -r ../../../Download/galaxy_BEDTools/tools/BEDTools ../tools/BEDTools
cp -r ../../../Download/galaxy_BEDTools/static/images/genomeCoverageBed_bedgraph.png ../static/images
Add the following section to <galaxy>/tool_conf.xml

    <section name="BEDTools" id="BEDTools">
        <tool file="BEDTools/genomeCoverageBed_bedgraph.xml" />
    </section>


4. Exome 関連ツールを自前で組み込み

を参考にした

DBCLS の tool wrapper generater を利用してみた

cd dbcls-galaxy
./scripts/tool_generator/generate_tool.sh exome annovar
galaxy-central へコピー
mv tools/exome ../galaxy-central/tools
tool_conf.xml に記述追加
  <section name='Exome' id='exome'>
    <tool file='exome/annovar.xml'/>
  </section>
Galaxy の出す pileup format が自分のコマンドライン操作時の pileup format と2番目のカラムだけ合わないことがわかったので修正する (cut で2番目のカラムを削る)
grep 46498888 Galaxy18-\[Filter_on_data_17\].interval.interval.pileup.interval s_8_sequence.aln.sorted.removedup.ontarget.bam.filtered.pileup  | less
Galaxy18-[Filter_on_data_17].interval.interval.pileup.interval:chr1     46498887        46498888        G       R       <= Galaxy で作った pileup file
s_8_sequence.aln.sorted.removedup.ontarget.bam.filtered.pileup:chr1     46498888                        G       R       <= ローカルの samtools で作った pileup file
Galaxy の cut で2番目カラムを捨てる
c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17

続いて Annovar ANNOVAR: Functional annotation of genetic variants from high-throughput sequencing data を組み込み
galaxy-central/tools/exome に以下の2つのファイル (annovar.xml と annovar.rb) を配置する
annovar.xml

<?xml version="1.0"?>
<tool id="annovar" name="Annovar">
  <description></description>
  
  <inputs>
    <param name="input" format="tabular" type="data" label="Source Data" />
  </inputs>

  <outputs>
    <data format="txt" name="output" />
  </outputs>

  <command interpreter="ruby">annovar.rb '$input' '$output'</command>

  <help>
  </help>
</tool>

annovar.rb

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

CONVERT2ANNOVAR    = "~/Downloads/exome_softwares/annovar/convert2annovar.pl"
ANNOTATE_VARIATION = "~/Downloads/exome_softwares/annovar/annotate_variation.pl"
AUTO_ANNOVAR       = "~/Downloads/exome_softwares/annovar/auto_annovar.pl"
SUMMARIZE_ANNOVAR  = "~/Downloads/exome_softwares/annovar/summarize_annovar.pl"
ANNOVAR_HUMANDB    = "~/Projects/exome_tools_test/Download/annovar_humandb"

# ANNOVAR website http://www.openbioinformatics.org/annovar/annovar_input.html
system "#{CONVERT2ANNOVAR} -format pileup #{ARGV[0]} > #{ARGV[1]} 2>/dev/null"

# See detail: http://www.openbioinformatics.org/annovar/annovar_accessary.html
system "#{AUTO_ANNOVAR} #{ARGV[1]} #{ANNOVAR_HUMANDB} 2>/dev/null"

関連サイト

関連情報: DBCLS Galaxy に同梱のツールジェネレータを利用して,DBCLS Galaxy に自分のツールを組み込む
( http://galaxy.g.hatena.ne.jp/morita_hideyuki/ )

外部サイトをツールとして利用する場合(例:UCSC Table Browser)
( http://bitbucket.org/galaxy/galaxy-central/wiki/ExternalDisplayApplications/Tutorial )
任意web application利用可能だが、web application側にgalaxy対応が必要。