name: "featurecounts"
version: "v0.2.0"
authors:
- name: "Sai Nirmayi Yasa"
  roles:
  - "author"
  - "maintainer"
  info:
    links:
      email: "nirmayi@data-intuitive.com"
      github: "sainirmayi"
      linkedin: "sai-nirmayi-yasa"
    organizations:
    - name: "Data Intuitive"
      href: "https://www.data-intuitive.com"
      role: "Junior Bioinformatics Researcher"
argument_groups:
- name: "Inputs"
  arguments:
  - type: "file"
    name: "--annotation"
    alternatives:
    - "-a"
    description: "Name of an annotation file. GTF/GFF format by default. See '--format'\
      \ option for more format information.\n"
    info: null
    example:
    - "annotation.gtf"
    must_exist: true
    create_parent: true
    required: true
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "file"
    name: "--input"
    alternatives:
    - "-i"
    description: "A list of SAM or BAM format files separated by semi-colon (;). They\
      \ can be either name or location sorted. Location-sorted paired-end reads are\
      \ automatically sorted by read names.\n"
    info: null
    example:
    - "input_file1.bam"
    must_exist: true
    create_parent: true
    required: true
    direction: "input"
    multiple: true
    multiple_sep: ";"
- name: "Outputs"
  arguments:
  - type: "file"
    name: "--counts"
    alternatives:
    - "-o"
    description: "Name of output file including read counts in tab delimited format.\n"
    info: null
    example:
    - "features.tsv"
    must_exist: true
    create_parent: true
    required: true
    direction: "output"
    multiple: false
    multiple_sep: ";"
  - type: "file"
    name: "--summary"
    description: "Summary statistics of counting results in tab delimited format.\n"
    info: null
    example:
    - "summary.tsv"
    must_exist: true
    create_parent: true
    required: false
    direction: "output"
    multiple: false
    multiple_sep: ";"
  - type: "file"
    name: "--junctions"
    description: "Count number of reads supporting each exon-exon junction. Junctions\
      \ were identified from those exon-spanning reads in the input (containing 'N'\
      \ in CIGAR string).\n"
    info: null
    example:
    - "junctions.txt"
    must_exist: true
    create_parent: true
    required: false
    direction: "output"
    multiple: false
    multiple_sep: ";"
- name: "Annotation"
  arguments:
  - type: "string"
    name: "--format"
    alternatives:
    - "-F"
    description: "Specify format of the provided annotation file. Acceptable formats\
      \ include 'GTF' (or compatible GFF format) and 'SAF'. 'GTF' by default. \n"
    info: null
    example:
    - "GTF"
    required: false
    choices:
    - "GTF"
    - "GFF"
    - "SAF"
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "string"
    name: "--feature_type"
    alternatives:
    - "-t"
    description: "Specify feature type(s) in a GTF annotation. If multiple types are\
      \ provided, they should be separated by ';' with no space in between. 'exon'\
      \ by default. Rows in the annotation with a matched feature will be extracted\
      \ and used for read mapping.\n"
    info: null
    example:
    - "exon"
    required: false
    direction: "input"
    multiple: true
    multiple_sep: ";"
  - type: "string"
    name: "--attribute_type"
    alternatives:
    - "-g"
    description: "Specify attribute type in GTF annotation. 'gene_id' by default.\
      \ Meta-features used for read counting will be extracted from annotation using\
      \ the provided value.\n"
    info: null
    example:
    - "gene_id"
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "string"
    name: "--extra_attributes"
    description: "Extract extra attribute types from the provided GTF annotation and\
      \ include them in the counting output. These attribute types will not be used\
      \ to group features. If more than one attribute type is provided they should\
      \ be separated by semicolon (;).\n"
    info: null
    required: false
    direction: "input"
    multiple: true
    multiple_sep: ";"
  - type: "file"
    name: "--chrom_alias"
    alternatives:
    - "-A"
    description: "Provide a chromosome name alias file to match chr names in annotation\
      \ with those in the reads. This should be a two-column comma-delimited text\
      \ file. Its first column should include chr names in the annotation and its\
      \ second column should include chr names in the reads. Chr names are case sensitive.\
      \ No column header should be included in the file.\n"
    info: null
    example:
    - "chrom_alias.csv"
    must_exist: true
    create_parent: true
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
- name: "Level of summarization"
  arguments:
  - type: "boolean_true"
    name: "--feature_level"
    alternatives:
    - "-f"
    description: "Perform read counting at feature level (eg. counting reads for exons\
      \ rather than genes).\n"
    info: null
    direction: "input"
