【问题标题】:How to download a list of `FastQ` files in `Nextflow` using `fromSRA` function?如何使用`fromSRA`功能在`Nextflow`中下载`FastQ`文件列表?
【发布时间】:2021-11-02 10:09:09
【问题描述】:

我有一个包含不同列的tsv 文件。我感兴趣的专栏之一是run_accession 专栏。它包含各种基因组数据样本的登录 ID。我想在Nextflow 中编写一个管道,它使用以下命令从该文件中读取加入 ID:

cut -f4 datalist.tsv | sed -n 2,11p

输出:

ERR2512385  
ERR2512386  
ERR2512387  
ERR2512388  
ERR2512389  
ERR2512390  
ERR2512391  
ERR2512392  
ERR2512393  
ERR2512394

并将这个 ID 列表输入Channel.fromSRA 方法。到目前为止,我已经尝试过:

#!/home/someuser/bin nextflow

nextflow.enable.dsl=2

params.datalist = "$baseDir/datalist.tsv"

process fetchRunAccession {
    input:
    path dlist

    output:
    file accessions

    """
    cut -f4 $dlist | sed -n 2,11p
    """
}

process displayResult {
    input:
    file accessions

    output:
    stdout

    """
    echo "$accessions"
    """
}

workflow {
    accessions_p = fetchRunAccession(params.datalist)
    result = displayResult(accessions_p)
    result.view { it }
}

我得到这个错误:

Error executing process > 'fetchRunAccession'

Caused by:
  Missing output file(s) `accessions` expected by process `fetchRunAccession

如果我只运行第一个进程,它运行良好并按预期打印 10 行。第二个进程只是实际fromSRA 实现的占位符,但我无法将第一个进程的输出用作第二个进程的输入。我对 Nextflow 很陌生,我的代码可能有一些愚蠢的错误。在这件事上我将不胜感激。

【问题讨论】:

    标签: bioinformatics nextflow


    【解决方案1】:

    fromSRA 函数实际上是一个工厂方法。它需要一个项目/研究 ID,或者一个或多个入藏号,这些入藏号必须指定为一个列表。发送登录号的通道(如您的示例代码中)将在这里不起作用。此外,最好避免仅仅为了解析一个小的 CSV 文件而生成一个单独的作业/进程。相反,只需让您的主要 Nextflow 流程执行此操作。有很多方法可以做到这一点,但对于 CSV 输入,我发现使用 Nextflow 的 CsvSplitter 类可以轻松完成:

    import nextflow.splitter.CsvSplitter
    
    nextflow.enable.dsl=2
    
    
    def fetchRunAccessions( tsv ) {
    
        def splitter = new CsvSplitter().options( header:true, sep:'\t' )
        def reader = new BufferedReader( new FileReader( tsv ) )
    
        splitter.parseHeader( reader )
    
        List<String> run_accessions = []
        Map<String,String> row
    
        while( row = splitter.fetchRecord( reader ) ) {
    
           run_accessions.add( row['run_accession'] )
        }
    
        return run_accessions
    }
    
    
    workflow {
    
        accessions = fetchRunAccessions( params.filereport )
    
        Channel
            .fromSRA( accessions )
            .view()
    }
    

    请注意,Nextflow 的 ENA 下载 URL 最近已更新。您需要最新版本的 Nextflow (21.07.0-edge) 才能轻松运行:

    NXF_VER=21.07.0-edge nextflow run test.nf --filereport filereport.tsv
    

    【讨论】:

    • 感谢您的帮助。是的,我花了一段时间才发现我需要使用edge 发布才能使用fromSRA。您说我不需要专门的进程块来读取来自csv 的列也是正确的,再次感谢您指出这一点。您的解决方案正是我想要做的。我不知道我们可以从Java 使用ListMap
    猜你喜欢
    • 2021-10-30
    • 2020-08-14
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多