cwlVersion: v1.0
class: Workflow

label: rna amplicon analysis for fastq files
doc: RNAs - qc, preprocess, annotation, index, abundance

requirements:
    - class: StepInputExpressionRequirement
    - class: InlineJavascriptRequirement
    - class: ScatterFeatureRequirement
    - class: MultipleInputFeatureRequirement
    - class: SubworkflowFeatureRequirement

inputs:
    jobid: string
    sequences: File
    minQual:
        type: int
        default: 15
    maxLqb:
        type: int
        default: 5
    # static DBs
    m5nrBDB: File
    m5rnaFull: File
    m5rnaClust: File
    m5rnaIndex: Directory
    m5rnaPrefix: string

outputs:
    seqStatOut:
        type: File
        outputSource: qcBasic/seqStatFile
    seqBinOut:
        type: File
        outputSource: qcBasic/seqBinFile
    qcStatOut:
        type: File
        outputSource: qcBasic/qcStatFile
    qcSummaryOut:
        type: File
        outputSource: qcBasic/qcSummaryFile
    adapterPassed:
        type: File
        outputSource: preProcess/trimmed
    preProcessPassed:
        type: File
        outputSource: preProcess/passed
    preProcessRemoved:
        type: File
        outputSource: preProcess/removed
    rnaFeatureOut:
        type: File
        outputSource: annotate/rnaFeatureOut
    rnaClustSeqOut:
        type: File
        outputSource: annotate/rnaClustSeqOut
    rnaClustMapOut:
        type: File
        outputSource: annotate/rnaClustMapOut
    rnaSimsOut:
        type: File
        outputSource: annotate/rnaSimsOut
    simSeqOut:
        type: File
        outputSource: indexSimSeq/simSeqOut
    md5ProfileOut:
        type: File
        outputSource: abundance/md5ProfileOut
    lcaProfileOut:
        type: File
        outputSource: abundance/lcaProfileOut
    sourceStatsOut:
        type: File
        outputSource: abundance/sourceStatsOut

steps:
    qcBasic:
        run: ../Workflows/qc-basic.workflow.cwl
        in:
            jobid: jobid
            sequences: sequences
            kmerLength:
                valueFrom: ${ return [6, 15]; }
        out: [seqStatFile, seqBinFile, qcStatFile, qcSummaryFile]
    preProcess:
        run: ../Workflows/preprocess-fastq.workflow.cwl
        in:
            jobid: jobid
            sequences: sequences
            minQual: minQual
            maxLqb: maxLqb
        out: [trimmed, passed, removed]
    annotate:
        run: ../Workflows/rna-annotation.workflow.cwl
        in:
            jobid: jobid
            sequences: preProcess/passed
            m5nrBDB: m5nrBDB
            m5rnaFull: m5rnaFull
            m5rnaClust: m5rnaClust
            m5rnaIndex: m5rnaIndex
            m5rnaPrefix: m5rnaPrefix
        out: [rnaFeatureOut, rnaClustSeqOut, rnaClustMapOut, rnaSimsOut, rnaFilterOut, rnaExpandOut, rnaLCAOut]
    indexSimSeq:
        run: ../Workflows/index_sim_seq.workflow.cwl
        in:
            jobid: jobid
            featureSeqs:
                source: annotate/rnaFeatureOut
                valueFrom: ${ return [self]; }
            filterSims:
                source: annotate/rnaFilterOut
                valueFrom: ${ return [self]; }
            clustMaps:
                source: annotate/rnaClustMapOut
                valueFrom: ${ return [self]; }
        out: [simSeqOut, indexOut]
    abundance:
        run: ../Workflows/abundance.workflow.cwl
        in:
            jobid: jobid
            md5index: indexSimSeq/indexOut
            filterSims:
                source: annotate/rnaFilterOut
                valueFrom: ${ return [self]; }
            expandSims:
                source: annotate/rnaExpandOut
                valueFrom: ${ return [self]; }
            lcaAnns:
                source: annotate/rnaLCAOut
                valueFrom: ${ return [self]; }
            clustMaps:
                source: annotate/rnaClustMapOut
                valueFrom: ${ return [self]; }
        out: [md5ProfileOut, lcaProfileOut, sourceStatsOut]