1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bedGraph wiggleファイルの特徴領域の抜粋

Posted at

#bedGraph wiggleファイル
リファレンスゲノム上にマッピングされた塩基対単位のリードスコアデータ
fixedStepとかvariableStepとかいろいろあるみたいだけどここでは割愛。詳しくはここらへん参照。
筆者はだいたい「.bigwig」からbigWigToWigで染色体ごとに分けて使ってる。

devide_each_chr.sh
#ヒト染色体の場合
for i in `seq 22`
do
bigWigToWig -chrom=chr$i hoge.bigwig hoge_chr$i.wig
done

shell楽
それでwiggleファイルの中身がこれ

hoge.wig
#bedGraph section chr1:0-840194
chr1	0	56898	0
chr1	56898	56998	1.02889
chr1	56998	91465	0
chr1	91465	91468	1.02889
chr1	91468	91469	2.05778
chr1	91469	91476	3.08639
chr1	91476	91487	4.11528
chr1	91487	91565	1.32123
chr1	91565	91568	0.9909

一行目でコメントアウトされてるのがデータの情報。
第1染色体の0塩基対目から840194塩基対目まで。
このコメントアウトが随所に見られるけど割と次のコメントアウトと前のコメントアウトで書かれてる範囲が繋がってたりする。IGVで見るためかも。
二行目から先は肝心のデータ部分

染色体	スタート位置	エンド位置	スコア

になってる。
スタート位置からエンド位置までスコアがずっと並んでるわけですね。

#何がしたいの
特定の閾値より高いor低いのが一定長以上続くような場所(特徴領域)を抜き出したい。
早い安いうまい古いで評判のPerlを使った。
抜き出した領域もbed形式風にまとめる。

search_region_on_wig.pl
use Statistics::Lite qw(:all);

my ($INPUT ,$OUTPUT, $border_u,$border_t, $length_u, $length_t, ) = ("","",0,0,0,3000000000);

($INPUT ,$OUTPUT, $border_u,$border_t, $length_u, $length_t, ) = @ARGV;

open IN,"$INPUT"or die;
open OUT,"> $OUTPUT"or die;
my $start = -1;
my $end = -1;
my @score = ();
my $chr;
while(my $line = <IN>){
    chomp $line;
    
    if($line !~ /#/){
        my @data = split /\s/,$line;
        if(($border_u<=$data[3])&&($data[3]<=$border_t)){#ボーダー範囲内に入っている
            if($start==-1){#スタート位置を覚えていなければ現在位置の記憶と終わりの記憶
                $start = $data[1];
                $end = $data[2];
                $chr = $data[0];
                @score = ();
                push @score,$data[3]*($data[2]-$data[1]+1);
            }
            else{
                if($end >= $data[1]){#一つ前のデータの終わりから繋がっているか
                    $end = $data[2];
                    push @score,$data[3]*($data[2]-$data[1]+1);
                }
                else{
                    if(($length_t>=$end-$start)&&($end-$start>=$length_u)){
                        print OUT "$chr $start $end ",$end-$start," ",sum(@score)/($end-$start),"\n";
                    }
                    #現在位置と終わりの記憶を忘れる
                    $start = -1;
                    $end = -1;
                }
            }
        }
        else{
            if($start != -1){#スタート位置に記憶が残っていたら、前のデータとの繋がりが切れると書き出す
                if(($length_t>=$end-$start)&&($end-$start>=$length_u)){
                    print OUT "$chr $start $end ",$end-$start," ",sum(@score)/($end-$start),"\n";
                }
                $start = -1;
            }
        }
    }
}
close OUT;
close IN;

これで

pickup.sh

for i in `seq 22`
do
perl search_region_on_wig.pl hoge_chr$i.wig output.txt 0 1.5 100 150
done

とすれば全染色体で探索ができる。

#まとめ
リードスコアが低い領域あつめたーいというためだけに書いたけどここから特に可視化ができるわけではない
IGVにマーカー機能があれば少し役に立つかも。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?