name: "bedtools_jaccard"
namespace: "bedtools"
version: "main"
authors:
- name: "Robrecht Cannoodt"
  roles:
  - "author"
  - "maintainer"
  info:
    links:
      email: "robrecht@data-intuitive.com"
      github: "rcannood"
      orcid: "0000-0003-3641-729X"
      linkedin: "robrechtcannoodt"
    organizations:
    - name: "Data Intuitive"
      href: "https://www.data-intuitive.com"
      role: "Data Science Engineer"
    - name: "Open Problems"
      href: "https://openproblems.bio"
      role: "Core Member"
argument_groups:
- name: "Inputs"
  arguments:
  - type: "file"
    name: "--input_a"
    alternatives:
    - "-a"
    description: "First input file for Jaccard comparison.\n\n**Format:** BED, GFF,\
      \ VCF file with genomic intervals\n**Requirement:** Must be sorted by chromosome,\
      \ then start position\n**Usage:** File A for Jaccard similarity calculation\n"
    info: null
    example:
    - "intervals_a.bed"
    must_exist: true
    create_parent: true
    required: true
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "file"
    name: "--input_b"
    alternatives:
    - "-b"
    description: "Second input file for Jaccard comparison.\n\n**Format:** BED, GFF,\
      \ VCF file with genomic intervals\n**Requirement:** Must be sorted by chromosome,\
      \ then start position\n**Usage:** File B for Jaccard similarity calculation\n"
    info: null
    example:
    - "intervals_b.bed"
    must_exist: true
    create_parent: true
    required: true
    direction: "input"
    multiple: false
    multiple_sep: ";"
- name: "Outputs"
  arguments:
  - type: "file"
    name: "--output"
    description: "Output file with Jaccard similarity statistics.\n\n**Format:** Tab-delimited\
      \ with intersection, union, and Jaccard values\n**Columns:** intersection, union,\
      \ jaccard\n**Range:** Jaccard values from 0.0 to 1.0\n"
    info: null
    example:
    - "jaccard_results.txt"
    must_exist: true
    create_parent: true
    required: true
    direction: "output"
    multiple: false
    multiple_sep: ";"
- name: "Overlap Options"
  arguments:
  - type: "double"
    name: "--min_overlap_a"
    alternatives:
    - "-f"
    description: "Minimum overlap required as fraction of A.\n\n**Range:** 0.0 to\
      \ 1.0\n**Default:** 1E-9 (effectively 1bp)\n**Example:** 0.50 requires 50% of\
      \ A to be overlapped\n"
    info: null
    example:
    - 0.5
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "double"
    name: "--min_overlap_b"
    alternatives:
    - "-F"
    description: "Minimum overlap required as fraction of B.\n\n**Range:** 0.0 to\
      \ 1.0\n**Default:** 1E-9 (effectively 1bp)\n**Example:** 0.50 requires 50% of\
      \ B to be overlapped\n"
    info: null
    example:
    - 0.5
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "boolean_true"
    name: "--reciprocal"
    alternatives:
    - "-r"
    description: "Require reciprocal overlap for A overlapping B.\n\n**Requirement:**\
      \ Must be used solely with -f (min_overlap_a)\n**Effect:** Requires B overlaps\
      \ specified fraction of A AND A overlaps same fraction of B\n**Example:** With\
      \ -f 0.90 -r, requires B overlaps 90% of A AND A overlaps 90% of B\n**Default:**\
      \ false\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--either"
    alternatives:
    - "-e"
    description: "Require minimum fraction satisfied for A OR B.\n\n**Effect:** Only\
      \ one of -f or -F thresholds needs to be satisfied\n**Alternative:** Without\
      \ -e, both fractions must be satisfied\n**Default:** false (both required)\n"
    info: null
    direction: "input"
- name: "Strand Options"
  arguments:
  - type: "boolean_true"
    name: "--same_strand"
    alternatives:
    - "-s"
    description: "Require same strandedness for overlaps.\n\n**Effect:** Only consider\
      \ overlaps on the same strand\n**Default:** false (strand-independent)\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--opposite_strand"
    alternatives:
    - "-S"
    description: "Require different strandedness for overlaps.\n\n**Effect:** Only\
      \ consider overlaps on opposite strands\n**Default:** false (strand-independent)\n\
      **Note:** May have issues in some bedtools versions requiring strand specification\n"
    info: null
    direction: "input"
- name: "Format Options"
  arguments:
  - type: "boolean_true"
    name: "--split"
    description: "Treat split BAM or BED12 entries as distinct intervals.\n\n**Effect:**\
      \ Split multi-block entries into individual intervals\n**Usage:** For BAM alignments\
      \ with gaps or BED12 entries\n**Default:** false\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--bed_output"
    alternatives:
    - "--bed"
    description: "Write output in BED format when using BAM input.\n\n**Effect:**\
      \ Forces BED output format for BAM inputs\n**Default:** false\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--header"
    description: "Print header from file A prior to results.\n\n**Effect:** Includes\
      \ original header from input file A\n**Default:** false\n"
    info: null
    direction: "input"
