name: bd_rhapsody_sequence_analysis
namespace: bd_rhapsody
description: |
  BD Rhapsody Sequence Analysis CWL pipeline v2.2.

  This pipeline performs analysis of single-cell multiomic sequence read (FASTQ) data. The supported
  sequencing libraries are those generated by the BD Rhapsody™ assay kits, including: Whole Transcriptome
  mRNA (WTA), Targeted mRNA, AbSeq Antibody-Oligonucleotides (ABC), Single-Cell Multiplexing (SMK),
  TCR/BCR (VDJ), and ATAC-Seq.
keywords: [rna-seq, single-cell, multiomic, atac-seq, targeted, abseq, tcr, bcr]
links:
  repository: https://bitbucket.org/CRSwDev/cwl/src/master/v2.2.1
  documentation: https://bd-rhapsody-bioinfo-docs.genomics.bd.com
license: Unknown
authors:
  - __merge__: /src/_authors/robrecht_cannoodt.yaml
    roles: [ author, maintainer ]
  - __merge__: /src/_authors/weiwei_schultz.yaml
    roles: [ contributor ]

argument_groups:
  - name: Inputs
    arguments:
      - name: "--reads"
        type: file
        description: |
          Reads (optional) - Path to your FASTQ.GZ formatted read files from libraries that may include:
          
          - WTA mRNA
          - Targeted mRNA
          - AbSeq
          - Sample Multiplexing
          - VDJ
          
          You may specify as many R1/R2 read pairs as you want.
        required: false
        multiple: true
        example:
          - WTALibrary_S1_L001_R1_001.fastq.gz
          - WTALibrary_S1_L001_R2_001.fastq.gz
        info:
          config_key: Reads
      - name: "--reads_atac"
        type: file
        description: |
          Path to your FASTQ.GZ formatted read files from ATAC-Seq libraries.
          You may specify as many R1/R2/I2 files as you want.
        required: false
        multiple: true
        example:
          - ATACLibrary_S2_L001_R1_001.fastq.gz
          - ATACLibrary_S2_L001_R2_001.fastq.gz
          - ATACLibrary_S2_L001_I2_001.fastq.gz
        info:
          config_key: Reads_ATAC
  - name: References
    description: |
      Assay type will be inferred from the provided reference(s).
      Do not provide both reference_archive and targeted_reference at the same time.
      
      Valid reference input combinations:
        - reference_archive: WTA only
        - reference_archive & abseq_reference: WTA + AbSeq
        - reference_archive & supplemental_reference: WTA + extra transgenes
        - reference_archive & abseq_reference & supplemental_reference: WTA + AbSeq + extra transgenes
        - reference_archive: WTA + ATAC or ATAC only
        - reference_archive & supplemental_reference: WTA + ATAC + extra transgenes
        - targeted_reference: Targeted only
        - targeted_reference & abseq_reference: Targeted + AbSeq
        - abseq_reference: AbSeq only

      The reference_archive can be generated with the bd_rhapsody_make_reference component.
      Alternatively, BD also provides standard references which can be downloaded from these locations:

        - Human: https://bd-rhapsody-public.s3.amazonaws.com/Rhapsody-WTA/Pipeline-version2.x_WTA_references/RhapRef_Human_WTA_2023-02.tar.gz
        - Mouse: https://bd-rhapsody-public.s3.amazonaws.com/Rhapsody-WTA/Pipeline-version2.x_WTA_references/RhapRef_Mouse_WTA_2023-02.tar.gz
    arguments:
      - name: "--reference_archive"
        type: file
        description: |
          Path to Rhapsody WTA Reference in the tar.gz format.

          Structure of the reference archive:
          
          - `BD_Rhapsody_Reference_Files/`: top level folder
            - `star_index/`: sub-folder containing STAR index, that is files created with `STAR --runMode genomeGenerate`
            - GTF for gene-transcript-annotation e.g. "gencode.v43.primary_assembly.annotation.gtf"
        example: "RhapRef_Human_WTA_2023-02.tar.gz"
        required: false
        info:
          config_key: Reference_Archive
      - name: "--targeted_reference"
        type: file
        description: |
          Path to the targeted reference file in FASTA format.
        example: "BD_Rhapsody_Immune_Response_Panel_Hs.fasta"
        multiple: true
        info:
          config_key: Targeted_Reference
      - name: "--abseq_reference"
        type: file
        description: Path to the AbSeq reference file in FASTA format.  Only needed if BD AbSeq Ab-Oligos are used.
        example: "AbSeq_reference.fasta"
        multiple: true
        info:
          config_key: AbSeq_Reference
      - name: "--supplemental_reference"
        type: file
        alternatives: [-s]
        description: Path to the supplemental reference file in FASTA format.  Only needed if there are additional transgene sequences to be aligned against in a WTA assay experiment.
        example: "supplemental_reference.fasta"
        multiple: true
        info:
          config_key: Supplemental_Reference
  - name: Outputs
    description: Outputs for all pipeline runs
    # based on https://bd-rhapsody-bioinfo-docs.genomics.bd.com/outputs/top_outputs.html
    arguments:
      - name: "--output_dir"
        type: file
        direction: output
        alternatives: [-o]
        description: "The unprocessed output directory containing all the outputs from the pipeline."
        required: true
        example: output_dir/
      - name: "--output_seurat"
        type: file
        direction: output
        description: "Single-cell analysis tool inputs. Seurat (.rds) input file containing RSEC molecules data table and all cell annotation metadata."
        example: output_seurat.rds
        required: false
        info:
          template: "[sample_name]_Seurat.rds"
      - name: "--output_mudata"
        type: file
        direction: output
        description: "Single-cell analysis tool inputs. Scanpy / Muon input file containing RSEC molecules data table and all cell annotation metadata."
        example: output_mudata.h5mu
        required: false
        info:
          template: "[sample_name].h5mu"
      - name: "--metrics_summary"
        type: file
        direction: output
        description: "Metrics Summary. Report containing sequencing, molecules, and cell metrics."
        example: metrics_summary.csv
        required: false
        info:
          template: "[sample_name]_Metrics_Summary.csv"
      - name: "--pipeline_report"
        type: file
        direction: output
        description: "Pipeline Report. Summary report containing the results from the sequencing analysis pipeline run."
        example: pipeline_report.html
        required: false
        info:
          template: "[sample_name]_Pipeline_Report.html"
      - name: "--rsec_mols_per_cell"
        type: file
        direction: output
        description: "Molecules per bioproduct per cell bassed on RSEC"
        example: RSEC_MolsPerCell_MEX.zip 
        required: false
        info:
          template: "[sample_name]_RSEC_MolsPerCell_MEX.zip"
      - name: "--dbec_mols_per_cell"
        type: file
        direction: output
        description: "Molecules per bioproduct per cell bassed on DBEC. DBEC data table is only output if the experiment includes targeted mRNA or AbSeq bioproducts."
        example: DBEC_MolsPerCell_MEX.zip 
        required: false
        info:
          template: "[sample_name]_DBEC_MolsPerCell_MEX.zip"
      - name: "--rsec_mols_per_cell_unfiltered"
        type: file
        direction: output
        description: "Unfiltered tables containing all cell labels with ≥10 reads."
        example: RSEC_MolsPerCell_Unfiltered_MEX.zip 
        required: false
        info:
          template: "[sample_name]_RSEC_MolsPerCell_Unfiltered_MEX.zip"
      - name: "--bam"
        type: file
        direction: output
        description: "Alignment file of R2 with associated R1 annotations for Bioproduct."
        example: BioProduct.bam
        required: false
        info:
          template: "[sample_name]_Bioproduct.bam"
      - name: "--bam_index"
        type: file
        direction: output
        description: "Index file for the alignment file."
        example: BioProduct.bam.bai
        required: false
        info:
          template: "[sample_name]_Bioproduct.bam.bai"
      - name: "--bioproduct_stats"
        type: file
        direction: output
        description: "Bioproduct Stats. Metrics from RSEC and DBEC Unique Molecular Identifier adjustment algorithms on a per-bioproduct basis."
        example: Bioproduct_Stats.csv
        required: false
        info:
          template: "[sample_name]_Bioproduct_Stats.csv"
      - name: "--dimred_tsne"
        type: file
        direction: output
        description: "t-SNE dimensionality reduction coordinates per cell index"
        example: tSNE_coordinates.csv
        required: false
        info:
          template: "[sample_name]_(assay)_tSNE_coordinates.csv"
      - name: "--dimred_umap"
        type: file
        direction: output
        description: "UMAP dimensionality reduction coordinates per cell index"
        example: UMAP_coordinates.csv
        required: false
        info:
          template: "[sample_name]_(assay)_UMAP_coordinates.csv"
      - name: "--immune_cell_classification"
        type: file
        direction: output
        description: "Immune Cell Classification. Cell type classification based on the expression of immune cell markers."
        example: Immune_Cell_Classification.csv
        required: false
        info:
          template: "[sample_name]_(assay)_cell_type_experimental.csv"
  - name: Multiplex outputs
    description: Outputs when multiplex option is selected
    arguments:
      - name: "--sample_tag_metrics"
        type: file
        direction: output
        description: "Sample Tag Metrics. Metrics from the sample determination algorithm."
        example: Sample_Tag_Metrics.csv
        required: false
        info:
          template: "[sample_name]_Sample_Tag_Metrics.csv"
      - name: "--sample_tag_calls"
        type: file
        direction: output
        description: "Sample Tag Calls. Assigned Sample Tag for each putative cell"
        example: Sample_Tag_Calls.csv
        required: false
        info:
          template: "[sample_name]_Sample_Tag_Calls.csv"
      - name: "--sample_tag_counts"
        type: file
        direction: output
        description: "Sample Tag Counts. Separate data tables and metric summary for cells assigned to each sample tag. Note: For putative cells that could not be assigned a specific Sample Tag, a Multiplet_and_Undetermined.zip file is also output."
        example: Sample_Tag1.zip
        required: false
        multiple: true
        info:
          template: "[sample_name]_Sample_Tag[number].zip"
      - name: "--sample_tag_counts_unassigned"
        type: file
        direction: output
        description: "Sample Tag Counts Unassigned. Data table and metric summary for cells that could not be assigned a specific Sample Tag."
        example: Multiplet_and_Undetermined.zip
        required: false
        info:
          template: "[sample_name]_Multiplet_and_Undetermined.zip"
  - name: VDJ Outputs
    description: Outputs when VDJ option selected
    arguments:
      - name: "--vdj_metrics"
        type: file
        direction: output
        description: "VDJ Metrics. Overall metrics from the VDJ analysis."
        example: VDJ_Metrics.csv
        required: false
        info:
          template: "[sample_name]_VDJ_Metrics.csv"
      - name: "--vdj_per_cell"
        type: file
        direction: output
        description: "VDJ Per Cell. Cell specific read and molecule counts, VDJ gene segments, CDR3 sequences, paired chains, and cell type."
        example: VDJ_perCell.csv
        required: false
        info:
          template: "[sample_name]_VDJ_perCell.csv"
      - name: "--vdj_per_cell_uncorrected"
        type: file
        direction: output
        description: "VDJ Per Cell Uncorrected. Cell specific read and molecule counts, VDJ gene segments, CDR3 sequences, paired chains, and cell type."
        example: VDJ_perCell_uncorrected.csv
        required: false
        info:
          template: "[sample_name]_VDJ_perCell_uncorrected.csv"
      - name: "--vdj_dominant_contigs"
        type: file
        direction: output
        description: "VDJ Dominant Contigs. Dominant contig for each cell label chain type combination (putative cells only)."
        example: VDJ_Dominant_Contigs_AIRR.csv
        required: false
        info:
          template: "[sample_name]_VDJ_Dominant_Contigs_AIRR.csv"
      - name: "--vdj_unfiltered_contigs"
        type: file
        direction: output
        description: "VDJ Unfiltered Contigs. All contigs that were assembled and annotated successfully (all cells)."
        example: VDJ_Unfiltered_Contigs_AIRR.csv
        required: false
        info:
          template: "[sample_name]_VDJ_Unfiltered_Contigs_AIRR.csv"
  - name: "ATAC-Seq outputs"
    description: Outputs when ATAC-Seq option selected
    arguments:
      - name: "--atac_metrics"
        type: file
        direction: output
        description: "ATAC Metrics. Overall metrics from the ATAC-Seq analysis."
        example: ATAC_Metrics.csv
        required: false
        info:
          template: "[sample_name]_ATAC_Metrics.csv"
      - name: "--atac_metrics_json"
        type: file
        direction: output
        description: "ATAC Metrics JSON. Overall metrics from the ATAC-Seq analysis in JSON format."
        example: ATAC_Metrics.json
        required: false
        info:
          template: "[sample_name]_ATAC_Metrics.json"
      - name: "--atac_fragments"
        type: file
        direction: output
        description: "ATAC Fragments. Chromosomal location, cell index, and read support for each fragment detected"
        example: ATAC_Fragments.bed.gz
        required: false
        info:
          template: "[sample_name]_ATAC_Fragments.bed.gz"
      - name: "--atac_fragments_index"
        type: file
        direction: output
        description: "Index of ATAC Fragments."
        example: ATAC_Fragments.bed.gz.tbi
        required: false
        info:
          template: "[sample_name]_ATAC_Fragments.bed.gz.tbi"
      - name: "--atac_transposase_sites"
        type: file
        direction: output
        description: "ATAC Transposase Sites. Chromosomal location, cell index, and read support for each transposase site detected"
        example: ATAC_Transposase_Sites.bed.gz
        required: false
        info:
          template: "[sample_name]_ATAC_Transposase_Sites.bed.gz"
      - name: "--atac_transposase_sites_index"
        type: file
        direction: output
        description: "Index of ATAC Transposase Sites."
        example: ATAC_Transposase_Sites.bed.gz.tbi
        required: false
        info:
          template: "[sample_name]_ATAC_Transposase_Sites.bed.gz.tbi"
      - name: "--atac_peaks"
        type: file
        direction: output
        description: "ATAC Peaks. Peak regions of transposase activity"
        example: ATAC_Peaks.bed.gz
        required: false
        info:
          template: "[sample_name]_ATAC_Peaks.bed.gz"
      - name: "--atac_peaks_index"
        type: file
        direction: output
        description: "Index of ATAC Peaks."
        example: ATAC_Peaks.bed.gz.tbi
        required: false
        info:
          template: "[sample_name]_ATAC_Peaks.bed.gz.tbi"
      - name: "--atac_peak_annotation"
        type: file
        direction: output
        description: "ATAC Peak Annotation. Estimated annotation of peak-to-gene connections"
        example: peak_annotation.tsv.gz
        required: false
        info:
          template: "[sample_name]_peak_annotation.tsv.gz"
      - name: "--atac_cell_by_peak"
        type: file
        direction: output
        description: "ATAC Cell by Peak. Peak regions of transposase activity per cell"
        example: ATAC_Cell_by_Peak_MEX.zip
        required: false
        info:
          template: "[sample_name]_ATAC_Cell_by_Peak_MEX.zip"
      - name: "--atac_cell_by_peak_unfiltered"
        type: file
        direction: output
        description: "ATAC Cell by Peak Unfiltered. Unfiltered file containing all cell labels with >=1 transposase sites in peaks."
        example: ATAC_Cell_by_Peak_Unfiltered_MEX.zip
        required: false
        info:
          template: "[sample_name]_ATAC_Cell_by_Peak_Unfiltered_MEX.zip"
      - name: "--atac_bam"
        type: file
        direction: output
        description: "ATAC BAM. Alignment file for R1 and R2 with associated I2 annotations for ATAC-Seq. Only output if the BAM generation flag is set to true."
        example: ATAC.bam
        required: false
        info:
          template: "[sample_name]_ATAC.bam"
      - name: "--atac_bam_index"
        type: file
        direction: output
        description: "Index of ATAC BAM."
        example: ATAC.bam.bai
        required: false
        info:
          template: "[sample_name]_ATAC.bam.bai"
  - name: AbSeq Cell Calling outputs
    description: Outputs when Cell Calling Abseq is selected
    arguments:
      - name: "--protein_aggregates_experimental"
        type: file
        direction: output
        description: "Protein Aggregates Experimental"
        example: Protein_Aggregates_Experimental.csv
        required: false
        info:
          template: "[sample_name]_Protein_Aggregates_Experimental.csv"
  - name: Putative Cell Calling Settings
    arguments:
      - name: "--cell_calling_data"
        type: string
        description: |
          Specify the dataset to be used for putative cell calling: mRNA, AbSeq, ATAC, mRNA_and_ATAC
          
          For putative cell calling using an AbSeq dataset, please provide an AbSeq_Reference fasta file above.
          
          For putative cell calling using an ATAC dataset, please provide a WTA+ATAC-Seq Reference_Archive file above.
          
          The default data for putative cell calling, will be determined the following way:
          
          - If mRNA Reads and ATAC Reads exist: mRNA_and_ATAC
          - If only ATAC Reads exist: ATAC
          - Otherwise: mRNA
        choices: [mRNA, AbSeq, ATAC, mRNA_and_ATAC]
        example: mRNA
        info:
          config_key: Cell_Calling_Data
      - name: "--cell_calling_bioproduct_algorithm"
        type: string
        description: |
          Specify the bioproduct algorithm to be used for putative cell calling: Basic or Refined
          
          By default, the Basic algorithm will be used for putative cell calling.
        choices: [Basic, Refined]
        example: Basic
        info:
          config_key: Cell_Calling_Bioproduct_Algorithm
      - name: "--cell_calling_atac_algorithm"
        type: string
        description: |
          Specify the ATAC-seq algorithm to be used for putative cell calling: Basic or Refined
          
          By default, the Basic algorithm will be used for putative cell calling.
        choices: [Basic, Refined]
        example: Basic
        info:
          config_key: Cell_Calling_ATAC_Algorithm
      - name: "--exact_cell_count"
        type: integer
        description: |
          Set a specific number (>=1) of cells as putative, based on those with the highest error-corrected read count
        example: 10000
        min: 1
        info:
          config_key: Exact_Cell_Count
      - name: "--expected_cell_count"
        type: integer
        description: |
          Guide the basic putative cell calling algorithm by providing an estimate of the number of cells expected.  Usually this can be the number of cells loaded into the Rhapsody cartridge.  If there are multiple inflection points on the second derivative cumulative curve, this will ensure the one selected is near the expected. 
        example: 20000
        min: 1
        info:
          config_key: Expected_Cell_Count
  - name: Intronic Reads Settings
    arguments:
      - name: --exclude_intronic_reads
        type: boolean
        description: |
          By default, the flag is false, and reads aligned to exons and introns are considered and represented in molecule counts. When the flag is set to true, intronic reads will be excluded.
          The value can be true or false.
        example: false
        info:
          config_key: Exclude_Intronic_Reads
  - name: Multiplex Settings
    arguments:
      - name: "--sample_tags_version"
        type: string
        description: |
          Specify the version of the Sample Tags used in the run:

          * If Sample Tag Multiplexing was done, specify the appropriate version: human, mouse, flex, nuclei_includes_mrna, nuclei_atac_only
          * If this is an SMK + Nuclei mRNA run or an SMK + Multiomic ATAC-Seq (WTA+ATAC-Seq) run (and not an SMK + ATAC-Seq only run), choose the "nuclei_includes_mrna" option.
          * If this is an SMK + ATAC-Seq only run (and not SMK + Multiomic ATAC-Seq (WTA+ATAC-Seq)), choose the "nuclei_atac_only" option.
        choices: [human, mouse, flex, nuclei_includes_mrna, nuclei_atac_only]
        example: human
        info:
          config_key: Sample_Tags_Version
      - name: "--tag_names"
        type: string
        description: |
          Specify the tag number followed by '-' and the desired sample name to appear in Sample_Tag_Metrics.csv
          Do not use the special characters: &, (), [], {},  <>, ?, |
        multiple: true
        example: [4-mySample, 9-myOtherSample, 6-alsoThisSample]
        info:
          config_key: Tag_Names
  - name: VDJ arguments
    arguments:
      - name: "--vdj_version"
        type: string
        description: |
          If VDJ was done, specify the appropriate option: human, mouse, humanBCR, humanTCR, mouseBCR, mouseTCR
        choices: [human, mouse, humanBCR, humanTCR, mouseBCR, mouseTCR]
        example: human
        info:
          config_key: VDJ_Version
  - name: ATAC options
    arguments:
      - name: "--predefined_atac_peaks"
        type: file
        description: An optional BED file containing pre-established chromatin accessibility peak regions for generating the ATAC cell-by-peak matrix.
        example: predefined_peaks.bed
        info:
          config_key: Predefined_ATAC_Peaks
  - name: Additional options
    arguments:
      - name: "--run_name"
        type: string
        description: |
          Specify a run name to use as the output file base name. Use only letters, numbers, or hyphens. Do not use special characters or spaces.
        default: sample
        info:
          config_key: Run_Name
      - name: "--generate_bam"
        type: boolean
        description: |
          Specify whether to create the BAM file output
        default: false
        info:
          config_key: Generate_Bam
      - name: "--long_reads"
        type: boolean
        description: |
          Use STARlong (default: undefined - i.e. autodetects based on read lengths) - Specify if the STARlong aligner should be used instead of STAR. Set to true if the reads are longer than 650bp.
        info:
          config_key: Long_Reads
  - name: Advanced options
    description: |
      NOTE: Only change these if you are really sure about what you are doing
    arguments:
      - name: "--custom_star_params"
        type: string
        description: |
          Modify STAR alignment parameters - Set this parameter to fully override default STAR mapping parameters used in the pipeline.
          For reference this is the default that is used:

            Short Reads: `--outFilterScoreMinOverLread 0 --outFilterMatchNminOverLread 0 --outFilterMultimapScoreRange 0 --clip3pAdapterSeq AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --seedSearchStartLmax 50 --outFilterMatchNmin 25 --limitOutSJcollapsed 2000000`
            Long Reads: Same as Short Reads + `--seedPerReadNmax 10000`

          This applies to fastqs provided in the Reads user input 
          Do NOT set any non-mapping related params like `--genomeDir`, `--outSAMtype`, `--outSAMunmapped`, `--readFilesIn`, `--runThreadN`, etc.
          We use STAR version 2.7.10b
        example: "--alignIntronMax 6000 --outFilterScoreMinOverLread 0.1 --limitOutSJcollapsed 2000000"
        info:
          config_key: Custom_STAR_Params
      - name: "--custom_bwa_mem2_params"
        type: string
        description: |
          Modify bwa-mem2 alignment parameters - Set this parameter to fully override bwa-mem2 mapping parameters used in the pipeline
          The pipeline does not specify any custom mapping params to bwa-mem2 so program default values are used
          This applies to fastqs provided in the Reads_ATAC user input 
          Do NOT set any non-mapping related params like `-C`, `-t`, etc.
          We use bwa-mem2 version 2.2.1
        example: "-k 16 -w 200 -r"
        info:
          config_key: Custom_bwa_mem2_Params
  - name: CWL-runner arguments
    arguments:
      - name: "--parallel"
        type: boolean
        description: "Run jobs in parallel."
        default: true
      - name: "--timestamps"
        type: boolean_true
        description: "Add timestamps to the errors, warnings, and notifications."
  - name: Undocumented arguments
    arguments:
      - name: --abseq_umi
        type: integer
        multiple: false
        info:
          config_key: AbSeq_UMI
      - name: --target_analysis
        type: boolean
        multiple: false
        info:
          config_key: Target_analysis
      - name: --vdj_jgene_evalue
        type: double
        description: |
          e-value threshold for J gene. The e-value threshold for J gene call by IgBlast/PyIR, default is set as 0.001
        multiple: false
        info:
          config_key: VDJ_JGene_Evalue
      - name: --vdj_vgene_evalue
        type: double
        description: |
          e-value threshold for V gene. The e-value threshold for V gene call by IgBlast/PyIR, default is set as 0.001
        multiple: false
        info:
          config_key: VDJ_VGene_Evalue
      - name: --write_filtered_reads
        type: boolean
        multiple: false
        info:
          config_key: Write_Filtered_Reads
resources:
  - type: python_script
    path: script.py
test_resources:
  - type: python_script
    path: test.py
  - path: ../test_data
  - path: ../helpers

requirements:
  commands: [ "cwl-runner" ]

engines:
  - type: docker
    image: bdgenomics/rhapsody:2.2.1
    setup:
      - type: apt
        packages: [procps, git]
      - type: python
        packages: [cwlref-runner, cwl-runner]
      - type: docker
        run: |
          mkdir /var/bd_rhapsody_cwl && \
            cd /var/bd_rhapsody_cwl && \
            git clone https://bitbucket.org/CRSwDev/cwl.git . && \
            git checkout 8feeace1141b24749ea6003f8e6ad6d3ad5232de
      - type: docker
        run:
          - VERSION=$(ls -v /var/bd_rhapsody_cwl | grep '^v' | sed 's#v##' | tail -1)
          - 'echo "bdgenomics/rhapsody: \"$VERSION\"" > /var/software_versions.txt'
    test_setup:
      - type: python
        packages: [biopython, gffutils]
runners:
  - type: executable
  - type: nextflow
