Skip to content

Update multi-sample metagenomic binning workflow - #1452

Merged
paulzierep merged 17 commits into
galaxyproject:mainfrom
paulzierep:agentic-foundry-mags-multi
Nov 3, 2026
Merged

paulzierep merged 17 commits into
galaxyproject:mainfrom
paulzierep:agentic-foundry-mags-multi

Conversation

@paulzierep

@paulzierep paulzierep commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Publish Multi-sample binning 1.0 as a reusable workflow accepting paired-end
reads and assemblies from any assembler. Every assembly is mapped against all
original per-sample read sets
, retaining separate sample coverage profiles for
binning rather than pooling those reads into one coverage profile.

This complements #1453: cross-sample abundance patterns can improve binning for
related environments, but the all-samples × all-assemblies mapping costs more
compute and storage. The workflow also supports co-assemblies while retaining
coverage from the original samples.

Changes and interface

  • Inputs: original per-sample reads as list:paired and assemblies as list.
    Reads should already be quality-filtered and host-removed.
  • Five independently optional binners: SemiBin, CONCOCT, MetaBAT2, MaxBin2 and
    COMEBin
    . All default to on; keep at least one enabled.
  • Refine with Binette (first/default), DAS Tool, or Both. Binette's
    standalone completeness/contamination-weight defaults remain 40 / 2.
  • Compute CONCOCT read length automatically from both mates of all original
    samples using total bases / total reads, rounded to the nearest integer.
  • Publish per-assembly coverage-depth matrices, raw bins and selected refiner
    outputs. Coverage tables retain the original samples' coverage columns.
  • Use editor-compatible optional-output bridges and separate coverage, binning and refinement frames
    with Markdown documentation. Yes/No binner selectors feed internal boolean gates.
  • Document that SemiBin co mode has no environment selector in this wrapper;
    the single-mode selector from Update single-sample metagenomic binning workflow #1453 is intentionally not exposed here.

This standalone workflow stops at binning/refinement; it does not add grouping,
assembly, dRep, abundance estimation or final reporting.

Validation

  • The committed test exercises Both refiners with COMEBin enabled; nested
    collection assertions/minima are retained and fixtures are referenced by URL.
  • Integrate Updating workflows/microbiome/multi-sample-binning from 1.0 to 1.1 #1435: de-interlacer 1.2+galaxy0 feeds its paired pairs
    collection directly to Bowtie2; remove the obsolete zip step. Upgrade COMEBin
    to 1.1.0+galaxy1 with its exact installable Tool Shed revision.
  • gxwf validate: 38 tool states pass, zero failures/skips; IWC lint passes.
  • Refreshed EU editor-terminal audit of Multi and parent/embedded children:
    382 connections, zero invalid.
  • Exact test assertions are unchanged. Earlier runtime acceptance predates these
    tool upgrades and does not validate this revision. A fresh unchanged Multi
    exact case is submitted on EU; results and GitHub CI remain pending.
  • Parent EU regressions exposed an invocation-level failure while copying cached
    de-interlacer outputs; uncached retries are running. This remains unresolved,
    not a validated pass of the embedded workflow.

Context and related PRs

This is part of the FAIRyMAGs workflow modularization: publish reusable binning
workflows alongside an end-to-end MAG-generation parent, rather than maintaining
separate copies of the same binning logic. Each deliverable has its own branch
and PR so it can be reviewed independently.

Suggested review/merge order: Single → Multi → Parent. The parent embeds its
children, so importing it does not require importing the standalone workflows first.

Developed within FAIRyMAGs, with links
to the related workflows and learning resources in the README.

IWC checklist

FOR CONTRIBUTOR:

