美文网首页小教程收藏APP开发
初识Nextflow (系列之一)

初识Nextflow (系列之一)

作者: 生信石头 | 来源:发表于2018-11-02 17:19 被阅读663次

    写在前面

    每个人的时间都是有限的。
    昨夜反思,当我发现博士生活已经过了一年半,而我也需要耗费一定量的时间在实验上的时候,我开始有顾虑。我认知中的

    成长是需要时间的,浮沙筑高楼是不可能持久的。

    这类观点,与现实格格不入。
    我也突然发现,我所认为的打好基础的生信学习方式,只适合我自己。
    所以我选择放弃一些想做的事情,切换模式开展。希望这会是一个能够在短时间内极大提升整体工作效率的方式。

    我开始发现,很多不错的东西,我会推荐给少数的师弟师妹,而其中有极少数在最后用起来,也用的很好,包括python,docker和Nextflow。但是事实上,我都是在推荐给他们后一两年才开始真正地使用这些工具。主要原因是,我认为这些必然是好东西,他们必火,但是我没有时间也不想改变

    不愿意改变的,自然是会被淘汰的。正如我现在的窘境。你不应该其期望有人能够跟你一样,有充足的时间,精力和机遇,冲进去,杀出来。所以,你应该造一门大炮,然后来者,只需要点火就可以完成你所不能完成事情。

    回到主题

    NextFlow,知道的人知道,不知道的人或许以后会知道。我终于还是要用起来。毕竟从流程搭建上,我个人的直观感受比make,snakmake都会更优秀。

    NextFlow 调试 与 使用

    环境需要

    Linux Mac等,如果是windows,那么可能推荐从虚拟机

    软件配置

    1. 确保java1.7 及以上的版本
      java -version
    2. 下载
    curl -s https://get.nextflow.io | bash 
    

    下载完成之后,会在当前目录生成一个nextflow可执行文件,文件可移动到 环境变量可访问的目录。事实上,这是一个明显的过程,下载一个bash文件,并执行他

    1. 运行示例
    ./nextflow run hello
    

    对docker有所了解的朋友,应是马上get到。即下载并运行他。

    实践操作

    从本地创建的流程并运行
    vim tutorial.nf
    

    文件中输入以下内容

    #!/usr/bin/env nextflow
    
    params.str = 'Hello world!'
    
    process splitLetters {
    
        output:
        file 'chunk_*' into letters mode flatten
    
        """
        printf '${params.str}' | split -b 6 - chunk_
        """
    }
    
    
    process convertToUpper {
    
        input:
        file x from letters
    
        output:
        stdout result
    
        """
        cat $x | tr '[a-z]' '[A-Z]'
        """
    }
    
    result.subscribe {
        println it.trim()
    }
    

    运行

    nextflow run tutorial.nf
    

    定义了两个步骤,一个步骤串一个步骤,其中splitLetters运行了一次,将字符串分隔并输出到两个文件,而convertToUpper运行了两次,而且还是并行运行的
    注意,在当前文件夹下会产生work文件夹,这个文件夹,记录了已经运行完成的步骤。当.nf脚本某个部分发生改变,而这个改变不影响该步骤时,该步骤会直接使用之前的结果(可能极大地提升时间)。

    修改流程并查看使用缓存的已运行步骤

    修改.nf文件中的convertToUpper的处理函数为rev $x,即

    process convertToUpper {
    
        input:
        file x from letters
    
        output:
        stdout result
    
        """
        rev $x
        """
    }
    

    重新运行时,如果加上-resume参数,那么就可以使用缓存

    nextflow run tutorial.nf -resume
    

    当然,如果没加-resume,那么就会不使用缓存

    使用命令行参数

    上述.nf脚本中的params.str 事实上是设置默认参数。这个参数可以通过命令行直接给予,如

    nextflow run tutorial.nf --str 'Hola mundo'
    

    相关文章

      网友评论

        本文标题:初识Nextflow (系列之一)

        本文链接:https://www.haomeiwen.com/subject/qgqcxqtx.html