snakemake STAR模块问题和其他问题

时间:2018-11-15 09:06:28

标签: snakemake

我发现snakemake STAR module输出为'BAM Unsorted'。

问题1:是否可以将其更改为:

  

-outSAMtype BAM SortedByCoordinate

当我在“额外”选项中添加该选项时,我收到有关重复定义的错误消息:

EXITING: FATAL INPUT ERROR: duplicate parameter "outSAMtype" in input "Command-Line"
SOLUTION: keep only one definition of input parameters in each input source

Nov 15 09:46:07 ...... FATAL ERROR, exiting
logs/star/se/UY2_S7.log (END)

我应该考虑在STAR后面添加排序模块吗?

问题2:如何从包装回购中获取模块并将其设为本地模块,以便我对其进行编辑?

代码:

__author__ = "Johannes Köster"
__copyright__ = "Copyright 2016, Johannes Köster"
__email__ = "koester@jimmy.harvard.edu"
__license__ = "MIT"

import os
from snakemake.shell import shell

extra = snakemake.params.get("extra", "")
log = snakemake.log_fmt_shell(stdout=True, stderr=True)

fq1 = snakemake.input.get("fq1")
assert fq1 is not None, "input-> fq1 is a required input parameter"
fq1 = [snakemake.input.fq1] if isinstance(snakemake.input.fq1, str) else snakemake.input.fq1
fq2 =  snakemake.input.get("fq2")
if fq2:
    fq2 = [snakemake.input.fq2] if isinstance(snakemake.input.fq2, str) else snakemake.input.fq2
    assert len(fq1) == len(fq2), "input-> equal number of files required for fq1 and fq2"
input_str_fq1 = ",".join(fq1)
input_str_fq2 = ",".join(fq2) if fq2 is not None else ""
input_str =  " ".join([input_str_fq1, input_str_fq2])

if fq1[0].endswith(".gz"):
    readcmd = "--readFilesCommand zcat"
else:
    readcmd = ""

outprefix = os.path.dirname(snakemake.output[0]) + "/"

shell(
    "STAR "
    "{extra} "
    "--runThreadN {snakemake.threads} "
    "--genomeDir {snakemake.params.index} "
    "--readFilesIn {input_str} "
    "{readcmd} "
    "--outSAMtype BAM Unsorted "
    "--outFileNamePrefix {outprefix} "
    "--outStd Log "
    "{log}")

1 个答案:

答案 0 :(得分:0)

  

Q1:是否可以将其更改为:

     
    

-outSAMtype BAM SortedByCoordinate

  

我将在包装器之后添加另一个排序规则,因为这是最“标准化”的方式。您还可以使用其他包装器进行排序。

snakemake的作者有一个解释,说明为什么默认未排序以及包装器中没有用于排序输出的选项的原因:

https://bitbucket.org/snakemake/snakemake/issues/440/pre-post-wrapper

  

关于SAM / BAM问题,我想说任何包装程序都应该始终输出最佳文件格式。因此,每当我为读取映射器编写包装器时,就确保输出不是SAM。我认为索引和排序不应属于同一包装器,因为这样的任务在并行化方面具有完全不同的行为。另外,如果在排序或建立索引期间出现问题,您将失去映射输出。


  

Q2:如何从包装回购中获取一个模块并将其设为本地模块,以便我对其进行编辑?

如果要执行此操作,一种方法是下载包装器的本地副本。将下载的包装器Unsorted的外壳部分更改为{snakemake.params.outsamtype}。在您的Snakefile中进行更改(将wrapper更改为scriptpath/to/downloaded/wrapper并添加outsamtype参数):

rule star_se:
    input:
        fq1 = "reads/{sample}_R1.1.fastq"
    output:
        # see STAR manual for additional output files
        "star/{sample}/Aligned.out.bam"
    log:
        "logs/star/{sample}.log"
    params:
        # path to STAR reference genome index
        index="index",
        # optional parameters
        extra="",
        outsamtype = "SortedByCoordinate"
    threads: 8
    script:
        "path/to/downloaded/wrapper"

我认为不带包装的单独规则(甚至用于制作自己的星形规则)会更好。修改包装器会破坏其整个目的。