VEP 107安装和使用

使用 Mamba 安装 VEP 107 (成功率最高方案)

  1. conda 的解析引擎在处理 Perl 这种多层嵌套依赖时非常吃力。我们直接使用 Mamba。

    conda install -n base -c conda-forge mamba -y
    
  2. 创建 107 专用环境: 这里我们明确指定核心依赖的版本,强迫解析器寻找满足条件的组合。我们将 bioconda 放在第一优先级,conda-forge 放在第二。

    mamba create -n vep107 -c bioconda -c conda-forge \
    	ensembl-vep=107 \
    	perl=5.32 \
    	htslib=1.15 \
    	bcftools=1.15 \
    	-y
    
  3. 激活并验证:

    conda activate vep107
    vep --help | grep ensembl-vep
    
  4. 使用 aria2 下载 107 版本 Cache

    # 进入你的目标文件夹
    cd vep_cache
    
    # 下载人类 GRCh38 的 107 版本 Cache
    aria2c -s 16 -x 16 -c "http://ftp.ensembl.org/pub/release-107/variation/indexed_vep_cache/homo_sapiens_vep_107_GRCh38.tar.gz"
    
  5. 正确解压(至关重要)

    tar -zxvf homo_sapiens_vep_107_GRCh38.tar.gz
    
  6. 下载 FASTA 文件
    VEP 还需要参考基因组的 FASTA 文件进行校验

    aria2c -s 10 -x 10 -c ftp://ftp.ensembl.org/pub/release-107/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
    
    gunzip Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
    samtools faidx Homo_sapiens.GRCh38.dna.primary_assembly.fa
    
  7. 使用,需要输入的是VCF文件

    vep -i dbSNP_human/coding_variants.vcf     --cache --offline --dir_cache vep_cache     --fasta /nvem/projects/vep/Homo_sapiens.GRCh38.dna.primary_assembly.fa     --hgvs --symbol --protein --lookup_ref   --stats_file out.html     --output_file out.txt
    
  8. 过滤, 自动化过滤脚本: 你可以运行这段 Python 脚本,它会根据警告文件里的“行号”信息,精准删除结果文件中对应的错误注释:

    import re
    
    # 1. 提取不匹配的输入行号(转为 int 提高速度)
    bad_vcf_lines = set()
    with open("out.txt_warnings.txt", "r") as f:
    	for line in f:
    		if "does not match" in line:
    			match = re.search(r"line (\d+)", line)
    			if match:
    				bad_vcf_lines.add(int(match.group(1)))
    
    # 2. 读取原始 VCF,获取这些行号对应的位点标识符 (ID)
    # VEP 默认输出的第一列通常是 "CHR_POS_REF/ALT"
    bad_variant_ids = set()
    with open("dbSNP_human/coding_variants.vcf", "r") as vcf:
    	data_line_count = 0
    	for line in vcf:
    		if line.startswith("#"): continue
    		data_line_count += 1
    		if data_line_count in bad_vcf_lines:
    			cols = line.split("\t")
    			# 构造 VEP 默认的第一列格式:CHR_POS_REF/ALT
    			var_id = f"{cols[0]}_{cols[1]}_{cols[3]}/{cols[4]}"
    			bad_variant_ids.add(var_id)
    
    # 3. 过滤 out.txt
    with open("out.txt", "r") as fin, open("out_filtered.txt", "w") as fout:
    	for line in fin:
    		if line.startswith("#"):
    			fout.write(line)
    			continue
    		# 检查这一行的第一列是否在黑名单中
    		variant_id = line.split("\t")[0]
    		if variant_id not in bad_variant_ids:
    			fout.write(line)
    
    print(f"成功从输出中剔除了 {len(bad_vcf_lines)} 个不匹配位点的所有转录本注释。")
    
posted @ 2026-01-26 22:34  ylifs  阅读(0)  评论(0)    收藏  举报