Galaxy ツールを作る/コマンドを利用したGalaxyツール
提供:TogoWiki
ここでは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 Galaxyでのツール作成方法(1) - morita_hideyukiの日記 - Galaxy グループ
- お持ち帰り用DBCLS Galaxyでのツール作成方法(2) - morita_hideyukiの日記 - Galaxy グループ
を参考にした
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"
関連サイト
- galaxy / galaxy-central / wiki / NGSLocalSetup – Bitbucket
- galaxy / galaxy-central / wiki / ToolConfigSyntax – Bitbucket
- tool_hoge.xml を書く際に参考にする (<param> tag set のセクションとか)
関連情報: 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対応が必要。