FOR REVIEWERS:

  • .dockstore.yml: file is present and aligned with creator metadata in workflow. ORCID identifiers are strongly encouraged in creator metadata. The .dockstore.yml file is required to run tests
  • Workflow is sufficiently generic to be used with lab data and does not hardcode sample names, reference data and can be run without reading an accompanying tutorial.
  • In workflow: annotation field contains short description of what the workflow does. Should start with This workflow does/runs/performs … xyz … to generate/analyze/etc …
  • In workflow: workflow inputs and outputs have human readable names (spaces are fine, no underscore, dash only where spelling dictates it), no abbreviation unless it is generally understood. Altering input or output labels requires adjusting these labels in the the workflow-tests.yml file as well
  • In workflow: name field should be human readable (spaces are fine, no underscore, dash only where spelling dictates it), no abbreviation unless generally understood
  • Workflow folder: prefer dash (-) over underscore (_), prefer all lowercase. Folder becomes repository in iwc-workflows organization and is included in TRS id
  • Readme explains what workflow does, what are valid inputs and what outputs users can expect. If a tutorial or other resources exist they can be linked. If a similar workflow exists in IWC readme should explain differences with existing workflow and when one might prefer one workflow over another
  • Changelog contains appropriate entries
  • Large files (> 100 KB) are uploaded to zenodo and location urls are used in test file

@github-actions

Copy link
Copy Markdown

Test Results (powered by Planemo)

Test Summary

Test State Count
Total 1
Passed 0
Error 1
Failure 0
Skipped 0
Errored Tests
  • ❌ multi-sample-binning.ga_0

    Execution Problem:

    • Unexpected HTTP status code: 400: {"err_msg":"Workflow was not invoked; the following required tools are not installed: toolshed.g2.bx.psu.edu/repos/iuc/seqkit_stats/seqkit_stats/2.8.1+galaxy0 (version 2.8.1+galaxy0), toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_cat/0.1.0 (version 0.1.0), toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_awk_tool/9.11+galaxy0 (version 9.11+galaxy0)","err_code":0}
      

@paulzierep paulzierep changed the title Agentic foundry mags multi Add reusable multi-sample metagenomic binning workflow Oct 20, 2026
@paulzierep paulzierep changed the title Add reusable multi-sample metagenomic binning workflow Update multi-sample metagenomic binning workflow Oct 20, 2026
@github-actions

Copy link
Copy Markdown

Test Results (powered by Planemo)

Test Summary

Test State Count
Total 1
Passed 0
Error 1
Failure 0
Skipped 0
Errored Tests
  • ❌ multi-sample-binning.ga_0

    Execution Problem:

    • Unexpected HTTP status code: 400: {"err_msg":"Workflow was not invoked; the following required tools are not installed: toolshed.g2.bx.psu.edu/repos/iuc/seqkit_stats/seqkit_stats/2.8.1+galaxy0 (version 2.8.1+galaxy0), toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_cat/0.1.0 (version 0.1.0), toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_awk_tool/9.11+galaxy0 (version 9.11+galaxy0)","err_code":0}
      

COMEBin runs the longest of all binners and the workflow tests stay close to
the CI time limit. Turn it off in the published test case while keeping the
other binners, both refinement tools and every existing assertion unchanged.
COMEBin stays enabled by default in the workflow.
@paulzierep

Copy link
Copy Markdown
Collaborator Author

Tests: turn COMEBin off in the published test case to keep the suite inside the CI time limit.

COMEBin is the longest binning step: in the last CI runs its five assembly jobs took ~4h30m here, which brought the suite close to the six hour limit (the previous version already needed 5h41m). With COMEBin disabled the test still covers SemiBin, MetaBAT2, MaxBin2 and CONCOCT plus both refinement tools, cross-sample coverage and all existing output assertions. COMEBin stays enabled by default in the workflow and its behaviour is verified separately.

Reduce the CI fixture from five to two mock samples so the N-squared
cross-alignment matrix (25 -> 4 alignments) keeps the test within the
runtime limit now that COMEBin is disabled. Update the per-sample
element assertions and the coverage-matrix column count (13 -> 7,
i.e. 3 fixed plus 2 per-sample columns).
@github-actions

Copy link
Copy Markdown

Test Results (powered by Planemo)

Test Summary

Test State Count
Total 1
Passed 0
Error 0
Failure 1
Skipped 0
Failed Tests
  • ❌ multi-sample-binning.ga_0

@bebatut bebatut left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the workflow! It looks good!

