两个带有不一致名称的变量作为Snakemake规则的输入



如果命名不一致并且它们都在同一文件夹中,我该如何配对Snakemake中规则的输入数据?例如,如果我想使用每对样本作为每个规则的输入:

  • PT1 T5
  • S6 T7
  • S1 T20

在此示例中,我想拥有3对Pt1&T5,S6&T7,S1&T20因此,我想创建3个文件夹:

  • pt1vst5
  • s6vst7
  • S1VST20

,然后对Manta进行分析,并将结果相应地将结果输出到这3个文件夹中。

在以下管道中,我希望种系样品是每条线(PT1,S6,S1(和肿瘤的第一个元素(T5,T5,T7,T20(。

rule all:
 input:
      expand("/{samples_g}vs{samples_t}", samples_g = GERMLINE, samples_t = TUMOR),
      expand("/{samples_g}vs{samples_t}/runWorkflow.py", samples_g = GERMLINE, samples_t = TUMOR),
# Create folders
rule folders:
  output: "./{samples_g}vs{samples_t}"
  shell: "mkdir {output}"
# Manta configuration
rule manta_config:  
  input:
       g = BAMPATH + "/{samples_g}.bam",
       t = BAMPATH + "/{samples_t}.bam"
  output:
       wf = "{samples_g}vs{samples_t}/runWorkflow.py"
  params:
       ref = IND,
       out_dir = "{samples_g}vs{samples_t}/runWorkflow.py"
  shell:
       "python configManta.py --normalBam {input.g} --tumorBam {input.t} --referenceFasta {params.ref} --runDir {params.out_dir} "

我可以通过用作包含对的输入a .txt然后使用循环来做到这一点吗?如果是这样,我该怎么办?否则如何完成?

您可以使用任何适当的Python代码"手动"手动"手动"列表。例如,您可以按以下方式进行以下操作以生成输入列表的第一个:

In [1]: GERMLINE = ("PT1", "S6", "S1")
In [2]: TUMOR = ("T5", "T7", "T20")
In [3]: ["/{}vs{}".format(sample_g, sample_t) for (sample_g, sample_t) in zip(GERMLINE, TUMOR)]
Out[3]: ['/PT1vsT5', '/S6vsT7', '/S1vsT20']

因此,这将应用如下:

rule all:
    input:
        ["/{}vs{}".format(sample_g, sample_t) for (sample_g, sample_t) in zip(GERMLINE, TUMOR)],
        ["/{}vs{}/runWorkflow.py".format(sample_g, sample_t) for (sample_g, sample_t) in zip(GERMLINE, TUMOR)],

(请注意,我将sample_gsample_t放在单数形式中,因为在此上下文中听起来更合乎逻辑,其中这些变量代表单个示例名称,而不是几个示例的列表(

最新更新