Skip to content

OryzaSNP Pipeline

Hiromi Kajiya-Kanegae edited this page Feb 10, 2022 · 1 revision

イネゲノムでの多型検出パイプライン

RAP-DBから公開されている多型検出パイプラインを実行します

パイプラインを実行するための環境構築

Analysis tools

  • SamTools (v1.9)
  • GATK (v4.0.11.0)
  • Picard (v2.18.17)

samtools (v1.9)のインストール

biocondaでインストールしたsamtools/bcftoolsでlibcrypto.so.1.0.0がないと言われる という問題が起こることがあるため、上記ページを参考にしてインストールします

vcfファイルの取り扱いについて

GVCF – Genomic Variant Call Format

通常のvcfファイルは変異が入っていない場所の情報しか含まれていない
個々のサンプルだけではなく多数のサンプルを合わせて解析する場合、変異が入っていない場所の情報も必要
gvcfファイルは全ての場所の情報が含まれている
詳しくはGATKの公式のページを参照してください。 GCVF形式

merge vcf files

1つのSNP/INDELを1行にマージすることを意味する
A.vcf.gz + B.vcf.gz -> Merged.vcf.gz
A.vcf.gzとB.vcf.gz の多型の位置が同じとは限らない

bcftools merge A.vcf.gz B.vcf.gz -Oz -o Merged.vcf.gz

A.vcf.gz B.vcf.gz : マージするファイル
Merged.vcf.gz : 出力ファイル
-Oz : 圧縮した.gz形式で保存

Concatenate or combine or append VCF files

例えば各染色体に分かれているvcf ファイルを1つのvcf ファイルにまとめることを意味する A.vcf.gz + B.vcf.gz -> output.vcf.gz

bcftools concat A.vcf.gz B.vcf.gz -Oz -o output.vcf.gz

A.vcf.gz B.vcf.gz : マージするファイル
Merged.vcf.gz : 出力ファイル
-Oz : 圧縮した.gz形式で保存

SNP多型検出

複数品種の多型情報をまとめたvcfファイルを作成します

Variant detection and filtering by GATK

HaplotypeCallerからgvcfファイルを作成します。

gatk --java-options "-Xmx64G -Xms64G" HaplotypeCaller --input alignment.rmdup.bam --output variants.g.vcf.gz --reference genome.fa -max-alternate-alleles 2 --emit-ref-confidence GVCF

GenomicsDBImport

計算に時間がかかるため、染色体ごとに分けて実行します
複数の gVCF ファイルからジェノタイピング用のローカルデータベースを構築
染色体ごとに実行します。for文を使う場合を示しています。

array=(chr01 chr02 chr03 chr04 chr05 chr06 chr07 chr08 chr09 chr10 chr11 chr12)

SAMPLE_IDを指定して実行します。
例)SAMPLE_ID=SAMPLE1

for name in ${array[@]}
do
echo $name
gatk --java-options "-Xmx64G -Xms64G" GenomicsDBImport --reference genome.fa -V variants_A.g.vcf.gz -V variants_B.g.vcf.gz -V Variants_C.g.vcf.gz --genomicsdb-workspace-path "$SAMPLE_ID"_"$name" --intervals "$name"
done

GenotypeGVCFs

計算に時間がかかるため、染色体ごとに分けて実行します
GenomicsDBImportで作成されたデータを利用してVCF ファイル(複数サンプル)を作成

array=(chr01 chr02 chr03 chr04 chr05 chr06 chr07 chr08 chr09 chr10 chr11 chr12)

SAMPLE_IDを指定して実行します。

for name in ${array[@]}
do
echo $name
gatk --java-options "-Xmx64G -Xms64G" GenotypeGVCFs --reference genome.fa -V gendb://"$SAMPLE_ID"_"$name" -G StandardAnnotation --new-qual -O "$SAMPLE_ID"_"$name".vcf.gz
done

(参考情報)1サンプルだけに対して実行する場合

gatk GenotypeGVCFs --variant variants.g.vcf.gz --output variants.genotype.vcf.gz --reference genome.fa

VariantFiltration

GBSのサンプルを含む場合、条件を変更する必要があります。

for name in ${array[@]}; do echo $name;
gatk --java-options "-Xmx64G -Xms64G" VariantFiltration \
    --reference genome.fa \
    --variant "$SAMPLE_ID"_"$name".vcf.gz\
    --output "$SAMPLE_ID"_"$name".filter.genotype.vcf.gz \
    --filter-expression "QUAL < 100 || DP < 3.0 || QD < 20.0 || FS >= 40.0 || MQ < 30.0" \
    --filter-name "FILTER"
done

for name in ${array[@]}; do echo $name;
gatk --java-options "-Xmx64G -Xms64G" SelectVariants \
    --reference genome.fa \
    --variant "$SAMPLE_ID"_"$name".filter.genotype.vcf.gz \
    --output "$SAMPLE_ID"_"$name".varonly.vcf.gz \
    --exclude-filtered \
    --select-type-to-include SNP \
    --select-type-to-include INDEL
done

Concatenate VCF files

これまで染色体ごとに分けて実行していましたが、1つのvcfファイルにまとめます

bcftools concat -o "$SAMPLE_ID".varonly.vcf.gz "$SAMPLE_ID"_chr01.varonly.vcf.gz "$SAMPLE_ID"_chr02.varonly.vcf.gz "$SAMPLE_ID"_chr03.varonly.vcf.gz "$SAMPLE_ID"_chr04.varonly.vcf.gz "$SAMPLE_ID"_chr05.varonly.vcf.gz "$SAMPLE_ID"_chr06.varonly.vcf.gz "$SAMPLE_ID"_chr07.varonly.vcf.gz "$SAMPLE_ID"_chr08.varonly.vcf.gz "$SAMPLE_ID"_chr09.varonly.vcf.gz "$SAMPLE_ID"_chr10.varonly.vcf.gz "$SAMPLE_ID"_chr11.varonly.vcf.gz "$SAMPLE_ID"_chr12.varonly.vcf.gz -O z

ヘテロの遺伝子型を除く

イネは自殖のため、ヘテロの遺伝子型は除いて解析に用います

zcat "$SAMPLE_ID".varonly.vcf.gz |  sed 's/1[/]0/\.\/\./g' | sed 's/0[/]1/\.\/\./g' | bgzip -c  > "$SAMPLE_ID".varonly.remHet.vcf.gz

filter variant

Imputationを行う前に、信頼性の高いSNPを抽出します。

vcftools --gzvcf "$SAMPLE_ID".varonly.remHet.vcf.gz --max-alleles 2 --min-alleles 2 --maxDP 1000 --minDP 3 --minQ 20 --max-missing 0.95 --recode --out "$SAMPLE_ID".varonly.remHet.bi_MQ20_DP3-1000_MS0.95

Imputation

beagleを用いて欠測を補完します。
欠測の補完については、以下の資料を参照してください。

beagle gt="$SAMPLE_ID".varonly.remHet.bi_MQ20_DP3-1000_MS0.95.recode.vcf.gz out="$SAMPLE_ID".varonly.remHet.bi_MQ20_DP3-1000_MS0.95.imputed

indexファイルを作成します

tabix -p vcf "$SAMPLE_ID".varonly.remHet.bi_MQ20_DP3-1000_MS0.95.imputed.vcf.gz