- name: "Overlap between reads and features"
  arguments:
  - type: "boolean_true"
    name: "--overlapping"
    alternatives:
    - "-O"
    description: "Assign reads to all their overlapping meta-features (or features\
      \ if '--feature_level' is specified).\n"
    info: null
    direction: "input"
  - type: "integer"
    name: "--min_overlap"
    description: "Minimum number of overlapping bases in a read that is required for\
      \ read assignment. 1 by default. Number of overlapping bases is counted from\
      \ both reads if paired end. If a negative value is provided, then a gap of up\
      \ to specified size will be allowed between read and the feature that the read\
      \ is assigned to.\n"
    info: null
    example:
    - 1
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "double"
    name: "--frac_overlap"
    description: "Minimum fraction of overlapping bases in a read that is required\
      \ for read assignment. Value should be within range [0,1]. 0 by default. Number\
      \ of overlapping bases is counted from both reads if paired end. Both this option\
      \ and '--min_overlap' option need to be satisfied for read assignment.\n"
    info: null
    example:
    - 0.0
    required: false
    min: 0.0
    max: 1.0
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "double"
    name: "--frac_overlap_feature"
    description: "Minimum fraction of overlapping bases in a feature that is required\
      \ for read assignment. Value should be within range [0,1]. 0 by default.\n"
    info: null
    example:
    - 0.0
    required: false
    min: 0.0
    max: 1.0
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "boolean_true"
    name: "--largest_overlap"
    description: "Assign reads to a meta-feature/feature that has the largest number\
      \ of overlapping bases.\n"
    info: null
    direction: "input"
  - type: "integer"
    name: "--non_overlap"
    description: "Maximum number of non-overlapping bases in a read (or a read pair)\
      \ that is allowed when being assigned to a feature. No limit is set by default.\n"
    info: null
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "integer"
    name: "--non_overlap_feature"
    description: "Maximum number of non-overlapping bases in a feature that is allowed\
      \ in read assignment. No limit is set by default.\n"
    info: null
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "integer"
    name: "--read_extension5"
    description: "Reads are extended upstream by <int> bases from their 5' end.\n"
    info: null
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "integer"
    name: "--read_extension3"
    description: "Reads are extended upstream by <int> bases from their 3' end.\n"
    info: null
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "integer"
    name: "--read2pos"
    description: "Reduce reads to their 5' most base or 3' most base. Read counting\
      \ is then performed based on the single base the read is reduced to.\n"
    info: null
    required: false
    choices:
    - 3
    - 5
    direction: "input"
    multiple: false
    multiple_sep: ";"
- name: "Multi-mapping reads"
  arguments:
  - type: "boolean_true"
    name: "--multi_mapping"
    alternatives:
    - "-M"
    description: "Multi-mapping reads will also be counted. For a multi-mapping read,\
      \ all its reported alignments will be counted. The 'NH' tag in BAM/SAM input\
      \ is used to detect multi-mapping reads.\n"
    info: null
    direction: "input"
