NextFlow用法3--案例分享

作者: 京古 | 来源:发表于2019-06-03 18:03 被阅读0次

案例一:

/*
 * Default pipeline parameters. They can be overriden on the command line eg.
 * given `params.foo` specify on the run command line `--foo some_value`.
 */

params.reads = "$baseDir/data/ggal/*_{1,2}.fq"
params.transcriptome = "$baseDir/data/ggal/ggal_1_48850000_49020000.Ggal71.500bpflank.fa"
params.outdir = "results"
params.multiqc = "$baseDir/multiqc"

log.info """\
 R N A S E Q - N F   P I P E L I N E
 ===================================
 transcriptome: ${params.transcriptome}
 reads        : ${params.reads}
 outdir       : ${params.outdir}
 """


transcriptome_file = file(params.transcriptome)  /* 引入文件的方法,file()的括号内是文件的绝对路径,也可以使用 *? 通配符,如 infile = file("/datapath/*fq.gz"),则可以引入多个样本。 */
multiqc_file = file(params.multiqc)  /* file()方法可以引入文件和目录*/


Channel   /* 设置channel,以fromFilePairs()的方式将文件引入到channel中,则会生成一个list:[samplename,['samplename.R1.fq.gz','samplename.R2.fq.gz']],直接用下标引用。 */
    .fromFilePairs( params.reads )
    .ifEmpty { error "Cannot find any reads matching: ${params.reads}" }
    .into { read_pairs_ch; read_pairs2_ch }


process index {
    tag "$transcriptome.simpleName"

    input:
    file transcriptome from transcriptome_file

    output:
    file 'index' into index_ch

    script:
    """
    salmon index --threads $task.cpus -t $transcriptome -i index
    """
}


process quant {
    tag "$pair_id" /* 指令声明模块含有cpu/echo/time/tag/penv/label等众多指令,这些指令设置的值将影响当前流程的执行。指令必须在最前面。tag指令允许您将每个流程执行与自定义标签关联起来,以便更容易地在日志文件或跟踪执行报告中标识它们。*/

    input:
    file index from index_ch
    set pair_id, file(reads) from read_pairs_ch /* 引入channel的内容时,可以把内容分为 val/env/file/stdin等几种,使用set可以引入这几种混合的属性内容。 */
                                                /* 这里从read_pairs_ch通道中引入了2种值,分别是pair_id和file(reads) */
    output:
    file(pair_id) into quant_ch

    script:
    """                                         /* reads 明显是一个list,里面分别是R1和R2 */
    salmon quant --threads $task.cpus --libType=U -i $index -1 ${reads[0]} -2 ${reads[1]} -o $pair_id
    """
}

process fastqc {
    tag "FASTQC on $sample_id"
    publishDir params.outdir                   

    input:
    set sample_id, file(reads) from read_pairs2_ch

    output:
    file("fastqc_${sample_id}_logs") into fastqc_ch


    script:
    """
    mkdir fastqc_${sample_id}_logs
    fastqc -o fastqc_${sample_id}_logs -f fastq -q ${reads}
    """
}


process multiqc {
    publishDir params.outdir, mode:'copy'  /* 把生成的结果输出到指定目录中,而不是在nextflow的work目录中,mode是执行模式,可以是copy/link等 */

    input:
    file('*') from quant_ch.mix(fastqc_ch).collect() /* collect()收集channel中的所有值,并返回一个list */
    file(config) from multiqc_file

    output:
    file('multiqc_report.html')

    script:
    """
    cp $config/* .    /*可知input中的file()引入的config是一个路径 */
    echo "custom_logo: \$PWD/logo.png" >> multiqc_config.yaml
    multiqc .
    """
}

workflow.onComplete {
    log.info ( workflow.success ? "\nDone! Open the following report in your browser --> $params.outdir/multiqc_report.html\n" : "Oops .. something went wrong" )
}

相关文章

网友评论

    本文标题:NextFlow用法3--案例分享

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