I made some suggestions, mostly to remove in annotation the text that is already in the label of the step. For me, annotation should not repeat the label but bring extra explanation of the step.

Would it be possible to change the order of the inputs to have:

  1. The assemblies
  2. The reads
  3. The boolean inputs for binners
  4. Binnette inputs
    ?

Also, instead of having a big box with explanation on the top (see screenshot below), would it be possible to have sub-boxing corresponding to "coverage", "binning", "refinement" steps with the corresponding explanation in each box?

Image

That would make it easier for future contributors to identify the different blocks.

UI/UX comment: I found the selection boolean not 100% intuitive. It would be nice to have "Yes/No" and the annotation below.

Image

@bebatut bebatut left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the workflow! It looks good!

I made some suggestions, mostly to remove in annotation the text that is already in the label of the step. For me, annotation should not repeat the label but bring extra explanation of the step.

Would it be possible to change the order of the inputs to have:

  1. The assemblies
  2. The reads
  3. The boolean inputs for binners
  4. Binnette inputs
    ?

Also, instead of having a big box with explanation on the top (see screenshot below), would it be possible to have sub-boxing corresponding to "coverage", "binning", "refinement" steps with the corresponding explanation in each box?

Image

That would make it easier for future contributors to identify the different blocks.

UI/UX comment: I found the selection boolean not 100% intuitive. It would be nice to have "Yes/No" and the annotation below.

Image

Replace the five boolean binner toggles with Yes/No selectors gated
through map_param_value steps, reorder the inputs so reads and
assemblies come first, group the workflow into annotated frames, and
rewrite step annotations and the README to explain what each step does.
@paulzierep

paulzierep commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator Author

Thanks @bebatut. Updated the step annotations, ordered inputs as assemblies → reads → binner selectors → Binette settings, and split the editor layout into coverage, binning and refinement frames with explanations. Binner selectors now show Yes/No and feed boolean gates internally. The README follows the analysis stages and explains the per-sample coverage-depth columns. The inputs field in the workflow JSON is Galaxy serialization metadata, not another editor step.

@bebatut bebatut left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @paulzierep. It seems good on my side (do not have the time to review in details 😅 ), just one comment about changes in the CHANGELOG file

@github-actions

Copy link
Copy Markdown

Test Results (powered by Planemo)

Test Summary

