User Tools

Site Tools


gcskewodysseyjapanese

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gcskewodysseyjapanese [2007/10/22 23:30]
gaou
gcskewodysseyjapanese [2008/04/14 07:29]
gaou
Line 23: Line 23:
 >​4、全ての出力はG::​Messenger APIを使う >​4、全ての出力はG::​Messenger APIを使う
 >​5、一つの関数は一つのサブルーチンから構成されるのが望ましい >​5、一つの関数は一つのサブルーチンから構成されるのが望ましい
->​6、グラフ作成には G::​Tools::​Graph::​_[[UniMultiGrapher|UniMultiGrapher]] ​を使用するのが望ましい+>​6、グラフ作成には G::​Tools::​Graph::​grapher ​を使用するのが望ましい
 >​7、出来る限り簡潔に、みやすく、汎用的に、美しいコーディングをするのが望ましい >​7、出来る限り簡潔に、みやすく、汎用的に、美しいコーディングをするのが望ましい
  
Line 37: Line 37:
 つまり、gcskew の関数ではウインドウがオプションですから、 &​gcskew($gb,​ -window=>"​1000"​);​ というように使えたらいいわけですが、これは つまり、gcskew の関数ではウインドウがオプションですから、 &​gcskew($gb,​ -window=>"​1000"​);​ というように使えたらいいわけですが、これは
  
 +<code perl>
   sub gcskew{ ​   sub gcskew{ ​
    my $gb = shift; ​    my $gb = shift; ​
    my $window = shift; ​    my $window = shift; ​
 +</​code>​
  
 +<code perl>
   sub gcskew{ ​   sub gcskew{ ​
     my @args = opt_get(@_); ​     my @args = opt_get(@_); ​
     my $gb = shift @args; ​     my $gb = shift @args; ​
     my $window = opt_val("​window"​); ​     my $window = opt_val("​window"​); ​
 +</​code>​
  
 のように変えてやることで可能になります。 のように変えてやることで可能になります。
Line 54: Line 56:
 また、SubOpt APIにはGインスタンスに対して強力なメソッドが用意してあります。例えばこのGC skewの関数の場合、Gインスタンスで使用する部分は配列情報、つまり$gb->​{SEQ} のみです。すると、ゲノム全体ではなく一部の配列のGC skewを計算したければその部分の配列をそのままいれたり、もしくは大きな配列の場合はそのリファレンスを代入することでメモリ効率を良く保ちたい場合があると思います。こんな時には また、SubOpt APIにはGインスタンスに対して強力なメソッドが用意してあります。例えばこのGC skewの関数の場合、Gインスタンスで使用する部分は配列情報、つまり$gb->​{SEQ} のみです。すると、ゲノム全体ではなく一部の配列のGC skewを計算したければその部分の配列をそのままいれたり、もしくは大きな配列の場合はそのリファレンスを代入することでメモリ効率を良く保ちたい場合があると思います。こんな時には
  
 +<code perl>
   sub gcskew{ ​   sub gcskew{ ​
     my @args = opt_get(@_); ​     my @args = opt_get(@_); ​
     my $gb = opt_as_gb(shift @args); ​     my $gb = opt_as_gb(shift @args); ​
     my $window = opt_val("​window"​); ​     my $window = opt_val("​window"​); ​
 +</​code>​
  
 のように、opt_as_gb() 関数を使ってやると、それがGインスタンスでも、スカラー塩基配列でも、もしくはリファレンスでも自動的に$gb->​{SEQ} を使えばその配列情報にアクセスできるように変換してくれます。 のように、opt_as_gb() 関数を使ってやると、それがGインスタンスでも、スカラー塩基配列でも、もしくはリファレンスでも自動的に$gb->​{SEQ} を使えばその配列情報にアクセスできるように変換してくれます。
Line 67: Line 70:
 さて、上のままでは -window オプションが入力されないと、Window が 0になってしまいエラーになってしまいます。だからといって、毎回window オプションを入力しないといけないのでは汎用的だとはいえません。そこで、opt_default() を使って初期値を入力してやります。 さて、上のままでは -window オプションが入力されないと、Window が 0になってしまいエラーになってしまいます。だからといって、毎回window オプションを入力しないといけないのでは汎用的だとはいえません。そこで、opt_default() を使って初期値を入力してやります。
  
 +<code perl>
   sub gcskew{ ​   sub gcskew{ ​
     opt_default("​window"​=>​10000); ​     opt_default("​window"​=>​10000); ​
Line 72: Line 76:
     my $gb = opt_as_gb(shift @args); ​     my $gb = opt_as_gb(shift @args); ​
     my $window = opt_val("​window"​); ​     my $window = opt_val("​window"​); ​
 +</​code>​
 +
 こうしてやることで、windowオプションが入力されればその値が、入力されなければ 10000bp がウインドウサイズとして使用されます。 こうしてやることで、windowオプションが入力されればその値が、入力されなければ 10000bp がウインドウサイズとして使用されます。
  
Line 79: Line 85:
 具体的には、opt_defaultの追加、opt_valをローカル変数に代入、そしてファイル名を$filenameに置き換え、出力先による設定を変えます。 具体的には、opt_defaultの追加、opt_valをローカル変数に代入、そしてファイル名を$filenameに置き換え、出力先による設定を変えます。
  
 +<code perl>
   sub gcskew{ ​   sub gcskew{ ​
      ​opt_default("​window"​=>​10000,​ "​output"​=>"​show",​ "​filename"​=>"​gcskew.png"​); ​      ​opt_default("​window"​=>​10000,​ "​output"​=>"​show",​ "​filename"​=>"​gcskew.png"​); ​
Line 111: Line 118:
      ​}elsif ($output eq '​g'​ || $output eq '​show'​){ ​      ​}elsif ($output eq '​g'​ || $output eq '​show'​){ ​
            mkdir ('​graph',​ 0777); ​            mkdir ('​graph',​ 0777); ​
-           ​G::​Tools::​Graph::​_UniMultiGrapher(¥@location,​ ¥@gcskew, -x=>'​bp', ​+           ​G::​Tools::​Graph::​grapher(¥@location,​ ¥@gcskew, -x=>'​bp', ​
                                            ​-y=>'​GC skew', -title=>'​GC skew', ​       ​                                            ​-y=>'​GC skew', -title=>'​GC skew', ​       ​
                                            ​-filename=>'​graph/​gcskew.png'​); ​                                            ​-filename=>'​graph/​gcskew.png'​); ​
Line 120: Line 127:
      ​return @gcskew; ​      ​return @gcskew; ​
   }    } 
 +</​code>​
  
 ====== Step 4. 全ての出力はG::​Messenger APIを使う ====== ====== Step 4. 全ての出力はG::​Messenger APIを使う ======
Line 132: Line 140:
 これでgcskew の標準関数化が完了です。 これでgcskew の標準関数化が完了です。
  
 +<code perl>
   sub gcskew{ ​   sub gcskew{ ​
      ​opt_default("​window"​=>​10000,​ "​output"​=>"​show",​ "​filename"​=>"​gcskew.png"​); ​      ​opt_default("​window"​=>​10000,​ "​output"​=>"​show",​ "​filename"​=>"​gcskew.png"​); ​
Line 165: Line 174:
      ​}elsif ($output eq '​g'​ || $output eq '​show'​){ ​      ​}elsif ($output eq '​g'​ || $output eq '​show'​){ ​
            mkdir ('​graph',​ 0777); ​            mkdir ('​graph',​ 0777); ​
-           ​G::​Tools::​Graph::​_UniMultiGrapher(¥@location,​ ¥@gcskew, -x=>'​bp', ​+           ​G::​Tools::​Graph::​grapher(¥@location,​ ¥@gcskew, -x=>'​bp', ​
                                               -y=>'​GC skew', -title=>'​GC skew', ​       ​                                               -y=>'​GC skew', -title=>'​GC skew', ​       ​
                                              ​-filename=>'​gcskew.png'​); ​                                              ​-filename=>'​gcskew.png'​); ​
Line 174: Line 183:
      ​return @gcskew; ​      ​return @gcskew; ​
   }    } 
 +</​code>​
  
  
gcskewodysseyjapanese.txt · Last modified: 2014/01/18 07:44 (external edit)