Palmsonntagmorgen

NGSデータを使った解析と、その周辺。

fetchChromSizes を使ってgenome tableファイルを作成

以前書いた以下のエントリでは、genome配列ファイルからgenome tableファイルを作成する方法を紹介しました。

rnakato.hatenablog.jp

UCSCから提供されているfetchChromSizes を使うと、この作業をより簡便に行うことが可能です。

fetchChromSizesのインストール

UCSCサイトから fetchChromSizes を直接ダウンロード可能です。

wget https://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/fetchChromSizes
chmod +x fetchChromSizes

またはbiocondaでもインストール可能です。

conda install -c bioconda ucsc-fetchchromsizes

fetchChromSizesの利用

例えばhg38のgenometableを作成するには以下のようにします。

$ fetchChromSizes hg38 > genometable.hg38.txt
INFO: trying CURL  for database hg38
url: http://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes
$ head genometable.hg38.txt
chr1    248956422
chr2    242193529
chr3    198295559
chr4    190214555
chr5    181538259
chr6    170805979
chr7    159345973
chrX    156040895
chr8    145138636
chr9    138394717

ログに表示されている通り、このコマンドはUCSC database で公開されている chrom.sizesファイルhttp://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes をダウンロードしているだけです。なので、以下のコマンドと本質的に同じことをしています。

$ wget http://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes -O genometable.hg38.txt
--2021-05-24 20:15:40--  http://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes
...
2021-05-24 20:15:40 (163 MB/s) - genometable.hg38.txt へ保存完了

$ head genometable.hg38.txt
chr1    248956422
chr2    242193529
chr3    198295559
chr4    190214555
chr5    181538259
chr6    170805979
chr7    159345973
chrX    156040895
chr8    145138636
chr9    138394717

URLを直接指定しなくてよいぶん、fetchChromSizesの方が簡便ですね。

fetchChromSizesの応用

fetchChromSizesは結果を標準出力に表示しますので、出力をパイプすることができます。

上記のコマンドはコンティグ配列などを全て含んだgenometableを生成しますが、以下のコマンドでコンティグ配列分を除去したgenometableを作成できます。

# grep -vを使う場合
$ fetchChromSizes hg38 | grep -v _ > genometable.hg38.txt
# awkを使う場合(より厳密)
$ fetchChromSizes hg38 | awk -vOFS="\t" '($1!~/_/)' > genometable.hg38.txt
$ cat genometable.hg38.txt
chr1    248956422
chr2    242193529
chr3    198295559
chr4    190214555
chr5    181538259
chr6    170805979
chr7    159345973
chrX    156040895
chr8    145138636
chr9    138394717
chr11   135086622
chr10   133797422
chr12   133275309
chr13   114364328
chr14   107043718
chr15   101991189
chr16   90338345
chr17   83257441
chr18   80373285
chr20   64444167
chr19   58617616
chrY    57227415
chr22   50818468
chr21   46709983
chrM    16569

以下のようにするとbed形式にできます。

$ fetchChromSizes hg38 \
  | awk -vOFS="\t" '($1!~/_/){ print $1, "0", $2 }' \
  > hg38.bed
$ cat hg38.bed
chr1    0       248956422
chr2    0       242193529
chr3    0       198295559
chr4    0       190214555
chr5    0       181538259
chr6    0       170805979
chr7    0       159345973
chrX    0       156040895
chr8    0       145138636
chr9    0       138394717
chr11   0       135086622
chr10   0       133797422
chr12   0       133275309
chr13   0       114364328
chr14   0       107043718
chr15   0       101991189
chr16   0       90338345
chr17   0       83257441
chr18   0       80373285
chr20   0       64444167
chr19   0       58617616
chrY    0       57227415
chr22   0       50818468
chr21   0       46709983
chrM    0       16569

結果をソートしたい場合は以下のようにしましょう。

$ fetchChromSizes hg38 \
   | awk -vOFS="\t" '($1!~/_/){ print $1, "0", $2 }' \
   | sort -k1,1 -k2,2n \
   > hg38.bed
$ cat hg38.bed
chr1    0       248956422
chr10   0       133797422
chr11   0       135086622
chr12   0       133275309
chr13   0       114364328
chr14   0       107043718
chr15   0       101991189
chr16   0       90338345
chr17   0       83257441
chr18   0       80373285
chr19   0       58617616
chr2    0       242193529
chr20   0       64444167
chr21   0       46709983
chr22   0       50818468
chr3    0       198295559
chr4    0       190214555
chr5    0       181538259
chr6    0       170805979
chr7    0       159345973
chr8    0       145138636
chr9    0       138394717
chrM    0       16569
chrX    0       156040895
chrY    0       57227415