重测序数据 之 GenotypeGVCFs
本文最后更新于 337 天前,如有失效请评论区留言。

1、正常运行 GenotypeGVCFs

#!/bin/bash

# 设置combined_gvcf文件路径(来自上一步的输出)
combined_gvcf_path="/public1/guop/mawx/workspace/wild_snpcalling/4.gatk_gvcf/combined_raw.gvcf"

# 定义参考基因组文件
reference_genome="/public1/guop/mawx/workspace/wild_snpcalling/0.genome/LYG.hic.fasta"

# 设置gatk文件目录
gatk_dir="/public1/guop/mawx/workspace/wild_snpcalling/4.gatk_gvcf"

# 设置输出的VCF文件路径
output_vcf_path="$gatk_dir/combined_genotyped.vcf"

# 设置日志文件
log_file="$gatk_dir/gatk_GenotypeGVCFs_processing.log"

# 创建输出目录(如果不存在)
mkdir -p "$(dirname "$output_vcf_path")" "$gatk_dir/tmp"

# 记录脚本开始时间
echo "GenotypeGVCFs Script started at $(date)" | tee -a "$log_file"

# 运行GATK GenotypeGVCFs
echo "Running GATK GenotypeGVCFs at $(date)" | tee -a "$log_file"
gatk --java-options "-Xms200G -Xmx200G -XX:ParallelGCThreads=20 -Djava.io.tmpdir=${gatk_dir}/tmp" GenotypeGVCFs \
    -R "$reference_genome" \
    -V "$combined_gvcf_path" \
    -O "$output_vcf_path"  2>&1 | tee -a "$log_file"
echo "GATK GenotypeGVCFs completed at $(date)" | tee -a "$log_file"

# 记录脚本完成时间
echo "GenotypeGVCFs Script completed at $(date)" | tee -a "$log_file"

2、按照染色体分开运行 GenotypeGVCFs,每个染色体单独生成一个VCF文件。

可以一定程度避免运行中断

#!/bin/bash

# 设置输入的 GVCF 文件路径
combined_gvcf_path="/public1/guop/mawx/workspace/wild_snpcalling/4.gatk_gvcf/combined_raw.gvcf"

# 定义参考基因组文件
reference_genome="/public1/guop/mawx/workspace/wild_snpcalling/0.genome/LYG.hic.fasta"

# 设置输出目录
output_dir="/public1/guop/mawx/workspace/wild_snpcalling/4.gatk_gvcf/per_chromosome_vcf"
log_dir="$output_dir/logs"
mkdir -p "$output_dir" "$log_dir" "$output_dir/tmp"

# 记录脚本开始时间
echo "GenotypeGVCFs per chromosome script started at $(date)" | tee -a "$log_dir/gatk_GenotypeGVCFs_processing.log"

# 定义染色体名称列表 (根据你的染色体命名方式)
chromosomes=("Superscaffold1" "Superscaffold2" "Superscaffold3" ... "Superscaffold23")

# 遍历每个染色体
for chrom in "${chromosomes[@]}"; do
    # 设置输出 VCF 文件路径
    output_vcf="${output_dir}/${chrom}.vcf"
    
    # 运行 GATK GenotypeGVCFs
    echo "Running GATK GenotypeGVCFs for $chrom at $(date)" | tee -a "$log_dir/gatk_GenotypeGVCFs_processing.log"
    gatk --java-options "-Xms50G -Xmx50G -XX:ParallelGCThreads=10 -Djava.io.tmpdir=${output_dir}/tmp" GenotypeGVCFs \
        -R "$reference_genome" \
        -V "$combined_gvcf_path" \
        -O "$output_vcf" \
        -L "$chrom" 2>&1 | tee -a "$log_dir/gatk_GenotypeGVCFs_${chrom}.log"
    
    echo "GATK GenotypeGVCFs completed for $chrom at $(date)" | tee -a "$log_dir/gatk_GenotypeGVCFs_processing.log"
done

# 记录脚本完成时间
echo "GenotypeGVCFs per chromosome script completed at $(date)" | tee -a "$log_dir/gatk_GenotypeGVCFs_processing.log"

