# 定义染色体列表,包含 1 到 22 号染色体
chromosomes = list(range(1, 23))

# 获取组学暴露数据文件的名称
(MRname,) = glob_wildcards("../dataset/组学暴露数据/{file}.rds")

# 获取 SMR 数据文件的名称
GTExname = glob_wildcards("../dataset/SMR/{file}.besd").file

# 获取 GWAS 数据文件的名称
GWASfilename = glob_wildcards("../../SMR/input/{file}").file

# 定义 all 规则,用于指定整个流程的最终输出文件
rule all:
    input:
        expand("result/GTEx的{GTEx}之{file}.smr", GTEx=GTExname, file=GWASfilename),
        #expand("result/MR的{file}之{MR}.csv", MR=MRname, file=GWASfilename),
        expand("result/{file}.gsa.out.txt",file=GWASfilename),
        #expand("result/Gene_disease_association/{file}.fusion_twas.txt",file=GWASfilename),  #TWAS 若全部49个组织非常慢10小时
        

# 定义 trans 规则,用于将输入文件转换为输出文件
rule trans:   #OK
    input:
        # 输入文件路径
        "../../SMR/input/{file}"
    output:
        # 输出文件路径
        "tmp/{file}.ma",
        "tmp/{file}.sumstats.gz",
        "tmp/{file}.mendelR.txt"
    # 规则执行时使用的线程数
    threads: 6
    shell:
        # 调用 R 脚本进行文件转换
        "r -f tools/trans.R --args {wildcards.file}"    

rule run_GTEx:  #OK
    input:
        "tmp/{file}.ma",
    output:
        "result/GTEx的{GTEx}之{file}.smr"
    threads: 5
    shell:
        "tools\\smr.exe --gwas-summary  {input}  --out  result/GTEx的{wildcards.GTEx}之{wildcards.file}  --bfile ../dataset/EUR --beqtl-summary ../dataset/SMR/{wildcards.GTEx} --maf 0.01 --thread-num 18 --diff-freq-prop 1.000000"

rule run_MAGMA:  #OK
    input:
        "tmp/{file}.ma",
    output:
        "result/{file}.gsa.out.txt",
    shell:
        "r -f tools/run_MAGMA.R --args {wildcards.file}"
        
rule run_MR:  #OK
    input:
        "tmp/{file}.ma",
    output:
        "result/MR的{file}之{MR}.csv",
    threads: 2
    shell:
        "r -f tools/run_MR.R --args {wildcards.file} {wildcards.MR}"