#!/bin/bash set -euo pipefail ln -sf ../11.reference_v2/raw . cd raw ln -sf Hippophae_tibetana.genomic.fasta HT.fa ln -sf YN.genome.fa YN.fa seqkit grep -f ZG.target.txt ZG.genome.fa > ZG.fa ln -sf ZJ.genome.fa ZJ.fa seqkit grep -f MG.target.txt MG.genome.fasta > MG.fa ln -sf EM.genome.fasta EM.fa cd .. bash "$SCRIPTS"/utils/asm_qc.sh raw/ZJ.fa \ raw/EM.fa \ raw/EA.fa \ raw/HT.fa \ raw/ZY.fa \ raw/ZG.fa \ raw/MG.fa \ raw/YN.fa \ raw/HG.fa \ raw/HS.fa \ raw/HN.fa > qc.tsvWDw ## ## minimap2 比对:YN 为参考(ZG 含单倍型出局),asm5 档位(属内分歧 0.001-0.007,EA/EM 约 0.03 也覆盖) ## ZJ 已剔除(跨科,分歧 0.19);YN 不做自比对 ## REF=raw/YN.fa mkdir -p paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/HG.fa '>' paf/HG.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/HN.fa '>' paf/HN.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/HS.fa '>' paf/HS.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/HT.fa '>' paf/HT.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/MG.fa '>' paf/MG.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/ZG.fa '>' paf/ZG.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/ZY.fa '>' paf/ZY.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/EA.fa '>' paf/EA.paf pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/EM.fa '>' paf/EM.paf ## 覆盖速览(pilot 判档用;asm5 若 EA/EM 覆盖塌,对这两个换 asm10 重跑) for f in paf/*.paf; do awk -v OFS='\t' '{alen += $11; qlen = $2} END {printf "%s\tqlen=%d\taligned=%d\tcov=%.2f%%\n", FILENAME, qlen, alen, alen / qlen * 100}' "$f" done ## YN 自比对:Dsuite 需要 YN 作样本(自比对产生全纯合参考基因型 VCF) pueue add -- minimap2 -cx asm5 --cs=long -t 8 "$REF" raw/YN.fa '>' paf/YN.paf ## ## PAF 过滤:只留 primary 链(tp:A:P)并按参考坐标排序(paftools call 要求排序输入) ## primary 链是一对一共线块的近似;如需严格双向最佳命中,在此之上再加过滤 ## mkdir -p paf_primary grep 'tp:A:P' paf/HG.paf | sort -k6,6 -k8,8n > paf_primary/HG.paf grep 'tp:A:P' paf/HN.paf | sort -k6,6 -k8,8n > paf_primary/HN.paf grep 'tp:A:P' paf/HS.paf | sort -k6,6 -k8,8n > paf_primary/HS.paf grep 'tp:A:P' paf/HT.paf | sort -k6,6 -k8,8n > paf_primary/HT.paf grep 'tp:A:P' paf/MG.paf | sort -k6,6 -k8,8n > paf_primary/MG.paf grep 'tp:A:P' paf/ZG.paf | sort -k6,6 -k8,8n > paf_primary/ZG.paf grep 'tp:A:P' paf/ZY.paf | sort -k6,6 -k8,8n > paf_primary/ZY.paf grep 'tp:A:P' paf/YN.paf | sort -k6,6 -k8,8n > paf_primary/YN.paf grep 'tp:A:P' paf/EA.paf | sort -k6,6 -k8,8n > paf_primary/EA.paf grep 'tp:A:P' paf/EM.paf | sort -k6,6 -k8,8n > paf_primary/EM.paf ## ## paftools call:每样本一个 VCF(-s 样本名;-l/-L 最小块长阈值,可调) ## mkdir -p vcf paftools.js call -s HG -l 5000 -L 10000 paf_primary/HG.paf > vcf/HG.vcf paftools.js call -s HN -l 5000 -L 10000 paf_primary/HN.paf > vcf/HN.vcf paftools.js call -s HS -l 5000 -L 10000 paf_primary/HS.paf > vcf/HS.vcf paftools.js call -s HT -l 5000 -L 10000 paf_primary/HT.paf > vcf/HT.vcf paftools.js call -s MG -l 5000 -L 10000 paf_primary/MG.paf > vcf/MG.vcf paftools.js call -s ZG -l 5000 -L 10000 paf_primary/ZG.paf > vcf/ZG.vcf paftools.js call -s ZY -l 5000 -L 10000 paf_primary/ZY.paf > vcf/ZY.vcf paftools.js call -s YN -l 5000 -L 10000 paf_primary/YN.paf > vcf/YN.vcf paftools.js call -s EA -l 5000 -L 10000 paf_primary/EA.paf > vcf/EA.vcf paftools.js call -s EM -l 5000 -L 10000 paf_primary/EM.paf > vcf/EM.vcf bgzip -f vcf/HG.vcf && tabix -f -p vcf vcf/HG.vcf.gz bgzip -f vcf/HN.vcf && tabix -f -p vcf vcf/HN.vcf.gz bgzip -f vcf/HS.vcf && tabix -f -p vcf vcf/HS.vcf.gz bgzip -f vcf/HT.vcf && tabix -f -p vcf vcf/HT.vcf.gz bgzip -f vcf/MG.vcf && tabix -f -p vcf vcf/MG.vcf.gz bgzip -f vcf/ZG.vcf && tabix -f -p vcf vcf/ZG.vcf.gz bgzip -f vcf/ZY.vcf && tabix -f -p vcf vcf/ZY.vcf.gz bgzip -f vcf/YN.vcf && tabix -f -p vcf vcf/YN.vcf.gz bgzip -f vcf/EA.vcf && tabix -f -p vcf vcf/EA.vcf.gz bgzip -f vcf/EM.vcf && tabix -f -p vcf vcf/EM.vcf.gz ## ## 合并为 10 类群多样本 VCF ## pueue add -- bcftools merge -O z -o vcf/dsuite.10taxa.vcf.gz vcf/HG.vcf.gz vcf/HN.vcf.gz vcf/HS.vcf.gz vcf/HT.vcf.gz vcf/MG.vcf.gz vcf/ZG.vcf.gz vcf/ZY.vcf.gz vcf/YN.vcf.gz vcf/EA.vcf.gz vcf/EM.vcf.gz tabix -f -p vcf vcf/dsuite.10taxa.vcf.gz ## ## 物种树:主数据集第二套(exclude_all_fs)ASTRAL 树剔除 ZJ ## TODO: 剪树工具任选(nw_prune / gotree / R ape),产物放 tree/dsuite.nwk ## mkdir -p tree # nw_prune ../14.taxa_phylogeny/exclude_all_fs/species_tree/coal.tre ZJ > tree/dsuite.nwk ## ## SETS 文件:双外类群交叉验证,EA / EM 各标一次 Outgroup ## mkdir -p sets dsuite cat > sets/EA_out.txt <<'EOF' HG HG HN HN HS HS HT HT MG MG ZG ZG ZY ZY YN YN EA Outgroup EM EM EOF cat > sets/EM_out.txt <<'EOF' HG HG HN HN HS HS HT HT MG MG ZG ZG ZY ZY YN YN EA EA EM Outgroup EOF ## ## Dtrios + Fbranch(EA / EM 各跑一遍) ## pueue add -- Dsuite Dtrios -t tree/dsuite.nwk -o dsuite/EA_out vcf/dsuite.10taxa.vcf.gz sets/EA_out.txt pueue add -- Dsuite Dtrios -t tree/dsuite.nwk -o dsuite/EM_out vcf/dsuite.10taxa.vcf.gz sets/EM_out.txt Dsuite Fbranch tree/dsuite.nwk dsuite/EA_out_tree.txt > dsuite/EA_out_fbranch.txt Dsuite Fbranch tree/dsuite.nwk dsuite/EM_out_tree.txt > dsuite/EM_out_fbranch.txt # dtools.py dsuite/EA_out_fbranch.txt tree/dsuite.nwk # dtools.py dsuite/EM_out_fbranch.txt tree/dsuite.nwk