脚本说明:

  1. 染色体列表:脚本中 chromosomes 数组包含了所有染色体的名称,需要根据实际情况进行调整。
  2. GATK 命令:对于每个染色体,使用 -L 参数指定染色体范围来运行 GenotypeGVCFs,并将结果保存为对应的VCF文件。
  3. 日志记录:为每个染色体单独生成一个日志文件,并且记录整体开始和结束的时间。
  4. 资源配置:根据每个染色体的大小调整 -Xms-Xmx 的值。如果你有多个染色体,确保你有足够的内存和线程分配。

运行这个脚本后,将在 output_dir 目录中得到每条染色体的VCF文件。

3、让脚本并行运行23个染色体,以加快处理速度。可以使用 & 符号在后台同时运行多个 GenotypeGVCFs 命令,并使用 wait 命令确保所有染色体的处理完成后脚本才结束。

以下是修改后的脚本示例,支持同时运行多个染色体:

脚本 6.GenotypeGVCFs_parallel.sh

#!/bin/bash

# 设置输入的 GVCF 文件路径
combined_gvcf_path="/public1/guop/mawx/workspace/wild_snpcalling/4.gatk_gvcf/combined_raw.gvcf"

# 定义参考基因组文件
reference_genome="/public1/guop/mawx/workspace/wild_snpcalling/0.genome/LYG.hic.fasta"

# 设置输出目录
output_dir="/public1/guop/mawx/workspace/wild_snpcalling/4.gatk_gvcf/per_chromosome_vcf"
log_dir="$output_dir/logs"
mkdir -p "$output_dir" "$log_dir" "$output_dir/tmp"

# 记录脚本开始时间
echo "GenotypeGVCFs per chromosome script started at $(date)" | tee -a "$log_dir/gatk_GenotypeGVCFs_processing.log"

# 定义染色体名称列表 (根据你的染色体命名方式)
chromosomes=("Superscaffold1" "Superscaffold2" "Superscaffold3" ... "Superscaffold23")

# 遍历每个染色体并行运行
for chrom in "${chromosomes[@]}"; do
    # 设置输出 VCF 文件路径
    output_vcf="${output_dir}/${chrom}.vcf"
    
    # 运行 GATK GenotypeGVCFs
    echo "Running GATK GenotypeGVCFs for $chrom at $(date)" | tee -a "$log_dir/gatk_GenotypeGVCFs_processing.log"
    gatk --java-options "-Xms50G -Xmx50G -XX:ParallelGCThreads=10 -Djava.io.tmpdir=${output_dir}/tmp" GenotypeGVCFs \
        -R "$reference_genome" \
        -V "$combined_gvcf_path" \
        -O "$output_vcf" \
        -L "$chrom" 2>&1 | tee -a "$log_dir/gatk_GenotypeGVCFs_${chrom}.log" &
    
    # 限制并发数,这里假设同时运行5个
    if [[ $(jobs -r -p | wc -l) -ge 5 ]]; then
        wait -n  # 等待任意一个任务完成
    fi
done

# 等待所有任务完成
wait

# 记录脚本完成时间
echo "GenotypeGVCFs per chromosome script completed at $(date)" | tee -a "$log_dir/gatk_GenotypeGVCFs_processing.log"

脚本说明:

  1. 并行执行:使用 &GenotypeGVCFs 命令放入后台执行,每个染色体处理都会并行进行。
  2. 控制并发数:为了避免同时运行太多任务而导致资源不足,脚本包含一个并发数限制(例子中为5个)。if [[ $(jobs -r -p | wc -l) -ge 5 ]]; then wait -n; fi 这段代码检查当前正在运行的任务数,并确保最多有5个任务在同时运行。你可以根据服务器资源调整这个数值。
  3. 等待所有任务完成:使用 wait 命令等待所有后台任务完成后,再记录完成时间。

通过这种方法,你可以显著加快处理速度,同时避免系统资源过载。

版权声明:除特殊说明,博客文章均为Vensin原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 如有需要,请至学习地图系统学习本博客的教程。 | 博客订阅:RSS | 广告招租:留言板 | 博客 |
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
# # #