- name: "Fractional counting"
  arguments:
  - type: "boolean_true"
    name: "--fraction"
    description: "Assign fractional counts to features. This option must be used together\
      \ with '--multi_mapping' or '--overlapping' or both. When '--multi_mapping'\
      \ is specified, each reported alignment from a multi-mapping read (identified\
      \ via 'NH' tag) will carry a fractional count of 1/x, instead of 1 (one), where\
      \ x is the total number of alignments reported for the same read. When '--overlapping'\
      \ is specified, each overlapping feature will receive a fractional count of\
      \ 1/y, where y is the total number of features overlapping with the read. When\
      \ both '--multi_mapping' and '--overlapping' are specified, each alignment will\
      \ carry a fractional count of 1/(x*y).\n"
    info: null
    direction: "input"
- name: "Read filtering"
  arguments:
  - type: "integer"
    name: "--min_map_quality"
    alternatives:
    - "-Q"
    description: "The minimum mapping quality score a read must satisfy in order to\
      \ be counted. For paired-end reads, at least one end should satisfy this criteria.\
      \ 0 by default.\n"
    info: null
    example:
    - 0
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "boolean_true"
    name: "--split_only"
    description: "Count split alignments only (ie. alignments with CIGAR string containing\
      \ 'N'). An example of split alignments is exon-spanning reads in RNA-seq data.\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--non_split_only"
    description: "If specified, only non-split alignments (CIGAR strings do not contain\
      \ letter 'N') will be counted. All the other alignments will be ignored.\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--primary"
    description: "Count primary alignments only. Primary alignments are identified\
      \ using bit 0x100 in SAM/BAM FLAG field.\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--ignore_dup"
    description: "Ignore duplicate reads in read counting. Duplicate reads are identified\
      \ using bit Ox400 in BAM/SAM FLAG field. The whole read pair is ignored if one\
      \ of the reads is a duplicate read for paired end data.\n"
    info: null
    direction: "input"
- name: "Strandedness"
  arguments:
  - type: "integer"
    name: "--strand"
    alternatives:
    - "-s"
    description: "Perform strand-specific read counting. A single integer value (applied\
      \ to all input files) should be provided. Possible values include: 0 (unstranded),\
      \ 1 (stranded) and 2 (reversely stranded). Default value is 0 (ie. unstranded\
      \ read counting carried out for all input files).\n"
    info: null
    example:
    - 0
    required: false
    choices:
    - 0
    - 1
    - 2
    direction: "input"
    multiple: false
    multiple_sep: ";"
- name: "Exon-exon junctions"
  arguments:
  - type: "file"
    name: "--ref_fasta"
    alternatives:
    - "-G"
    description: "Provide the name of a FASTA-format file that contains the reference\
      \ sequences used in read mapping that produced the provided SAM/BAM files.\n"
    info: null
    example:
    - "reference.fasta"
    must_exist: true
    create_parent: true
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
- name: "Parameters specific to paired end reads"
  arguments:
  - type: "boolean_true"
    name: "--paired"
    alternatives:
    - "-p"
    description: "Specify that input data contain paired-end reads. To perform fragment\
      \ counting (ie. counting read pairs), the '--countReadPairs' parameter should\
      \ also be specified in addition to this parameter.\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--count_read_pairs"
    description: "Count read pairs (fragments) instead of reads. This option is only\
      \ applicable for paired-end reads.\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--both_aligned"
    alternatives:
    - "-B"
    description: "Count read pairs (fragments) instead of reads. This option is only\
      \ applicable for paired-end reads.\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--check_pe_dist"
    alternatives:
    - "-P"
    description: "Check validity of paired-end distance when counting read pairs.\
      \ Use '--min_length' and '--max_length' to set thresholds.\n"
    info: null
    direction: "input"
  - type: "integer"
    name: "--min_length"
    alternatives:
    - "-d"
    description: "Minimum fragment/template length, 50 by default.\n"
    info: null
    example:
    - 50
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "integer"
    name: "--max_length"
    alternatives:
    - "-D"
    description: "Maximum fragment/template length, 600 by default.\n"
    info: null
    example:
    - 600
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "boolean_true"
    name: "--same_strand"
    alternatives:
    - "-C"
    description: "Do not count read pairs that have their two ends mapping to different\
      \ chromosomes or mapping to same chromosome but on different strands.\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--donotsort"
    description: "Do not sort reads in BAM/SAM input. Note that reads from the same\
      \ pair are required to be located next to each other in the input.\n"
    info: null
    direction: "input"
