请见 demo1.py和demo2.py两个文件 其中demo1.py文件根据GATK4.0和全基因组数据分析实践(上)内容, 用了gatk3和picard,直接可以用
python demo1.py -t0 运行 你可以在
demo/output
文件夹下找到记录文件和结果
demo2.py为肿瘤样本外显子mutect2分析的部分代码,需要安装bwa
, samtools
等
在我的docker平台上, 即是以这个类为基础,在网页端直接不用nohup启动分析流程,不需要时刻去往脚本里扔参数,会自动记录log,写入运行时间和步骤。
自从配了一个新服务器,就有这样一个问题, 怎么样把机器高效地跑WES/WGS的pipeline。 大家可能看到过很多用perl,shell跑pipeline的示范脚本。但是,一般来说示范脚本都是用一两个样本进行演示,而在实际工作中, 常碰到要处理几十上百样本的情况,本人碰到过的情况是300多例. 在硬件不是计算瓶颈的情况下,需要充分地使用cpu/memory出运算结果用于分析.对于多个样本,多进程并行同时运算是容易想到的方法 perl本人一直不是很喜欢,shell 脚本多进程方法不直观,因此 我用python的multiprocessing里的Pool进程池技术实现了多个样本并行跑, 后来又加入了流程控制,过程记录,内存/CPU分配等功能。
- 对于一组数据构建一个
pipeline
,pipleine
的一个环节为一个procedure
, 如bwa
,samtools
, 把所有的procedure
在读入fq.gz
文件时,都先计划
好 ,然后依次执行。 - 用了python里的
OrderedDict
作为这个计划
的主体,以procedure
为key
,value
为运算命令cmd
, 计算结果target
, 记录文件log
等 - 同时,用了一个
csv
文件作为记录下已跑流程结果和运算时间,在因为某些原因需要中断,重启后不需要从头再跑,直接运行原命令即可. - 为了调试运行,有一个参数
test
,默认为1,在此状态下只输出运行代码而不实际运行
以wes
为例,一个样本可能有bwa_mem
・samtools sort
,markdup
,merge
,bqsr
,applybqsr
,haplotypecaller
等步骤
- 用
记录文件
,是否test
等初始化Pipeline类pipeline,并用本脚本里提供的函数获取系统cpu
和memory
- 遍历文件夹,读取需要进行
vcf call
的样本,获得ID
,在脚本内形成相应的运行cmd
, 和target
,log
,run_sync
等一起append到pipeline里 - 最终,run_pipeline
- 请仔细观察两个demo文件学习
- 在代码运行过程中,能按
ctrl+c
结束所有命令。现在能在docker里可以用重启container的方式强制结束所有进程, - 解决好诸如要全部样本先算好,再统计所有样本的分布的
多对一
依赖问题,在demo2里,只能先把不需要的代码注释掉,等全部基因步骤跑完后再跑后续流程 - 能像
WDL
snakemake
一样, 模板化运行脚本,现在用纯python写代码量明显多于perl和shell - 利用消息队列,
中心化/分布式
运行