分享

WES的CNV探究-conifer软件使用

 健明 2021-07-14

conifer全称是COpy Number Inference From Exome Reads,发表于2012,目前(2017)已有近300的引用啦。软件本身下载即可使用,但是依赖一下python的包,比如 NumPy and PyTables packages,还有pysam 和matplotlib.

  1. cd ~/biosoft

  2. # http://conifer./download.html

  3. mkdir conifer &&  cd conifer

  4. wget https://downloads./project/conifer/CoNIFER%200.2.2/conifer_v0.2.2.tar.gz

  5. tar zxvf conifer_v0.2.2.tar.gz  

  6. mkdir test && cd test

  7. wget http:///projects/conifer/files/sampledata.tar.gz

  8. tar zxvf sampledata.tar.gz

  9. wget http:///projects/conifer/files/probes.txt

  10. python -c "import numpy"

  11. python -c "import tables"

  12. # pip install pysam --user

  13. python -c "import pysam"

  14. python -c "import matplotlib"

因为这个软件就是设计给WES测序数据的,所以需要自行制作外显子的坐标记录文件,或者直接下载This file defines the chr:start-stop coordinates for the probes/targets in the exome capture。You can download the standard probe file used in Krumm et al. here. 软件有详细的使用教程:http://conifer./tutorial.html (但是对样本数量是有要求的哦)

首先把所有样本的bam文件转为RPKM表达量文件

  1. python conifer.py rpkm \

  2.    --probes probes.txt \

  3.    --input sample.bam \

  4.    --output RPKM/sample.rpkm.txt

这个程序也是槽点满满,软件本身只提供了hg19版本的probes.txt文件,反正我各种自己制作都不符合要求,最后得到的每个外显子的RPKM都是几个亿,完全是一脸蒙圈。后来我干脆自己计算RPKM啦,代码如下:

  1. bed=exon_probe.hg38.gene.bed

  2. for bam in  *bam

  3. do

  4. file=$(basename $bam )

  5. sample=${file%%.*}

  6. echo $sample

  7. #export total_reads=$(samtools view -F 0x4 $bam | cut -f 1 | sort | uniq | wc -l)

  8. export total_reads=$(samtools idxstats  $bam|awk -F '\t' '{s+=$3}END{print s}')

  9. echo The number of reads is $total_reads

  10. bedtools multicov -bams  $bam -bed $bed |perl -alne '{$len=$F[2]-$F[1];if($len <1 ){print "$.\t$F[4]\t0" }else{$rpkm=(1000000000*$F[4]/($len* $ENV{total_reads}));print "$.\t$F[4]\t$rpkm"}}' >$sample.rpkm.txt

  11. done

上面那个exon_probe.hg38.gene.bed文件我是下载了CCDS文件制作的。

  1. wget ftp://ftp.ncbi.nlm.nih.gov/pub/CCDS/current_human/CCDS.20160908.txt

  2. cat CCDS.20160908.txt |perl -alne '{/\[(.*?)\]/;next unless $1;$gene=$F[2];$exons=$1;$exons=~s/\s//g;$exons=~s/-/\t/g;print "$F[0]\t$_\t$gene" foreach split/,/,$exons;}'|sort -u |bedtools sort -i > exon_probe.grch38.gene.bed

  3. sed 's/^/chr/g' exon_probe.grch38.gene.bed >exon_probe.hg38.gene.bed

不过作者给了测试就,是The sample data set of 26 RPKM files. Sample RPKM Files

StudyExome CaptureNSamples
HapMapNimblegen V1 (2009)8NA12878, NA15510, NA18507, NA18517, NA18555, NA18956, NA19129, NA19240
Autism TriosNimblegen V2 (2010)186 Trios (Mother, Father, Proband)

这里就用这个测试数据来说明这个软件的用法吧,很明显,需要多个样本一起运行。

中间报错了,日志如下:

  1. File "conifer.py", line 682, in <module>

  2. args.func(args)

  3. File "conifer.py", line 564, in CF_bam2RPKM

  4. if not f._hasIndex():

简单谷歌了一下,发现了解决方案,需要修改那个conifer.py 程序,这么大一个bug作者居然不去修复,真奇怪。解决方案如下:

  1. It's a very simple fix. Just change line 564 of conifer.py from:

  2. if not f._hasIndex():

  3. to

  4. if not f.has_index():

  5. Then it should work.

运行主程序

