def minimac(args): """ %prog batchminimac input.txt Use MINIMAC3 to impute vcf on all chromosomes. """ p = OptionParser(minimac.__doc__) p.set_home("shapeit") p.set_home("minimac") p.set_outfile() p.set_chr() p.set_ref() p.set_cpus() opts, args = p.parse_args(args) if len(args) != 1: sys.exit(not p.print_help()) txtfile, = args ref = opts.ref mm = MakeManager() pf = txtfile.split(".")[0] allrawvcf = [] alloutvcf = [] chrs = opts.chr.split(",") for x in chrs: px = CM[x] chrvcf = pf + ".{0}.vcf".format(px) if txtfile.endswith(".vcf"): cmd = "vcftools --vcf {0} --chr {1}".format(txtfile, x) cmd += " --out {0}.{1} --recode".format(pf, px) cmd += " && mv {0}.{1}.recode.vcf {2}".format(pf, px, chrvcf) else: # 23andme cmd = "python -m jcvi.formats.vcf from23andme {0} {1}".format(txtfile, x) cmd += " --ref {0}".format(ref) mm.add(txtfile, chrvcf, cmd) chrvcf_hg38 = pf + ".{0}.23andme.hg38.vcf".format(px) minimac_liftover(mm, chrvcf, chrvcf_hg38, opts) allrawvcf.append(chrvcf_hg38) minimacvcf = "{0}.{1}.minimac.dose.vcf".format(pf, px) if x == "X": minimac_X(mm, x, chrvcf, opts) elif x in ["Y", "MT"]: cmd = "python -m jcvi.variation.impute passthrough" cmd += " {0} {1}".format(chrvcf, minimacvcf) mm.add(chrvcf, minimacvcf, cmd) else: minimac_autosome(mm, x, chrvcf, opts) # keep the best line for multi-allelic markers uniqvcf= "{0}.{1}.minimac.uniq.vcf".format(pf, px) cmd = "python -m jcvi.formats.vcf uniq {0} > {1}".\ format(minimacvcf, uniqvcf) mm.add(minimacvcf, uniqvcf, cmd) minimacvcf_hg38 = "{0}.{1}.minimac.hg38.vcf".format(pf, px) minimac_liftover(mm, uniqvcf, minimacvcf_hg38, opts) alloutvcf.append(minimacvcf_hg38) if len(allrawvcf) > 1: rawhg38vcfgz = pf + ".all.23andme.hg38.vcf.gz" cmd = "vcf-concat {0} | bgzip > {1}".format(" ".join(allrawvcf), rawhg38vcfgz) mm.add(allrawvcf, rawhg38vcfgz, cmd) if len(alloutvcf) > 1: outhg38vcfgz = pf + ".all.minimac.hg38.vcf.gz" cmd = "vcf-concat {0} | bgzip > {1}".format(" ".join(alloutvcf), outhg38vcfgz) mm.add(alloutvcf, outhg38vcfgz, cmd) mm.write()