- name: "Read groups"
  arguments:
  - type: "boolean_true"
    name: "--by_read_group"
    description: "Assign reads by read group. \"RG\" tag is required to be present\
      \ in the input BAM/SAM files.\n"
    info: null
    direction: "input"
- name: "Long reads"
  arguments:
  - type: "boolean_true"
    name: "--long_reads"
    description: "Count long reads such as Nanopore and PacBio reads. Long read counting\
      \ can only run in one thread and only reads (not read-pairs) can be counted.\
      \ There is no limitation on the number of 'M' operations allowed in a CIGAR\
      \ string in long read counting.\n"
    info: null
    direction: "input"
- name: "Assignment results for each read"
  arguments:
  - type: "file"
    name: "--detailed_results"
    description: "Directory to save the detailed assignment results. Use `--detailed_results_format`\
      \ to determine the format of the detailed results.\n"
    info: null
    example:
    - "detailed_results"
    must_exist: true
    create_parent: true
    required: false
    direction: "output"
    multiple: false
    multiple_sep: ";"
  - type: "string"
    name: "--detailed_results_format"
    alternatives:
    - "-R"
    description: "Output detailed assignment results for each read or read-pair. Results\
      \ are saved to a file that is in one of the following formats: CORE, SAM and\
      \ BAM. See documentaiton for more info about these formats.\n"
    info: null
    required: false
    choices:
    - "CORE"
    - "SAM"
    - "BAM"
    direction: "input"
    multiple: false
    multiple_sep: ";"
- name: "Miscellaneous"
  arguments:
  - type: "integer"
    name: "--max_M_op"
    description: "Maximum number of 'M' operations allowed in a CIGAR string. 10 by\
      \ default. Both 'X' and '=' are treated as 'M' and adjacent 'M' operations are\
      \ merged in the CIGAR string.\n"
    info: null
    example:
    - 10
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "boolean_true"
    name: "--verbose"
    description: "Output verbose information for debugging, such as un-matched chromosome/contig\
      \ names.\n"
    info: null
    direction: "input"
resources:
- type: "bash_script"
  path: "script.sh"
  is_executable: true
description: "featureCounts is a read summarization program for counting reads generated\
  \ from either RNA or genomic DNA sequencing experiments by implementing highly efficient\
  \ chromosome hashing and feature blocking techniques. It works with either single\
  \ or paired-end reads and provides a wide range of options appropriate for different\
  \ sequencing applications.\n"
test_resources:
- type: "bash_script"
  path: "test.sh"
  is_executable: true
- type: "file"
  path: "test_data"
info: null
status: "enabled"
requirements:
  commands:
  - "ps"
keywords:
- "Read counting"
- "Genomic features"
license: "GPL-3.0"
references:
  doi:
  - "10.1093/bioinformatics/btt656"
links:
  repository: "https://github.com/ShiLab-Bioinformatics/subread"
  homepage: "https://subread.sourceforge.net/"
  documentation: "https://subread.sourceforge.net/SubreadUsersGuide.pdf"
runners:
- type: "executable"
  id: "executable"
  docker_setup_strategy: "ifneedbepullelsecachedbuild"