代码不复杂,就是WES的探针文件,加上转换好的RPKM文件即可。

  1. cd ~/biosoft/conifer/test/

  2. python ~/biosoft/conifer/conifer_v0.2.2/conifer.py analyze \

  3.      --probes ~/biosoft/conifer/test/probes.txt \

  4.      --rpkm_dir ~/biosoft/conifer/test/sampledata/RPKM_data/  \

  5.      --output analysis.hdf5 \

  6.      --svd 6 \

  7.      --write_svals singular_values.txt \

  8.      --plot_scree screeplot.png \

  9.      --write_sd sd_values.txt

call CNV

  1. cd ~/biosoft/conifer/test/

  2. python ~/biosoft/conifer/conifer_v0.2.2/conifer.py call \

  3.      --input analysis.hdf5 \

  4.      --output calls.txt

这里得到的calls.txt就是我们对这个WES项目的CNV分析结果啦

  1. $ head calls.txt

  2. sampleID    chromosome  start   stop    state

  3. Trio2.fa    chr1    196714946   196759357   del

  4. NA18555    chr1    161483684   161640062   dup

  5. NA15510    chr1    155226464   155261728   dup

  6. Trio3.mo    chr1    149398798   149760173   del

  7. NA19240    chr1    110224430   110254970   dup

  8. Trio3.fa    chr10   46998880    47894049    dup

  9. Trio3.fa    chr10   47948713    48382260    dup

  10. Trio4.fa    chr10   124362280   124370763   dup

  11. NA18956    chr10   124342115   124352111   del

可视化

  1. cd ~/biosoft/conifer/test/

  2. mkdir export_svdzrpkm/

  3. python ~/biosoft/conifer/conifer_v0.2.2/conifer.py export \

  4.      --input analysis.hdf5 \

  5.      --output ./export_svdzrpkm/

  6. ## 需要自定义区域进行可视化

  7. cd ~/biosoft/conifer/test/

  8. python ~/biosoft/conifer/conifer_v0.2.2/conifer.py   plot \

  9.      --input analysis.hdf5 \

  10.      --region chr#:start-stop \

  11.      --output image.png \

  12.      --sample sampleID

  13. ## 也可以一次性画出所有的图

  14. cd ~/biosoft/conifer/test/

  15. mkdir call_imgs/

  16. python ~/biosoft/conifer/conifer_v0.2.2/conifer.py  plotcalls \

  17.      --input analysis.hdf5

  18.      --calls calls.txt

  19.      --outputdir ./call_imgs/

figure解析

Legend/Explanation: X-axis: Exons/probes from the probes.txt file Y-axis: SVD-ZRPKM values for each exon. Red bars and line: SVD-ZRPKM values for each exon from the sample with the call (or highlighted sample). The smooth continuous line is simply a gaussian-smoothed representation of the SVD-ZRPKM values at each exon. Thin black in background: All other samples in the analysis (for comparison and simultaneous visualization purposes) Purple bars: Genes from the probes.txt file Black bar: If using the "plotcalls" command, this bar will indicate extent of call above threshold (--threshold) value.

其它软件

目前主流检测全基因组水平拷贝数变异(CNV)的平台主要是基因芯片,但是基因芯片一般来说检测的片段长度至少在10kb以上,另外对于特定区域的拷贝数,如DMD等,还可以使用MLPA平台,对于全外显子来说,其本身设计是用来检测点突变与indel的,由于实验与基因数据分析技术的局限,全外显子CNV分析有很高的假阳性,所以常规流程中并不包括全外显子CNV分析,可是在实际的科研与临床工作中,在排除了点突变与indel之后仍然找不到有意义的变异之后,分析CNV成为最后的希望。

基因检测与解读公众号的游侠推荐过相对比较靠谱的两款分析软件:XHMM与CODEX。

XHMM(exome hidden Markov model)软件由美国纽约西奈山医学院的Fromer等开发,发表于2012年10月的Am J Hum Genet杂志(PMID:23040492),XHMM的主要原理是:通过GATK的Depth of Coverage工具计算每个外显子的测序深度,然后PCA将不同样本的深度进行归一化,去除高变异的背景噪声,HMM算法训练数据分析哪些属于高深度区域,哪些属于低深度区域,最后拷贝数分析并得出基因型。

  1. CODEX软件由宾夕法尼亚大学的Jiang Y等开发,发表于20153月的Nucleic Acids ResPMID: 25618849). CODEX的主要原理是:计算每个外显子的测序深度、比对率及GC含量,归一化每个样本的测序深度,Poisson片段化分析,最后计算每个样本的CNV

因为暂时用不到,就不写教程了,反正学个软件,就是看readme罢了,想要用的好,就得把readme仔细读下去,并且看发表的文章。

我应该是还会写好几个不同的CNV-caller。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多