- name: "Advanced Options"
  arguments:
  - type: "file"
    name: "--genome"
    alternatives:
    - "-g"
    description: "Genome file for consistent chromosome sorting.\n\n**Format:** Tab-delimited\
      \ file with chromosome name and size\n**Usage:** Only applies when used with\
      \ sorted data\n**Purpose:** Enforces consistent chromosome sort order\n"
    info: null
    example:
    - "genome.txt"
    must_exist: true
    create_parent: true
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
  - type: "boolean_true"
    name: "--no_name_check"
    alternatives:
    - "--nonamecheck"
    description: "Skip chromosome naming convention checks for sorted data.\n\n**Effect:**\
      \ Allows different naming (e.g., \"chr1\" vs \"chr01\")\n**Usage:** For files\
      \ with inconsistent chromosome naming\n**Default:** false (strict checking)\n"
    info: null
    direction: "input"
  - type: "boolean_true"
    name: "--no_buffer"
    alternatives:
    - "--nobuf"
    description: "Disable buffered output.\n\n**Effect:** Print each line immediately\
      \ instead of buffering\n**Usage:** For real-time processing or piping\n**Trade-off:**\
      \ Slower performance but immediate output\n**Default:** false (buffered output)\n"
    info: null
    direction: "input"
  - type: "string"
    name: "--io_buffer"
    alternatives:
    - "--iobuf"
    description: "Specify input buffer memory size.\n\n**Format:** Integer with optional\
      \ K/M/G suffix\n**Example:** \"128M\" for 128 megabytes\n**Note:** No effect\
      \ with compressed files\n"
    info: null
    example:
    - "128M"
    required: false
    direction: "input"
    multiple: false
    multiple_sep: ";"
resources:
- type: "bash_script"
  path: "script.sh"
  is_executable: true
description: "Calculate Jaccard similarity statistic between two genomic feature files.\n\
  \nThe Jaccard index measures similarity between finite sample sets, defined as\n\
  the size of the intersection divided by the size of the union. Values range\nfrom\
  \ 0 (no intersection) to 1 (identical sets). This tool calculates the\nJaccard statistic\
  \ for genomic intervals, providing a quantitative measure\nof overlap between two\
  \ interval sets.\n"
test_resources:
- type: "bash_script"
  path: "test.sh"
  is_executable: true
- type: "file"
  path: "test_helpers.sh"
info: null
status: "enabled"
scope:
  image: "public"
  target: "public"
requirements:
  commands:
  - "bedtools"
  - "ps"
keywords:
- "genomics"
- "intervals"
- "jaccard"
- "similarity"
- "statistics"
- "overlap"
- "intersection"
- "union"
license: "MIT"
references:
  doi:
  - "10.1093/bioinformatics/btq033"
links:
  repository: "https://github.com/arq5x/bedtools2"
  homepage: "https://bedtools.readthedocs.io/"
  documentation: "https://bedtools.readthedocs.io/en/latest/content/tools/jaccard.html"
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/bedtools:2.31.1--h13024bc_3"
  target_registry: "images.viash-hub.com"
  target_tag: "main"
  namespace_separator: "/"
  setup:
  - type: "docker"
    run:
    - "bedtools --version 2>&1 | head -1 | sed 's/.*bedtools v/bedtools: /' > /var/software_versions.txt\n"
  entrypoint: []
  cmd: null
- type: "native"
  id: "native"
build_info:
  config: "src/bedtools/bedtools_jaccard/config.vsh.yaml"
  runner: "nextflow"
  engine: "docker|native"
  output: "target/nextflow/bedtools/bedtools_jaccard"
  executable: "target/nextflow/bedtools/bedtools_jaccard/main.nf"
  viash_version: "0.9.4"
  git_commit: "9991e9a4f5ddd5085a4e2becf962950b1daf594b"
  git_remote: "https://github.com/viash-hub/biobox"
package_config:
  name: "biobox"
  version: "main"
  summary: "A curated collection of high-quality, standalone bioinformatics components\
    \ built with [Viash](https://viash.io).\n"
  description: "`biobox` offers a suite of reliable bioinformatics components, similar\
    \ to [nf-core/modules](https://github.com/nf-core/modules) and [snakemake-wrappers/bio](https://github.com/snakemake/snakemake-wrappers/tree/master/bio),\
    \ but built using the [Viash](https://viash.io) framework.\n\nThis approach emphasizes\
    \ **reusability**, **reproducibility**, and adherence to **best practices**. Key\
    \ features of `biobox` components include:\n\n* **Standalone & Nextflow Ready:**\
    \ Run components directly via the command line or seamlessly integrate them into\
    \ Nextflow workflows.\n* **High Quality Standards:**\n    * Comprehensive documentation\
    \ for components and parameters.\n    * Full exposure of underlying tool arguments.\n\
    \    * Containerized (Docker) for dependency management and reproducibility.\n\
    \    * Unit tested for verified functionality.\n"
  info: null
  viash_version: "0.9.4"
  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 := 'main'"
  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"