- type: "nextflow"
  id: "nextflow"
  directives:
    tag: "$id"
  auto:
    simplifyInput: true
    simplifyOutput: false
    transcript: false
    publish: false
  config:
    labels:
      mem1gb: "memory = 1000000000.B"
      mem2gb: "memory = 2000000000.B"
      mem5gb: "memory = 5000000000.B"
      mem10gb: "memory = 10000000000.B"
      mem20gb: "memory = 20000000000.B"
      mem50gb: "memory = 50000000000.B"
      mem100gb: "memory = 100000000000.B"
      mem200gb: "memory = 200000000000.B"
      mem500gb: "memory = 500000000000.B"
      mem1tb: "memory = 1000000000000.B"
      mem2tb: "memory = 2000000000000.B"
      mem5tb: "memory = 5000000000000.B"
      mem10tb: "memory = 10000000000000.B"
      mem20tb: "memory = 20000000000000.B"
      mem50tb: "memory = 50000000000000.B"
      mem100tb: "memory = 100000000000000.B"
      mem200tb: "memory = 200000000000000.B"
      mem500tb: "memory = 500000000000000.B"
      mem1gib: "memory = 1073741824.B"
      mem2gib: "memory = 2147483648.B"
      mem4gib: "memory = 4294967296.B"
      mem8gib: "memory = 8589934592.B"
      mem16gib: "memory = 17179869184.B"
      mem32gib: "memory = 34359738368.B"
      mem64gib: "memory = 68719476736.B"
      mem128gib: "memory = 137438953472.B"
      mem256gib: "memory = 274877906944.B"
      mem512gib: "memory = 549755813888.B"
      mem1tib: "memory = 1099511627776.B"
      mem2tib: "memory = 2199023255552.B"
      mem4tib: "memory = 4398046511104.B"
      mem8tib: "memory = 8796093022208.B"
      mem16tib: "memory = 17592186044416.B"
      mem32tib: "memory = 35184372088832.B"
      mem64tib: "memory = 70368744177664.B"
      mem128tib: "memory = 140737488355328.B"
      mem256tib: "memory = 281474976710656.B"
      mem512tib: "memory = 562949953421312.B"
      cpu1: "cpus = 1"
      cpu2: "cpus = 2"
      cpu5: "cpus = 5"
      cpu10: "cpus = 10"
      cpu20: "cpus = 20"
      cpu50: "cpus = 50"
      cpu100: "cpus = 100"
      cpu200: "cpus = 200"
      cpu500: "cpus = 500"
      cpu1000: "cpus = 1000"
  debug: false
  container: "docker"
engines:
- type: "docker"
  id: "docker"
  image: "quay.io/biocontainers/subread:2.0.6--he4a0461_0"
  target_registry: "images.viash-hub.com"
  target_tag: "v0.2.0"
  namespace_separator: "/"
  setup:
  - type: "docker"
    run:
    - "featureCounts -v 2>&1 | sed 's/featureCounts v\\([0-9.]*\\)/featureCounts:\
      \ \\1/' > /var/software_versions.txt\n"
  entrypoint: []
  cmd: null
- type: "native"
  id: "native"
build_info:
  config: "src/featurecounts/config.vsh.yaml"
  runner: "nextflow"
  engine: "docker|native"
  output: "target/nextflow/featurecounts"
  executable: "target/nextflow/featurecounts/main.nf"
  viash_version: "0.9.0"
  git_commit: "7e530218844c373048bc33de58f021b6460642e5"
  git_remote: "https://x-access-token:ghs_kiUBq39QrAlnG6IaeAcTcXhllzqpOV4LDB3e@github.com/viash-hub/biobox"
package_config:
  name: "biobox"
  version: "v0.2.0"
  description: "A collection of bioinformatics tools for working with sequence data.\n"
  info: null
  viash_version: "0.9.0"
  source: "src"
  target: "target"
  config_mods:
  - ".requirements.commands := ['ps']\n"
  - ".engines += { type: \"native\" }"
  - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
  - ".engines[.type == 'docker'].target_tag := 'v0.2.0'"
  keywords:
  - "bioinformatics"
  - "modules"
  - "sequencing"
  license: "MIT"
  organization: "vsh"
  links:
    repository: "https://github.com/viash-hub/biobox"
    issue_tracker: "https://github.com/viash-hub/biobox/issues"