Test State Count
Total 1
Passed 0
Error 1
Failure 0
Skipped 0
Errored Tests
  • ❌ multi-sample-binning.ga_0

    Execution Problem:

    • Failed to run workflow, invocation ended in [failed] state.
      

    Workflow invocation details

    • Invocation Messages

      • Invocation scheduling failed because step 39 requires a dataset created by step 21, but dataset entered a failed state.
    • Steps
      • Step 1: Assemblies:

        • step_state: scheduled
      • Step 2: Paired-end reads:

        • step_state: scheduled
      • Step 3: Run COMEBin?:

        • step_state: scheduled
      • Step 4: Run SemiBin?:

        • step_state: scheduled
      • Step 5: Run CONCOCT?:

        • step_state: scheduled
      • Step 6: Run MetaBAT2?:

        • step_state: scheduled
      • Step 7: Run MaxBin2?:

        • step_state: scheduled
      • Step 8: Bin refinement tool:

        • step_state: scheduled
      • Step 9: CheckM2 Database:

        • step_state: scheduled
      • Step 10: Minimum MAG completeness percentage:

        • step_state: scheduled
      • Step 11: Contamination weight (Binette):

        • step_state: scheduled
      • Step 12: Split contigs into fragments for CONCOCT (toolshed.g2.bx.psu.edu/repos/iuc/concoct_cut_up_fasta/concoct_cut_up_fasta/1.1.0+galaxy3):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is error

            Command Line:

            • ln -s '/tmp/tmpk0euo5bh/files/3/3/8/dataset_338359e2-7d72-4d2c-b6ed-ff4af0a490f7.dat' 'input.fa' &&  cut_up_fasta.py 'input.fa' --chunk_size 10000 --overlap_size 0 --merge_last --bedfile '/tmp/tmpk0euo5bh/job_working_directory/000/7/outputs/dataset_5265aab0-934d-4562-bac6-bc44decf7646.dat' > '/tmp/tmpk0euo5bh/job_working_directory/000/7/outputs/dataset_ddad27aa-3029-4399-9daf-f12e8aa394eb.dat'

            Exit Code:

            • 127

            Standard Error:

            • /tmp/tmpk0euo5bh/job_working_directory/000/7/tool_script.sh: line 10: cut_up_fasta.py: command not found
              

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              bedfile true
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              chunk_size "10000"
              dbkey "?"
              merge_last true
              overlap_size "0"
          • Job 2:

            • Job state is error

            Command Line:

            • ln -s '/tmp/tmpk0euo5bh/files/1/1/5/dataset_1157fdc1-8e36-435d-8792-d8355f0cbd2e.dat' 'input.fa' &&  cut_up_fasta.py 'input.fa' --chunk_size 10000 --overlap_size 0 --merge_last --bedfile '/tmp/tmpk0euo5bh/job_working_directory/000/8/outputs/dataset_7268b3bc-9b31-4412-a189-55b849b94acd.dat' > '/tmp/tmpk0euo5bh/job_working_directory/000/8/outputs/dataset_1c0356a3-4fdb-40c7-b768-0cc3acaa2927.dat'

            Exit Code:

            • 127

            Standard Error:

            • /tmp/tmpk0euo5bh/job_working_directory/000/8/tool_script.sh: line 10: cut_up_fasta.py: command not found
              

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              bedfile true
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              chunk_size "10000"
              dbkey "?"
              merge_last true
              overlap_size "0"
      • Step 13: Flatten read pairs (__FLATTEN__):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              input {"values": [{"id": 1, "src": "hdca"}]}
              join_identifier "_"
      • Step 14: Unzip reads for automatic read-length estimation (__UNZIP_COLLECTION__):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              input {"values": [{"id": 1, "src": "dce"}]}
          • Job 2:

            • Job state is ok

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              input {"values": [{"id": 4, "src": "dce"}]}
      • Step 15: COMEBin binning gate (toolshed.g2.bx.psu.edu/repos/iuc/map_param_value/map_param_value/0.2.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Command Line:

            • cd ../; python _evaluate_expression_.py

            Exit Code:

            • 0

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              input_param_type {"__current_case__": 0, "input_param": "No", "mappings": [{"__index__": 0, "from": "Yes", "to": "True"}, {"__index__": 1, "from": "No", "to": "False"}], "type": "text"}
              output_param_type "boolean"
              unmapped {"__current_case__": 2, "default_value": "False", "on_unmapped": "default"}
      • Step 16: SemiBin binning gate (toolshed.g2.bx.psu.edu/repos/iuc/map_param_value/map_param_value/0.2.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Command Line:

            • cd ../; python _evaluate_expression_.py

            Exit Code:

            • 0

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              input_param_type {"__current_case__": 0, "input_param": "Yes", "mappings": [{"__index__": 0, "from": "Yes", "to": "True"}, {"__index__": 1, "from": "No", "to": "False"}], "type": "text"}
              output_param_type "boolean"
              unmapped {"__current_case__": 2, "default_value": "False", "on_unmapped": "default"}
      • Step 17: CONCOCT binning gate (toolshed.g2.bx.psu.edu/repos/iuc/map_param_value/map_param_value/0.2.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Command Line:

            • cd ../; python _evaluate_expression_.py

            Exit Code:

            • 0

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              input_param_type {"__current_case__": 0, "input_param": "Yes", "mappings": [{"__index__": 0, "from": "Yes", "to": "True"}, {"__index__": 1, "from": "No", "to": "False"}], "type": "text"}
              output_param_type "boolean"
              unmapped {"__current_case__": 2, "default_value": "False", "on_unmapped": "default"}
      • Step 18: MetaBAT2 binning gate (toolshed.g2.bx.psu.edu/repos/iuc/map_param_value/map_param_value/0.2.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Command Line:

            • cd ../; python _evaluate_expression_.py

            Exit Code:

            • 0

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              input_param_type {"__current_case__": 0, "input_param": "Yes", "mappings": [{"__index__": 0, "from": "Yes", "to": "True"}, {"__index__": 1, "from": "No", "to": "False"}], "type": "text"}
              output_param_type "boolean"
              unmapped {"__current_case__": 2, "default_value": "False", "on_unmapped": "default"}
      • Step 19: MaxBin2 binning gate (toolshed.g2.bx.psu.edu/repos/iuc/map_param_value/map_param_value/0.2.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Command Line:

            • cd ../; python _evaluate_expression_.py

            Exit Code:

            • 0

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              input_param_type {"__current_case__": 0, "input_param": "Yes", "mappings": [{"__index__": 0, "from": "Yes", "to": "True"}, {"__index__": 1, "from": "No", "to": "False"}], "type": "text"}
              output_param_type "boolean"
              unmapped {"__current_case__": 2, "default_value": "False", "on_unmapped": "default"}
      • Step 20: Run DAS Tool? (toolshed.g2.bx.psu.edu/repos/iuc/map_param_value/map_param_value/0.2.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Command Line:

            • cd ../; python _evaluate_expression_.py

            Exit Code:

            • 0

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              input_param_type {"__current_case__": 0, "input_param": "Both", "mappings": [{"__index__": 0, "from": "Both", "to": "True"}, {"__index__": 1, "from": "DAS Tool", "to": "True"}, {"__index__": 2, "from": "Binette", "to": "False"}], "type": "text"}
              output_param_type "boolean"
              unmapped {"__current_case__": 2, "default_value": "False", "on_unmapped": "default"}
      • Step 21: Run Binette? (toolshed.g2.bx.psu.edu/repos/iuc/map_param_value/map_param_value/0.2.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Command Line:

            • cd ../; python _evaluate_expression_.py

            Exit Code:

            • 0

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              input_param_type {"__current_case__": 0, "input_param": "Both", "mappings": [{"__index__": 0, "from": "Both", "to": "True"}, {"__index__": 1, "from": "Binette", "to": "True"}, {"__index__": 2, "from": "DAS Tool", "to": "False"}], "type": "text"}
              output_param_type "boolean"
              unmapped {"__current_case__": 2, "default_value": "False", "on_unmapped": "default"}
      • Step 22: Cross product of assemblies and flattened reads (__CROSS_PRODUCT_NESTED__):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              input_a {"values": [{"id": 2, "src": "hdca"}]}
              input_b {"values": [{"id": 5, "src": "hdca"}]}
      • Step 23: Read-length statistics — forward (toolshed.g2.bx.psu.edu/repos/iuc/seqkit_stats/seqkit_stats/2.8.1+galaxy0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is error

            Command Line:

            • ln -s '/tmp/tmpk0euo5bh/files/0/4/7/dataset_047d804a-686a-45a7-aa93-6a7c61e8ca25.dat' 'Mock1' &&  seqkit stats 'Mock1'  --basename --fq-encoding sanger  --tabular > '/tmp/tmpk0euo5bh/job_working_directory/000/20/outputs/dataset_e811440c-0b28-4bd2-902a-3b2368a94f97.dat'

            Exit Code:

            • 127

            Standard Error:

            • /tmp/tmpk0euo5bh/job_working_directory/000/20/tool_script.sh: line 10: seqkit: command not found
              

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              all false
              basename true
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              skip_err false
              tabular true
          • Job 2:

            • Job state is running

            Command Line:

            • ln -s '/tmp/tmpk0euo5bh/files/a/a/7/dataset_aa7b6d5d-a048-464f-a87e-049ea5cfde65.dat' 'Mock2' &&  seqkit stats 'Mock2'  --basename --fq-encoding sanger  --tabular > '/tmp/tmpk0euo5bh/job_working_directory/000/21/outputs/dataset_2ece01fa-9ed9-4ab7-9632-456beb65a89e.dat'

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              all false
              basename true
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              skip_err false
              tabular true
      • Step 24: Read-length statistics — reverse (toolshed.g2.bx.psu.edu/repos/iuc/seqkit_stats/seqkit_stats/2.8.1+galaxy0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is queued

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              all false
              basename true
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              skip_err false
              tabular true
          • Job 2:

            • Job state is queued

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              all false
              basename true
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              skip_err false
              tabular true
      • Step 25: Rebuild read pairs per assembly (__APPLY_RULES__):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              input {"values": [{"id": 9, "src": "hdca"}]}
              rules ` {"mapping": [{"columns": [0, 2], "type": "list_identifiers"}, {"columns": [3], "type": "paired_identifier"}], "rules": [{"type": "add_column_metadata", "value": "identifier0"}, {"type": "add_column_metadata", "value": "identifier1"}, {"expression": "^(.+)_(forward
      • Step 26: References per assembly and read sample (__APPLY_RULES__):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is ok

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              input {"values": [{"id": 8, "src": "hdca"}]}
              rules ` {"mapping": [{"columns": [0, 2], "type": "list_identifiers"}], "rules": [{"type": "add_column_metadata", "value": "identifier0"}, {"type": "add_column_metadata", "value": "identifier1"}, {"expression": "forward$", "invert": false, "target_column": 1, "type": "add_filter_regex"}, {"expression": "^(.+)(forward
      • Step 27: Combine read-length statistics (toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_cat/0.1.0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is paused

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "tabular"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              queries [{"__index__": 0, "inputs2": {"values": [{"id": 11, "src": "hdca"}]}}]
      • Step 28: Map every read sample to every assembly with Bowtie2 (toolshed.g2.bx.psu.edu/repos/devteam/bowtie2/bowtie2/2.5.5+galaxy0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is queued

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              analysis_type {"__current_case__": 0, "analysis_type_selector": "simple", "presets": "no_presets"}
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              library {"__current_case__": 1, "aligned_file": false, "input_1": {"values": [{"id": 46, "src": "dce"}]}, "paired_options": {"__current_case__": 1, "paired_options_selector": "no"}, "type": "paired_collection", "unaligned_file": false}
              reference_genome {"__current_case__": 1, "own_file": {"values": [{"id": 60, "src": "dce"}]}, "source": "history"}
              rg {"__current_case__": 3, "rg_selector": "do_not_set"}
              sam_options {"__current_case__": 1, "sam_options_selector": "no"}
              save_mapping_stats false
          • Job 2:

            • Job state is queued

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              analysis_type {"__current_case__": 0, "analysis_type_selector": "simple", "presets": "no_presets"}
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              library {"__current_case__": 1, "aligned_file": false, "input_1": {"values": [{"id": 49, "src": "dce"}]}, "paired_options": {"__current_case__": 1, "paired_options_selector": "no"}, "type": "paired_collection", "unaligned_file": false}
              reference_genome {"__current_case__": 1, "own_file": {"values": [{"id": 61, "src": "dce"}]}, "source": "history"}
              rg {"__current_case__": 3, "rg_selector": "do_not_set"}
              sam_options {"__current_case__": 1, "sam_options_selector": "no"}
              save_mapping_stats false
          • Job 3:

            • Job state is queued

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              analysis_type {"__current_case__": 0, "analysis_type_selector": "simple", "presets": "no_presets"}
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              library {"__current_case__": 1, "aligned_file": false, "input_1": {"values": [{"id": 53, "src": "dce"}]}, "paired_options": {"__current_case__": 1, "paired_options_selector": "no"}, "type": "paired_collection", "unaligned_file": false}
              reference_genome {"__current_case__": 1, "own_file": {"values": [{"id": 63, "src": "dce"}]}, "source": "history"}
              rg {"__current_case__": 3, "rg_selector": "do_not_set"}
              sam_options {"__current_case__": 1, "sam_options_selector": "no"}
              save_mapping_stats false
          • Job 4:

            • Job state is queued

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              analysis_type {"__current_case__": 0, "analysis_type_selector": "simple", "presets": "no_presets"}
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              library {"__current_case__": 1, "aligned_file": false, "input_1": {"values": [{"id": 56, "src": "dce"}]}, "paired_options": {"__current_case__": 1, "paired_options_selector": "no"}, "type": "paired_collection", "unaligned_file": false}
              reference_genome {"__current_case__": 1, "own_file": {"values": [{"id": 64, "src": "dce"}]}, "source": "history"}
              rg {"__current_case__": 3, "rg_selector": "do_not_set"}
              sam_options {"__current_case__": 1, "sam_options_selector": "no"}
              save_mapping_stats false
      • Step 29: Compute read-count-weighted mean length (both mates) (toolshed.g2.bx.psu.edu/repos/bgruening/text_processing/tp_awk_tool/9.11+galaxy0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is paused

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              code "BEGIN{FS=\"\t\"} $4 ~ /^[0-9]+$/ {n += $4; total += $5} END{if(n<1) exit 1; print int(total/n+0.5)}"
              dbkey "?"
              variables []
      • Step 30: Calculate fragment coverage for CONCOCT (toolshed.g2.bx.psu.edu/repos/iuc/concoct_coverage_table/concoct_coverage_table/1.1.0+galaxy3):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is paused

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              mode {"__current_case__": 1, "bamfiles": {"values": [{"id": 65, "src": "dce"}]}, "type": "co"}
          • Job 2:

            • Job state is paused

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              mode {"__current_case__": 1, "bamfiles": {"values": [{"id": 68, "src": "dce"}]}, "type": "co"}
      • Step 31: Calculate contig depths across all read samples per assembly (toolshed.g2.bx.psu.edu/repos/iuc/metabat2_jgi_summarize_bam_contig_depths/metabat2_jgi_summarize_bam_contig_depths/2.18.23+galaxy0):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is new

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              advanced {"includeEdgeBases": false, "maxEdgeBases": "75", "minMapQual": "0", "noIntraDepthVariance": false, "output_paired_contigs": false, "percentIdentity": "97", "showDepth": false, "weightMapQual": "0.0"}
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              mode {"__current_case__": 1, "bam_co_inputs": {"values": [{"id": 65, "src": "dce"}]}, "type": "co", "use_reference_cond": {"__current_case__": 0, "use_reference": "no"}}
              shredding {"minContigDepth": "0.0", "minContigLength": "1", "shredDepth": "5", "shredLength": "16000"}
          • Job 2:

            • Job state is new

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              advanced {"includeEdgeBases": false, "maxEdgeBases": "75", "minMapQual": "0", "noIntraDepthVariance": false, "output_paired_contigs": false, "percentIdentity": "97", "showDepth": false, "weightMapQual": "0.0"}
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              mode {"__current_case__": 1, "bam_co_inputs": {"values": [{"id": 68, "src": "dce"}]}, "type": "co", "use_reference_cond": {"__current_case__": 0, "use_reference": "no"}}
              shredding {"minContigDepth": "0.0", "minContigLength": "1", "shredDepth": "5", "shredLength": "16000"}
      • Step 32: Bin contigs with COMEBin:

        • step_state: new
      • Step 33: Bin contigs with SemiBin:

        • step_state: new
      • Step 34: Automatic read length (CONCOCT) (param_value_from_file):

        • step_state: scheduled

        • Jobs
          • Job 1:

            • Job state is paused

            Traceback:

            Job Parameters:

            • Job parameter Parameter value
              __input_ext "input"
              __workflow_invocation_uuid__ "5d1fe028cf7611f1800070a8a58b26a3"
              chromInfo "/tmp/tmpk0euo5bh/galaxy-dev/tool-data/shared/ucsc/chrom/?.len"
              dbkey "?"
              param_type "integer"
              remove_newlines true
      • Step 35: Bin contigs with MetaBAT2:

        • step_state: new
      • Step 36: Bin contigs with MaxBin2:

        • step_state: new
      • Step 37: Bridge optional COMEBin bins for downstream conversion:

        • step_state: new
      • Step 38: Optional bins bridge — SemiBin:

        • step_state: new
      • Step 39: Cluster contig fragments with CONCOCT:

        • step_state: new
      • Step 40: Optional bins bridge — MetaBAT2:

        • step_state: new
      • Step 41: Optional bins bridge — MaxBin2:

        • step_state: new
      • Step 42: Create contig-to-bin assignments from COMEBin:

        • step_state: new
      • Step 43: Create contig-to-bin assignments from SemiBin:

        • step_state: new
      • Step 44: Bridge optional CONCOCT fragment clusters:

        • step_state: new
      • Step 45: Create contig-to-bin assignments from MetaBAT2:

        • step_state: new
      • Step 46: Create contig-to-bin assignments from MaxBin2:

        • step_state: new
      • Step 47: Merge CONCOCT fragment clusters into contig assignments:

        • step_state: new
      • Step 48: Bridge optional CONCOCT merged contig assignments:

        • step_state: new
      • Step 49: Extract CONCOCT bins as FASTA collections:

        • step_state: new
      • Step 50: Bridge optional CONCOCT bins:

        • step_state: new
      • Step 51: Create contig-to-bin assignments from CONCOCT:

        • step_state: new
      • Step 52: Collect candidate bins from enabled binners for Binette:

        • step_state: new
      • Step 53: Refine candidate bins with DAS Tool:

        • step_state: new
      • Step 54: Refine candidate bins with Binette:

        • step_state: new
    • Other invocation details
      • error_message

        • Failed to run workflow, invocation ended in [failed] state.
      • history_id

        • e8cfb46dc3ea1d32
      • history_state

        • new
      • invocation_id

        • e8cfb46dc3ea1d32
      • invocation_state

        • failed
      • messages

        • [{'dependent_workflow_step_id': 20, 'hda_id': '566da701b09a887b', 'reason': 'dataset_failed', 'workflow_step_id': 38, 'workflow_step_index_path': None}]
      • workflow_id

        • e8cfb46dc3ea1d32

@paulzierep

Copy link
Copy Markdown
Collaborator Author

Every tool step now carries an annotation that says what the step does instead of repeating its label, covering the Flatten/Cross Product/Apply Rules steps, the per-binner Yes/No gates, the optional-output bridges, the binner steps and the DAS Tool/Binette selectors. A few are worded more briefly than suggested, e.g. the optional-output bridges share one sentence and the flatten step says "Remove collection nesting so results can be pooled or combined; existing datasets are reused". The README describes each step in its own section as well.

@paulzierep

Copy link
Copy Markdown
Collaborator Author

Please hold this PR until galaxyproject/galaxy#24665 is resolved. This workflow contains or embeds mapped pick_value bridges that may encounter the reported duplicate-scheduling bug when job caching is enabled.

A minimal two-step example on EU reproduced the problem: 1,001 input datasets generated 3,000 jobs before cancellation, repeatedly scheduling the same inputs. Caching is a suspected factor, not yet a confirmed cause.

@paulzierep

Copy link
Copy Markdown
Collaborator Author

Thanks @bebatut — followed up on the remaining wording in 9a0d19c8e2: clarified the optional-result bridges and Binette completeness setting, renamed the flatten step as suggested, and explained the JGI depth-table columns in the README.

The reordered inputs, Yes/No binner choices, separate coverage/binning/refinement frames and release 1.1 CHANGELOG section were already in place. The exported inputs entries are runtime-parameter metadata, not extra workflow steps; I retained them.

Also simplified the README introduction, linked to the IWC workflow pages, and documented that combining DAS Tool and Binette results requires downstream dereplication but can still retain contigs in multiple bins. The embedded README is synchronized.

@paulzierep

Copy link
Copy Markdown
Collaborator Author

Added to README and paired-end reads input: multi-sample binning is most effective with up to ~20 samples, performance peaks around 20 (Mineeva et al., Nat. Commun. 2025), and using more than 20 can lead to extensive resource usage (N² mappings, large storage). For >20 or unrelated environments, single-sample binning is often cheaper.

@bebatut bebatut left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot @paulzierep. It looks good to me!
Waiting now for galaxyproject/galaxy#24665

@paulzierep
paulzierep merged commit f5579bc into galaxyproject:main Nov 3, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants