美文网首页
2022-01-10

2022-01-10

作者: bettermaan | 来源:发表于2022-01-10 09:24 被阅读0次

    ###############################################################
    ####### #######
    ####### 1 reads比对 #######
    ####### 20220108 #######
    ###############################################################

    基因组文件:reference.fasta
    测序数据文件:example_R1.fq.gz example_R2.fq.gz

    1 为参考基因组构建索引

    samtools faidx reference.fasta
    bwa index reference.fasta
    

    2 将测序数据文件比对到参考基因组

    -t 设置线程数,-R 添加reads的标签信息,view -Sb 将结果文件由sam转为bam,减少存储。

    bwa mem -t 2 \ 
    -R '@RG\tID:example\tPL:illumina\tSM:example' \ 
    reference.fasta \ 
    ./example_R1.fq.gz ./example_R2.fq.gz \ 
    | samtools view -Sb - > example.bam  
    

    3 比对结果文件进行排序

    -@ 设置线程数,-m 每个线程可使用的最大内存,-o 指定输出文件名称

    samtools sort -@ 2 -m 10G -o example.sort.bam example.bam
    

    4 去除比对结果中的PCR重复

    samtools rmdup -S example.sort.bam example.sort.rmdup.bam

    5 过滤比对质量少于20的reads

    samtools view example.sort.rmdup.bam -q 20 -O BAM -o example.sort.rmdup.filter.bam

    ###############################################################
    ####### #######
    ####### 2 变异检测 #######
    ####### 20220108 #######
    ###############################################################

    基因组文件:reference.fasta
    比对结果文件:example.bam

    注:GATK3中需要单独对bam文件进行局部重比对,以提高Indel附近区域比对结果的准确性,但在GATK4中,

    局部重比对的步骤已经自动包含在HaplotypeCaller模块中,无需单独进行。

    1 分别对每个样品进行变异检测

    用到的GATK模块为HaplotypeCaller,--java-options 设置JAVA的参数 -XX:+UseSerialGC 单线程运行,-ERC 输出GVCF

    gatk --java-options "-XX:+UseSerialGC"
    HaplotypeCaller -R reference.fasta
    -ERC GVCF
    -I example.bam
    -O example.g.vcf.gz

    2 对所有样品的gvcf文件进行合并

    用到的GATK模块为CombineGVCFs, -Xmx400g -Xms400g 指定最大内存,-V 每个样品的gvcf文件 -O 指定输出文件名称

    gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
    CombineGVCFs -R reference.fasta
    -V example1.g.vcf.gz -V example2.g.vcf.gz -V example3.g.vcf.gz
    -O combine.g.vcf.gz

    3 群体变异检测

    用到的GATK模块为GenotypeGVCFs, -V gvcf文件 -O 指定输出的vcf文件

    gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
    GenotypeGVCFs -R reference.fasta
    -V combine.g.vcf.gz
    -O combine.call.vcf.gz

    4 提取SNP

    用到的GATK模块为SelectVariants, -select-type 指定提取类型

    gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
    SelectVariants -R reference.fasta
    -V combine.call.vcf.gz
    -select-type SNP
    -O combine.SNP.vcf.gz

    4 过滤SNP

    用到的GATK模块为VariantFiltration, --filter-expression 设置过滤参数及阈值

    --filter-name 为每个位点添加标记,大于过滤阈值的标记为PASS,否则标记为Filter

    gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
    VariantFiltration -R reference.fasta
    -V combine.SNP.vcf.gz
    --filter-expression "QD < 2.0 || MQ < 40.0 || FS > 60.0
    || SOR > 3.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0"
    --filter-name "Filter"
    -O combine.SNP.filter.vcf.gz

    5 提取过滤好的SNP

    用到的GATK模块为SelectVariants,--exclude-filtered 去除被过滤掉的SNP,即标记为Filter的位点

    gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
    SelectVariants -R reference.fasta
    -V combine.SNP.filter.vcf.gz
    --exclude-filtered
    -O combine.SNP.filtered.vcf.gz

    ###############################################################
    ####### #######
    ####### 3 变异过滤 #######
    ####### 20220109 #######
    ###############################################################

    VCF文件:example.vcf

    1 去除Indel附近7bp范围的SNP

    -g 设置距离,单位bp, -O 指定输出文件格式 v表示未压缩的vcf文件

    注:此步需要vcf文件中包含indel,过滤完后将indel去除

    bcftools filter -g 7 -O v -o 1.vcf example.vcf

    2 去除10bp范围内有大于3个SNP的SNP cluster

    1 为vcf文件建立索引

    gatk IndexFeatureFile -F 1.vcf

    2 为符合要求的位点添加标记SNP cluster,-cluster 指定SNP数目 -window 指定窗口范围,单位bp

    gatk VariantFiltration -V 1.vcf -cluster 3 -window 10 -O 2.vcf

    3 去除SNP cluster

    gatk --java-options "-XX:+UseSerialGC"
    SelectVariants -V 2.vcf
    -select "FILTER == SnpCluster"
    --invertSelect
    -O 2.Filtered.vcf

    3 将质量值小于20,覆盖的reads数小于5的基因型设为miss即./.

    vcftools --vcf 2.Filtered.vcf
    --minDP 5 --minGQ 20
    --recode --recode-INFO-all
    --out 3.Filtered

    4 去除非二等位基因、缺失率大于90%,次要等位基因频率小于5%的位点

    vcftools --vcf 3.Filtered.recode.vcf
    --max-allele 2 --min-allele 2
    --max-missing 0.9 --maf 0.05
    --recode --recode-INFO-all
    --out 4.Filtered

    5 过滤连锁不平衡位点

    1 转换vcf文件为ped格式

    plink --vcf 4.Filtered.recode.vcf
    --allow-extra-chr --recode
    --out 5.ld

    2 将map文件中的第二列改为每个snp位点特有的标识符

    awk '{print 1"\t"1"_"4"\t"3"\t"$4}' 5.ld.map > 5.ld1.map

    3 修改相应的ped文件的名称

    mv 5.ld.ped 5.ld1.ped

    4 计算位点之间的ld值, --indep-pairwise 设置窗口、步长、r2值

    plink --file 5.ld1
    --allow-extra-chr
    --indep-pairwise 50 10 0.2
    --out ld

    5 抽出低连锁的位点,--extract 抽取满足要求的位点,--make-bed 转换为bed格式

    plink --file 5.ld1
    --allow-extra-chr
    --extract ld.prune.in
    --make-bed --out filter_ld

    6 将bed文件转为vcf文件

    plink --bfile filter_ld
    --allow-extra-chr
    --recode vcf-iid --out filter_ld

    ###############################################################
    ####### #######
    ####### 4 系统树、Admixture和PCA #######
    ####### 20220109 #######
    ###############################################################

    VCF文件:example.vcf
    BED文件:example.bed

    系统树

    1 将SNP转为fasta格式,用到的软件为vcf2phylip.py(https://github.com/edgardomortiz/vcf2phylip)

    python vcf2phylip.py -f -i example.vcf

    2 megacc 构建NJ树

    infer_NJ_nucleotide_NOld.mao为参数文件,常用参数如下:

    [ AnalysisSettings ]

    Analysis = Phylogeny Reconstruction

    Scope = All Selected Taxa

    Statistical Method = Neighbor-joining #指定建树方法

    Phylogeny Test = ====================

    Test of Phylogeny = Bootstrap method

    No. of Bootstrap Replications = 1000 #指定Bootstrap次数

    Substitution Model = ====================

    Substitutions Type = Nucleotide

    Model/Method = p-distance #指定模型

    Number of Threads = 4 #指定线程数目

    -a 指定参数文件,-d指定序列文件

    megacc -a infer_NJ_nucleotide_NOld.mao -d example.fasta -o example_out

    3 IQTREE 构建ML树

    -s 指定序列文件,-o 指定外类群名称, -T 指定线程数目,-B 指定Bootstrap次数,-m MFP 自动搜索最适合模型并建树

    iqtree -s example.fasta -o acoe -T 10 -B 1000 -m MFP

    Admixture

    1 依次计算K=2到K=20

    for k in {2..20} ;do admixture --cv=10 example.bed k |tee log{k}.out; done

    2 处理admixture结果

    1 提取出Q文件中的个体顺序

    awk '{print $2}' example.fam > ID

    2 给Q文件添加个体id

    for i in *Q ;do paste ID i >i.id ;done

    3 按照sortID文件中的指定顺序,给Q文件排序

    for i in *id ;do python3 sortQ.py sortID ii.sort ;done

    3 绘图

    a <- read.table("sort.5k",row.names = 1)
    b <- t(as.matrix(a))
    b.reverse <- b[,324:1]
    p <- barplot(b.reverse,space = 0,border = NA,axisnames = F,
    col = c("gold","firebrick","DarkGoldenrod4","IndianRed1",))
    axis(side = 1, p, labels = F, at = c(0:324))
    labs <- colnames(b.reverse)
    text(cex=.3, x=p-0.25,y=-0.05,labs,xpd=TRUE,srt=45,adj = c(1,1))

    PCA

    --pca 324 计算324个PC的值,324为输入文件中的个体数

    plink --allow-extra-chr --bfile example --pca 324

    相关文章

      网友评论

          本文标题:2022-01-10

          本文链接:https://www.haomeiwen.com/subject/jshmcrtx.html