User Tools

Site Tools


gcskewodysseyenglish

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gcskewodysseyenglish [2010/10/01 12:33]
ike
gcskewodysseyenglish [2014/01/18 07:44]
Line 1: Line 1:
-====== Introduction ====== 
  
-Sets of subroutines that users made are easily mounted into G-language GAE as standard functions. Same types of analytic tools hold up the development of bioinformatics. So combining sets of subroutines into G-language GAE as an original package is one idea for using it. In this tutorial, we will demonstrate how to combine previously made GC skew subroutines into G-language GAE as standard functions. 
-====== STEP 0 - Learn the rules for standard functions ====== 
- 
-There are several rules for standard functions since it is literally standard for Perl script. These rules are not for regulation purpose but for expanding the usability. ​ 
- 
-See following documents for detail. 
- 
-[[http://​www.g-language.org/​data/​gaou/​doc/​asimo/​odyssey.pdf|Standard Function Manual]]、 
- 
-[[http://​www.g-language.org/​documentation/​1.7.1/​SubOpt.html#​SYNOPSIS|SubOpt API Manual]]、 ​ 
- 
-[[http://​www.g-language.org/​documentation/​1.7.2/​G/​Messenger.html#​SYNOPSIS|Messenger API Manual]] ​ 
- 
- 
-The essence is as follow: 
- 
->1: Use [[http://​www.g-language.org/​documentation/​1.7.1/​SubOpt.html#​SYNOPSIS|SubOpt]] API to run options 
->2: All options should possess initial value to abbreviate options for single argument G instance 
->3: All options should contain “output” and “filename” 
->4: Use G::​Messenger API to run all the outputs 
->5: One function should consisted of one subroutine 
->6: Graphs should generated by G::​Tools::​Graph::​grapher 
->7: All coding should be simple, readable, resourceful,​ and beautiful 
- 
-In this tutorial we will skip demonstrating essence #5, 6, and 7. 
-====== STEP 1 – Use SubOpt API to run options ====== 
- 
- 
-[[http://​www.g-language.org/​documentation/​1.7.1/​SubOpt.html#​SYNOPSIS|SubOpt]] is specialized for acquiring options in subroutine which is similar to [[http://​perldoc.perl.org/​Getopt/​Std.html|GetOpt]] API in syntax where it begins in hyphen and ends in a double or single quotation such as –output=>​”show”. This API enhances the resourcefulness of G-language GAE and provoking unity for whole system. Use of [[http://​www.g-language.org/​documentation/​1.7.1/​SubOpt.html#​SYNOPSIS|SubOpt]] API is simple. Set a initial value in opt_default(),​ then fetch the options by opt_get(). In addition, options are referable by opt_val(). 
- 
-In the case of GC skew subroutine, window size is given as option so that scripting as &​gcskew($gb,​ -window=>"​1000"​);​ makes us happy. To achive this, change following script ​ 
- 
-<code perl> 
-  sub gcskew {  
-    my $gb = shift; ​ 
-    my $window = shift; 
-  }  
-</​code>​ 
- 
-to following. 
- 
-<code perl> 
-  sub gcskew {  
-    my @args = opt_get(@_); ​ 
-    my $gb = shift @args; ​ 
-    my $window = opt_val("​window"​); ​ 
-  } 
-</​code>​ 
- 
- 
-Fetching a option by opt_get() and substitute arguments into array @argv other than options. Then extract G instance from the array and also extract options doing opt_val(“window”). It would be nice to substitute a value of option to local variable. ​ 
- 
-There are some powerful methods ready for SubOpt API. In the case of GC skew subroutine, $gb->​{SEQ} is the only required method in G instance. So if users want to analyze partial information on genome or reference much larger sequences to save up some RAM space, it is easily described as follow. ​ 
- 
-<code perl> 
-  sub gcskew {  
-    my @args = opt_get(@_); ​ 
-    my $gb = opt_as_gb(shift @args); ​ 
-    my $window = opt_val("​window"​); ​ 
-  } 
-</​code>​ 
- 
-A function opt_as_gb() will translate $gb->​{SEQ} as target sequence whether it is scholar or reference. 
-====== STEP 2 – All options should possess initial value to abbreviate options ====== 
- 
- 
-In the above script, if no option “-window” is set then initial value become zero. To avoid this problem, set initial value by opt_default() as follow. 
- 
-<code perl> 
-  sub gcskew{ ​ 
-    opt_default("​window"​=>​10000); ​ 
-    my @args = opt_get(@_); ​ 
-    my $gb = opt_as_gb(shift @args); ​ 
-    my $window = opt_val("​window"​); ​ 
-  } 
-</​code>​ 
- 
-This will set initial value of window size to 10000bp. 
- 
-====== Step3 オプションは "​output"​ と "​filename"​ を含むのが望ましい ====== 
- 
-前回作った gcskew はファイルとグラフの二つの出力がありました。G-language GAE では容易に使えることに重点をおいていますので、標準関数関数には標準で全て output というオプションがついていて、"​f"​ の値で'​data'​フォルダ内にファイル出力、"​g"​の値で'​graph'​フォルダ内にグラフ出力、指定なし、もしくは"​show"​ の値でグラフを自動的に表示する、という機能を持つ必要があります。また、この時任意に出力するファイルの名前を指定できる必要があります。これにあわせて少しプログラム全体を変えてみましょう。outputの値次第で出力先を変える処理を加えてみます。 
-具体的には、opt_defaultの追加、opt_valをローカル変数に代入、そしてファイル名を$filenameに置き換え、出力先による設定を変えます。 
- 
-<code perl> 
-  sub gcskew{ ​ 
-     ​opt_default("​window"​=>​10000,​ "​output"​=>"​show",​ "​filename"​=>"​gcskew.png"​); ​ 
-     my @args = opt_get(@_); ​ 
-     my $gb = opt_as_gb(shift @args); ​ 
-     my $window = opt_val("​window"​); ​ 
-     my $output = opt_val("​output"​); ​ 
-     my $filename = opt_val("​filename"​);  ​ 
-     my @gcskew = ();  
-     my @location = ();  ​ 
-      
-     my $i = 0;    
-     for ($i = 0; $i * $window < length($gb->​{SEQ});​ $i ++){      ​ 
-           my $sequence = substr($gb->​{SEQ},​ $i * $window, $window); ​   
-           my $c = $sequence =~ tr/​c/​c/;  ​ 
-           my $g = $sequence =~ tr/​g/​g/; ​   
-           my $skew = ($c-$g)/​($c+$g); ​   ​ 
-           push (@location, $i * $window);  ​ 
-           push (@gcskew, $skew); ​     ​ 
-     ​} ​ 
-      
-     if ($output eq '​f'​){ ​ 
-           mkdir ('​data',​ 0777); ​ 
-           ​$filename =~ s/​¥.png$/​¥.csv$/; ​ 
-           my $j = 0;  
-           ​open(OUT,​ '>​data/'​ . $filename); ​ 
-           print OUT "​location,​GC skew¥n"; ​ 
-           for ($j = 0; $j <= $i; $j++){ ​ 
-                print OUT $location[$j],​ ",",​ $gcskew[$j],​ "​¥n"; ​ 
-           ​} ​ 
-           ​close(OUT); ​ 
-     ​}elsif ($output eq '​g'​ || $output eq '​show'​){ ​ 
-           mkdir ('​graph',​ 0777); ​ 
-           ​G::​Tools::​Graph::​grapher(¥@location,​ ¥@gcskew, -x=>'​bp', ​ 
-                                           ​-y=>'​GC skew', -title=>'​GC skew', ​       ​ 
-                                           ​-filename=>'​graph/​gcskew.png'​); ​ 
-      
-           ​system("​gimv graph/​gcskew.png"​); ​ 
-     ​} ​ 
-          
-     ​return @gcskew; ​ 
-  }  
-</​code>​ 
- 
-====== Step 4. 全ての出力はG::​Messenger APIを使う ====== 
- 
- 
-だいぶここまででも標準関数らしくなってきましたが、もう一つ重要な決まりがあります。それは、全ての出力をG::​Messenger APIを介してやらなければならない、ということです。G-language GAEは多彩なインタフェースを持ちます。プログラム言語としてコンパイラに読ませたり、コマンドラインで実行したり、グラフィカルユーザインタフェースを持ったり、さらにはウェブアプリケーションとしてさえ存在します。しかし、多彩なインタフェースでは全て同じ標準関数のプログラムが動いています。これを可能にするのがG::​Messenger APIです。メソッドがMessengerに出力を渡すと、MessengerはG-language GAEが現在どのインタフェースを使って動いているかを判断し、的確な場所に出力を渡します。 
-Messenger で主に使われる関数は次の通りです。 
- 
-msg_send() --- print STDOUT と同義 通常のアウトプットに。 
-msg_error() --- print STDERR と同義 エラーやシステムメッセージのアウトプットに。 
-msg_gimv() --- system("​gimv "); と同義 グラフの表示に。 
-これでgcskew の標準関数化が完了です。 
- 
-<code perl> 
-  sub gcskew{ ​ 
-     ​opt_default("​window"​=>​10000,​ "​output"​=>"​show",​ "​filename"​=>"​gcskew.png"​); ​ 
-     my @args = opt_get(@_); ​ 
-     my $gb = opt_as_gb(shift @args); ​ 
-     my $window = opt_val("​window"​); ​ 
-     my $output = opt_val("​output"​); ​ 
-     my $filename = opt_val("​filename"​); ​ 
-      
-     my @gcskew = ();  
-     my @location = ();  ​ 
-      ​ 
-     my $i = 0;    
-     for ($i = 0; $i * $window < length($gb->​{SEQ});​ $i ++){      ​ 
-           my $sequence = substr($gb->​{SEQ},​ $i * $window, $window); ​   
-           my $c = $sequence =~ tr/​c/​c/;  ​ 
-           my $g = $sequence =~ tr/​g/​g/; ​   
-           my $skew = ($c-$g)/​($c+$g); ​   ​ 
-           push (@location, $i * $window);  ​ 
-           push (@gcskew, $skew); ​     ​ 
-     ​} ​ 
-      
-     if ($output eq '​f'​){ ​ 
-           mkdir ('​data',​ 0777); ​ 
-           ​$filename =~ s/​¥.png$/​¥.csv$/; ​ 
-           my $j = 0;  
-           ​open(OUT,​ '>​data/'​ . $filename); ​ 
-           print OUT "​location,​GC skew¥n"; ​ 
-           for ($j = 0; $j <= $i; $j++){ ​ 
-                print OUT $location[$j],​ ",",​ $gcskew[$j],​ "​¥n"; ​ 
-           ​} ​ 
-           ​close(OUT); ​ 
-     ​}elsif ($output eq '​g'​ || $output eq '​show'​){ ​ 
-           mkdir ('​graph',​ 0777); ​ 
-           ​G::​Tools::​Graph::​grapher(¥@location,​ ¥@gcskew, -x=>'​bp', ​ 
-                                              -y=>'​GC skew', -title=>'​GC skew', ​       ​ 
-                                             ​-filename=>'​gcskew.png'​); ​ 
-        ​ 
-           ​msg_gimv("​graph/​gcskew.png"​); ​ 
-     ​} ​ 
-          
-     ​return @gcskew; ​ 
-  }  
-</​code>​ 
- 
- 
-====== Step 5. To the next level ... ====== 
- 
- 
-今回GC skew関数の標準関数化を説明しましたが、実際にG-language GAEに実装されているgcskew() 関数は AT skewもみれるようになっていたりと、汎用性やコードの簡潔さでより徹底した改良がされています。一度ソースコードをみて勉強してみてください。また、マニュアルにはより詳しい標準関数化の仕様について記載されていますので、こちらもじっくりと読んでみてください。 
-今後自分で作った解析メソッドを標準関数化し、G-language GAEに実装する機会が来ると思います。作った標準関数メソッドは、glang-devel@lists.sourceforge.jp に、サブジェクトが関数名、本文がソースコード、という形でメールすることで投稿できます。バイオインフォマティックスの未来の為にあなたが貢献する日は明日かもしれませんね。 
gcskewodysseyenglish.txt · Last modified: 2014/01/18 07:44 (external edit)