diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b290e09..237c9ed 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,20 +1,21 @@ { + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json", "name": "nfcore", - "image": "nfcore/gitpod:latest", - "remoteUser": "gitpod", - "runArgs": ["--privileged"], + "image": "nfcore/devcontainer:latest", - // Configure tool-specific properties. - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": { - "python.defaultInterpreterPath": "/opt/conda/bin/python" - }, + "remoteUser": "root", + "privileged": true, - // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } + "remoteEnv": { + // Workspace path on the host for mounting with docker-outside-of-docker + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" + }, + + "onCreateCommand": "./.devcontainer/setup.sh", + + "hostRequirements": { + "cpus": 4, + "memory": "16gb", + "storage": "32gb" } } diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100755 index 0000000..9f7188f --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Customise the terminal command prompt +echo "export PROMPT_DIRTRIM=2" >> $HOME/.bashrc +echo "export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] '" >> $HOME/.bashrc +export PROMPT_DIRTRIM=2 +export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] ' + +# Update Nextflow +nextflow self-update + +# Update welcome message +echo "Welcome to the nf-core/isoseq devcontainer!" > /usr/local/etc/vscode-dev-containers/first-run-notice.txt diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 72dda28..0000000 --- a/.editorconfig +++ /dev/null @@ -1,33 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -indent_size = 4 -indent_style = space - -[*.{md,yml,yaml,html,css,scss,js}] -indent_size = 2 - -# These files are edited and tested upstream in nf-core/modules -[/modules/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset -[/subworkflows/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset - -[/assets/email*] -indent_size = unset - -# ignore python and markdown -[*.{py,md}] -indent_style = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index db37ff5..0000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,125 +0,0 @@ -# nf-core/isoseq: Contributing Guidelines - -Hi there! -Many thanks for taking an interest in improving nf-core/isoseq. - -We try to manage the required tasks for nf-core/isoseq using GitHub issues, you probably came to this page when creating one. -Please use the pre-filled template to save time. - -However, don't be put off by this template - other more general issues and suggestions are welcome! -Contributions to the code are even more welcome ;) - -> [!NOTE] -> If you need help using or modifying nf-core/isoseq then the best place to ask is on the nf-core Slack [#isoseq](https://nfcore.slack.com/channels/isoseq) channel ([join our Slack here](https://nf-co.re/join/slack)). - -## Contribution workflow - -If you'd like to write some code for nf-core/isoseq, the standard workflow is as follows: - -1. Check that there isn't already an issue about your idea in the [nf-core/isoseq issues](https://github.com/nf-core/isoseq/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this -2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/isoseq repository](https://github.com/nf-core/isoseq) to your GitHub account -3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). -5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged - -If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). - -## Tests - -You have the option to test your changes locally by running the pipeline. For receiving warnings about process selectors and other `debug` information, it is recommended to use the debug profile. Execute all the tests with the following command: - -```bash -nf-test test --profile debug,test,docker --verbose -``` - -When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. -Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. - -There are typically two types of tests that run: - -### Lint tests - -`nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. - -If any failures or warnings are encountered, please follow the listed URL for more documentation. - -### Pipeline tests - -Each `nf-core` pipeline should be set up with a minimal set of test-data. -`GitHub Actions` then runs the pipeline on this data to ensure that it exits successfully. -If there are any failures then the automated tests fail. -These tests are run both with the latest available version of `Nextflow` and also the minimum required version that is stated in the pipeline code. - -## Patch - -:warning: Only in the unlikely and regretful event of a release happening with a bug. - -- On your own fork, make a new branch `patch` based on `upstream/master`. -- Fix the bug, and bump version (X.Y.Z+1). -- A PR should be made on `master` from patch to directly this particular bug. - -## Getting help - -For further information/help, please consult the [nf-core/isoseq documentation](https://nf-co.re/isoseq/usage) and don't hesitate to get in touch on the nf-core Slack [#isoseq](https://nfcore.slack.com/channels/isoseq) channel ([join our Slack here](https://nf-co.re/join/slack)). - -## Pipeline contribution conventions - -To make the nf-core/isoseq code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. - -### Adding a new step - -If you wish to contribute a new step, please use the following coding standards: - -1. Define the corresponding input channel into your new process from the expected previous process channel -2. Write the process block (see below). -3. Define the output channel if needed (see below). -4. Add any new parameters to `nextflow.config` with a default (see below). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). -6. Add sanity checks and validation for all relevant parameters. -7. Perform local tests to validate that the new code works as expected. -8. If applicable, add a new test command in `.github/workflow/ci.yml`. -9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. -10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. - -### Default values - -Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. - -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. - -### Default processes resource requirements - -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. - -The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. - -### Naming schemes - -Please use the following naming schemes, to make it easy to understand what is going where. - -- initial process channel: `ch_output_from_` -- intermediate and terminal channels: `ch__for_` - -### Nextflow version bumping - -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` - -### Images and figures - -For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). - -## GitHub Codespaces - -This repo includes a devcontainer configuration which will create a GitHub Codespaces for Nextflow development! This is an online developer environment that runs in your browser, complete with VSCode and a terminal. - -To get started: - -- Open the repo in [Codespaces](https://github.com/nf-core/isoseq/codespaces) -- Tools installed - - nf-core - - Nextflow - -Devcontainer specs: - -- [DevContainer config](.devcontainer/devcontainer.json) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b6eb7ba..8add760 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,7 +9,6 @@ body: - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - [nf-core/isoseq pipeline documentation](https://nf-co.re/isoseq/usage) - - type: textarea id: description attributes: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2d1bd6d..506aa25 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,16 +8,16 @@ These are the most common things requested on pull requests (PRs). Remember that PRs should be made against the dev branch, unless you're preparing a pipeline release. -Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/isoseq/tree/master/.github/CONTRIBUTING.md) +Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/isoseq/tree/master/docs/CONTRIBUTING.md) --> ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/isoseq/tree/master/.github/CONTRIBUTING.md) +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/isoseq/tree/master/docs/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/isoseq _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). +- [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/actions/get-shards/action.yml b/.github/actions/get-shards/action.yml new file mode 100644 index 0000000..e2833ee --- /dev/null +++ b/.github/actions/get-shards/action.yml @@ -0,0 +1,69 @@ +name: "Get number of shards" +description: "Get the number of nf-test shards for the current CI job" +inputs: + max_shards: + description: "Maximum number of shards allowed" + required: true + paths: + description: "Component paths to test" + required: false + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +outputs: + shard: + description: "Array of shard numbers" + value: ${{ steps.shards.outputs.shard }} + total_shards: + description: "Total number of shards" + value: ${{ steps.shards.outputs.total_shards }} +runs: + using: "composite" + steps: + - name: Install nf-test + uses: nf-core/setup-nf-test@4069fbbaabe94c08faba4ad261bfa88225ba133f # v2 + with: + version: ${{ env.NFT_VER }} + - name: Get number of shards + id: shards + shell: bash + run: | + # Run nf-test with dynamic parameter + nftest_output=$(nf-test test \ + --profile +docker \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --dry-run \ + --ci \ + --changed-since HEAD^) || { + echo "nf-test command failed with exit code $?" + echo "Full output: $nftest_output" + exit 1 + } + echo "nf-test dry-run output: $nftest_output" + + # Default values for shard and total_shards + shard="[]" + total_shards=0 + + # Check if there are related tests + if echo "$nftest_output" | grep -q 'No tests to execute'; then + echo "No related tests found." + else + # Extract the number of related tests + number_of_shards=$(echo "$nftest_output" | sed -n 's|.*Executed \([0-9]*\) tests.*|\1|p') + if [[ -n "$number_of_shards" && "$number_of_shards" -gt 0 ]]; then + shards_to_run=$(( $number_of_shards < ${{ inputs.max_shards }} ? $number_of_shards : ${{ inputs.max_shards }} )) + shard=$(seq 1 "$shards_to_run" | jq -R . | jq -c -s .) + total_shards="$shards_to_run" + else + echo "Unexpected output format. Falling back to default values." + fi + fi + + # Write to GitHub Actions outputs + echo "shard=$shard" >> $GITHUB_OUTPUT + echo "total_shards=$total_shards" >> $GITHUB_OUTPUT + + # Debugging output + echo "Final shard array: $shard" + echo "Total number of shards: $total_shards" diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml new file mode 100644 index 0000000..4175e3c --- /dev/null +++ b/.github/actions/nf-test/action.yml @@ -0,0 +1,111 @@ +name: "nf-test Action" +description: "Runs nf-test with common setup steps" +inputs: + profile: + description: "Profile to use" + required: true + shard: + description: "Shard number for this CI job" + required: true + total_shards: + description: "Total number of test shards(NOT the total number of matrix jobs)" + required: true + paths: + description: "Test paths" + required: true + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +runs: + using: "composite" + steps: + - name: Setup Nextflow + uses: nf-core/setup-nextflow@893c28b667aedeba26e37f296d260ccc5bc4d914 # v3 + with: + version: "${{ env.NXF_VERSION }}" + + - name: Set up Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: "3.14" + + - name: Install nf-test + uses: nf-core/setup-nf-test@4069fbbaabe94c08faba4ad261bfa88225ba133f # v2 + with: + version: "${{ env.NFT_VER }}" + install-pdiff: true + + - name: Setup apptainer + if: contains(inputs.profile, 'singularity') + uses: eWaterCycle/setup-apptainer@3f706d898c9db585b1d741b4692e66755f3a1b40 # v2.0.0 + + - name: Set up Singularity + if: contains(inputs.profile, 'singularity') + shell: bash + run: | + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR + + - name: Conda setup + if: contains(inputs.profile, 'conda') + uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4 + with: + auto-update-conda: true + conda-solver: libmamba + channels: conda-forge + channel-priority: strict + conda-remove-defaults: true + + - name: Run nf-test + shell: bash + env: + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + run: | + nf-test test \ + --profile=+${{ inputs.profile }} \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --ci \ + --changed-since HEAD^ \ + --verbose \ + --tap=test.tap \ + --shard ${{ inputs.shard }}/${{ inputs.total_shards }} + + # Save the absolute path of the test.tap file to the output + echo "tap_file_path=$(realpath test.tap)" >> $GITHUB_OUTPUT + + - name: Generate test summary + if: always() + shell: bash + run: | + # Add header if it doesn't exist (using a token file to track this) + if [ ! -f ".summary_header" ]; then + echo "# 🚀 nf-test results" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Status | Test Name | Profile | Shard |" >> $GITHUB_STEP_SUMMARY + echo "|:------:|-----------|---------|-------|" >> $GITHUB_STEP_SUMMARY + touch .summary_header + fi + + if [ -f test.tap ]; then + while IFS= read -r line; do + if [[ $line =~ ^ok ]]; then + test_name="${line#ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ✅ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + elif [[ $line =~ ^not\ ok ]]; then + test_name="${line#not ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ❌ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + done < test.tap + else + echo "| ⚠️ | No test results found | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + + - name: Clean up + if: always() + shell: bash + run: | + sudo rm -rf /home/ubuntu/tests/ diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index aa7237c..96d1937 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,40 +1,64 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the main/master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: + workflow_dispatch: + pull_request_review: + types: [submitted] release: types: [published] - workflow_dispatch: + jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/isoseq' + # run only if the PR is approved by at least 2 reviewers and against the master/main branch or manually triggered + if: github.repository == 'nf-core/isoseq' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' || github.event_name == 'release' runs-on: ubuntu-latest steps: - - name: Launch workflow via Seqera Platform - uses: seqeralabs/action-tower-launch@v2 - # TODO nf-core: You can customise AWS full pipeline tests as required - # Add full size test data (but still relatively small datasets for few samples) - # on the `test_full.config` test runs with only one set of parameters + - name: Set revision variable + id: revision + run: | + echo "revision=${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'release') && github.sha || 'dev' }}" >> "$GITHUB_OUTPUT" + - name: Launch workflow via Seqera Platform + uses: seqeralabs/action-tower-launch@51565b514bff1827cf34620de25d0055759f1fc9 # v2 with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/isoseq/work-${{ github.sha }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} + revision: ${{ steps.revision.outputs.revision }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/isoseq/work-${{ steps.revision.outputs.revision }} + nextflow_config: | + plugins { + id 'nf-slack@0.5.0' + } + slack { + enabled = true + bot { + token = '${{ secrets.NFSLACK_BOT_TOKEN }}' + channel = 'isoseq' + } + onStart { + enabled = false + } + onComplete { + message = ':white_check_mark: *isoseq/test_full* completed successfully! :tada:' + } + onError { + message = ':x: *isoseq/test_full* failed :crying_cat_face:' + } + } parameters: | { - "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/isoseq/results-${{ github.sha }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/isoseq/results-${{ steps.revision.outputs.revision }}" } profiles: test_full - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: Seqera Platform debug log file path: | - seqera_platform_action_*.log - seqera_platform_action_*.json + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index e4980e3..67d23c0 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -12,22 +12,22 @@ jobs: steps: # Launch workflow using Seqera Platform CLI tool action - name: Launch workflow via Seqera Platform - uses: seqeralabs/action-tower-launch@v2 + uses: seqeralabs/action-tower-launch@51565b514bff1827cf34620de25d0055759f1fc9 # v2 with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/isoseq/work-${{ github.sha }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/isoseq/work-${{ github.sha }} parameters: | { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/isoseq/results-test-${{ github.sha }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/isoseq/results-test-${{ github.sha }}" } profiles: test - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: Seqera Platform debug log file path: | - seqera_platform_action_*.log - seqera_platform_action_*.json + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 3d40ebb..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: nf-core CI -# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors -on: - push: - branches: - - dev - pull_request: - release: - types: [published] - -env: - NXF_ANSI_LOG: false - -concurrency: - group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" - cancel-in-progress: true - -jobs: - test: - name: Run pipeline with test data - # Only run on push if this is the nf-core dev branch (merged PRs) - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/isoseq') }}" - runs-on: ubuntu-latest - strategy: - matrix: - NXF_VER: - - "23.04.0" - - "latest-everything" - steps: - - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - - name: Install Nextflow - uses: nf-core/setup-nextflow@v2 - with: - version: "${{ matrix.NXF_VER }}" - - - name: Disk space cleanup - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: Run pipeline with test data (uLTRA) - run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results - - - name: Run pipeline with test data (minimap2) - run: | - nextflow run ${GITHUB_WORKSPACE} -profile test_minimap2,docker --outdir ./results diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 0b6b1f2..b694012 100644 --- a/.github/workflows/clean-up.yml +++ b/.github/workflows/clean-up.yml @@ -10,7 +10,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9 + - uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11 with: stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2d20d64..ca2eb82 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -1,86 +1,142 @@ -name: Test successful pipeline download with 'nf-core download' +name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually -# - when a PR is opened or reopened to master branch +# - when a PR is opened or reopened to main/master branch # - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev. on: workflow_dispatch: inputs: testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core download." + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." required: true default: "dev" pull_request: - types: - - opened - - edited - - synchronize - branches: - - master - pull_request_target: branches: + - main - master env: NXF_ANSI_LOG: false jobs: + configure: + runs-on: ubuntu-latest + outputs: + REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} + REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} + REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} + steps: + - name: Get the repository name and current branch + id: get_repo_properties + run: | + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" + download: runs-on: ubuntu-latest + needs: configure steps: + - name: Check out pipeline code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + - name: Install Nextflow - uses: nf-core/setup-nextflow@v2 + uses: nf-core/setup-nextflow@893c28b667aedeba26e37f296d260ccc5bc4d914 # v3 - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 with: - python-version: "3.12" + python-version: "3.14" architecture: "x64" - - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 with: - singularity-version: 3.8.3 + apptainer-version: 1.3.4 + + - name: Read .nf-core.yml + id: read_yml + run: | + echo "nf_core_version=$(yq '.nf_core_version' ${{ github.workspace }}/.nf-core.yml)" >> "$GITHUB_OUTPUT" - name: Install dependencies run: | python -m pip install --upgrade pip - pip install git+https://github.com/nf-core/tools.git@dev + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} - - name: Get the repository name and current branch set as environment variable + - name: Make a cache directory for the container images run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV} - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + mkdir -p ./singularity_container_images - name: Download the pipeline env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core download ${{ env.REPO_LOWERCASE }} \ - --revision ${{ env.REPO_BRANCH }} \ - --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \ + --revision ${{ needs.configure.outputs.REPO_BRANCH }} \ + --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ --container-cache-utilisation 'amend' \ - --download-configuration + --download-configuration 'yes' - name: Inspect download - run: tree ./${{ env.REPOTITLE_LOWERCASE }} + run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} + + - name: Inspect container images + run: tree ./singularity_container_images | tee ./container_initial + + - name: Count the downloaded number of container images + id: count_initial + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Initial container image count: $image_count" + echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT" - name: Run the downloaded pipeline (stub) id: stub_run_pipeline continue-on-error: true env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline - if: ${{ job.steps.stub_run_pipeline.status == failure() }} + if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results + + - name: Count the downloaded number of container images + id: count_afterwards + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Post-pipeline run container image count: $image_count" + echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" + + - name: Compare container image counts + id: count_comparison + run: | + if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} + final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} + difference=$((final_count - initial_count)) + echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" + tree ./singularity_container_images > ./container_afterwards + diff ./container_initial ./container_afterwards + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi + + - name: Upload Nextflow logfile for debugging purposes + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: nextflow_logfile.txt + path: .nextflow.log* + include-hidden-files: true diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix_linting.yml similarity index 71% rename from .github/workflows/fix-linting.yml rename to .github/workflows/fix_linting.yml index 0e22ff2..8da3b4e 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix_linting.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: token: ${{ secrets.nf_core_bot_auth_token }} # indication that the linting is being fixed - name: React on comment - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: eyes @@ -31,30 +31,26 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} - # Install and run pre-commit - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 - with: - python-version: "3.12" - - - name: Install pre-commit - run: pip install pre-commit + - name: Install Nextflow + uses: nf-core/setup-nextflow@893c28b667aedeba26e37f296d260ccc5bc4d914 # v3 - - name: Run pre-commit - id: pre-commit - run: pre-commit run --all-files + # Install and run prek + - name: Run prek + id: prek + uses: j178/prek-action@5337cb91e0fa35a7ff31b9ca345126d8bbbcdf16 # v2 continue-on-error: true # indication that the linting has finished - name: react if linting finished succesfully - if: steps.pre-commit.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + if: steps.prek.outcome == 'success' + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: "+1" - name: Commit & push changes id: commit-and-push - if: steps.pre-commit.outcome == 'failure' + if: steps.prek.outcome == 'failure' run: | git config user.email "core@nf-co.re" git config user.name "nf-core-bot" @@ -67,21 +63,21 @@ jobs: - name: react if linting errors were fixed id: react-if-fixed if: steps.commit-and-push.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: hooray - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: confused - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: issue-number: ${{ github.event.issue.number }} body: | diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index c88fcbf..277f12f 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,11 +1,8 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: - push: - branches: - - dev pull_request: release: types: [published] @@ -14,46 +11,55 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - - name: Set up Python 3.12 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 - with: - python-version: "3.12" - - - name: Install pre-commit - run: pip install pre-commit + - name: Install Nextflow + uses: nf-core/setup-nextflow@893c28b667aedeba26e37f296d260ccc5bc4d914 # v3 - - name: Run pre-commit - run: pre-commit run --all-files + - name: Run prek + uses: j178/prek-action@5337cb91e0fa35a7ff31b9ca345126d8bbbcdf16 # v2 nf-core: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Nextflow - uses: nf-core/setup-nextflow@v2 + uses: nf-core/setup-nextflow@893c28b667aedeba26e37f296d260ccc5bc4d914 # v3 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 with: - python-version: "3.12" + python-version: "3.14" architecture: "x64" + - name: Setup uv + uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0 + + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install nf-core + run: uv tool install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} - - name: Run nf-core lint + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' && github.base_ref != 'main' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: | - cd ${GITHUB_WORKSPACE} - nf-core lint --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' || github.base_ref == 'main' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} @@ -61,7 +67,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: linting-logs path: | diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml new file mode 100644 index 0000000..e363215 --- /dev/null +++ b/.github/workflows/nf-test.yml @@ -0,0 +1,201 @@ +name: Run nf-test +on: + pull_request: + paths-ignore: + - "docs/**" + - "**/meta.yml" + - "**/*.md" + - "**/*.png" + - "**/*.svg" + release: + types: [published] + workflow_dispatch: + +# Cancel if a newer run is started +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NFT_VER: "0.9.4" + NFT_WORKDIR: "~" + NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity + +jobs: + nf-test-changes: + name: nf-test-changes + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-nf-test-changes + - runner=4cpu-linux-x64 + outputs: + shard: ${{ steps.set-shards.outputs.shard }} + total_shards: ${{ steps.set-shards.outputs.total_shards }} + steps: + - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + + - name: get number of shards + id: set-shards + uses: ./.github/actions/get-shards + env: + NFT_VER: ${{ env.NFT_VER }} + with: + max_shards: 7 + + - name: debug + run: | + echo ${{ steps.set-shards.outputs.shard }} + echo ${{ steps.set-shards.outputs.total_shards }} + + nf-test: + name: "${{ matrix.profile }} | ${{ matrix.NXF_VER }} | ${{ matrix.shard }}/${{ needs.nf-test-changes.outputs.total_shards }}" + needs: [nf-test-changes] + if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }} + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-nf-test + - runner=4cpu-linux-x64 + strategy: + fail-fast: false + matrix: + shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} + profile: [conda, docker, singularity] + isMain: + - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} + # Exclude conda and singularity on dev + exclude: + - isMain: false + profile: "conda" + - isMain: false + profile: "singularity" + NXF_VER: + - "25.10.4" + - "latest-everything" + env: + NXF_ANSI_LOG: false + TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} + + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + fetch-depth: 0 + + - name: Run nf-test + id: run_nf_test + uses: ./.github/actions/nf-test + continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} + env: + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + NXF_VERSION: ${{ matrix.NXF_VER }} + with: + profile: ${{ matrix.profile }} + shard: ${{ matrix.shard }} + total_shards: ${{ env.TOTAL_SHARDS }} + + - name: Report test status + if: ${{ always() }} + run: | + if [[ "${{ steps.run_nf_test.outcome }}" == "failure" ]]; then + echo "::error::Test with ${{ matrix.NXF_VER }} failed" + # Add to workflow summary + echo "## ❌ Test failed: ${{ matrix.profile }} | ${{ matrix.NXF_VER }} | Shard ${{ matrix.shard }}/${{ env.TOTAL_SHARDS }}" >> $GITHUB_STEP_SUMMARY + if [[ "${{ matrix.NXF_VER }}" == "latest-everything" ]]; then + echo "::warning::Test with latest-everything failed but will not cause workflow failure. Please check if the error is expected or if it needs fixing." + fi + if [[ "${{ matrix.NXF_VER }}" != "latest-everything" ]]; then + exit 1 + fi + fi + + # continue-on-error keeps latest-everything from failing the job, so it never shows up in + # `needs.nf-test.result` downstream and CI stays green. Surface it via a PR comment instead; + # other NXF_VER failures already fail the job/CI directly, so no comment is needed for those. + - name: Prepare PR comment fragment + if: ${{ always() && steps.run_nf_test.outcome == 'failure' && matrix.NXF_VER == 'latest-everything' }} + run: | + mkdir -p pr-comment-fragment + echo "* ❌ \`${{ matrix.profile }}\` | \`${{ matrix.NXF_VER }}\` | Shard ${{ matrix.shard }}/${{ env.TOTAL_SHARDS }}" > pr-comment-fragment/fragment.md + + - name: Upload PR comment fragment + if: ${{ always() && steps.run_nf_test.outcome == 'failure' && matrix.NXF_VER == 'latest-everything' }} + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: pr-comment-fragment-${{ strategy.job-index }} + path: pr-comment-fragment/ + + confirm-pass: + needs: [nf-test] + if: always() + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-confirm-pass + - runner=2cpu-linux-x64 + steps: + - name: One or more tests failed (excluding latest-everything) + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + - name: One or more tests cancelled + if: ${{ contains(needs.*.result, 'cancelled') }} + run: exit 1 + + - name: All tests ok + if: ${{ contains(needs.*.result, 'success') }} + run: exit 0 + + - name: debug-print + if: always() + run: | + echo "::group::DEBUG: `needs` Contents" + echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}" + echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" + echo "::endgroup::" + + - name: Download PR comment fragments + if: ${{ always() }} + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + continue-on-error: true + with: + pattern: pr-comment-fragment-* + path: pr-comment-fragments + merge-multiple: true + + # Build a comment for the shared pr-comment.yml poster to publish on the PR. + # Based on the fragments above (not needs.*.result) so non-blocking failures are still reported. + - name: Prepare PR comment + if: ${{ always() }} + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + run: | + mkdir -p pr-comment + echo "$PR_NUMBER" > pr-comment/pr_number.txt + echo "nf-test" > pr-comment/header.txt + if [ -d pr-comment-fragments ] && [ -n "$(ls -A pr-comment-fragments)" ]; then + { + echo "## ❌ nf-test failed with latest Nextflow version" + echo "" + echo "> [!NOTE]" + echo "> Tests with Nextflow's latest version failed but it will not cause a CI workflow failure." + echo "> Please check if the failure is expected with newer (edge-)releases of Nextflow or if it needs fixing." + echo "" + cat pr-comment-fragments/*.md + echo "" + echo "See the [full run](${RUN_URL}) for details." + } > pr-comment/comment.md + fi + + - name: Upload PR comment artifact + if: ${{ always() }} + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: pr-comment + path: pr-comment/ diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 03ecfcf..4974f44 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,9 +12,13 @@ jobs: - name: get topics and convert to hashtags id: get_topics run: | - echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT - - uses: rzr/fediverse-action@master + - name: get description + id: get_description + run: | + echo "description=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .description')" >> $GITHUB_OUTPUT + - uses: rzr/fediverse-action@66c2cbb5b1997666b0e28d597631b6a4f09a2719 # v0.0.6 with: access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }} host: "mstdn.science" # custom host if not "mastodon.social" (default) @@ -22,48 +26,15 @@ jobs: # https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#release message: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - + ${{ steps.get_description.outputs.description }} Please see the changelog: ${{ github.event.release.html_url }} ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics - send-tweet: - runs-on: ubuntu-latest - - steps: - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 - with: - python-version: "3.10" - - name: Install dependencies - run: pip install tweepy==4.14.0 - - name: Send tweet - shell: python - run: | - import os - import tweepy - - client = tweepy.Client( - access_token=os.getenv("TWITTER_ACCESS_TOKEN"), - access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), - consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), - consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), - ) - tweet = os.getenv("TWEET") - client.create_tweet(text=tweet) - env: - TWEET: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} - TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} - TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} - TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} - bsky-post: runs-on: ubuntu-latest steps: - - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.0 + - uses: zentered/bluesky-post-action@5a91cc2ad10a304a4e96c16182dbe4918710bcf6 # v0.4.0 with: post: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! diff --git a/.github/workflows/template-version-comment.yml b/.github/workflows/template-version-comment.yml new file mode 100644 index 0000000..149e285 --- /dev/null +++ b/.github/workflows/template-version-comment.yml @@ -0,0 +1,60 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: + pull_request: + +permissions: {} + +jobs: + check_template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Read template version from .nf-core.yml + uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core + + - name: Build PR comment if template is outdated + # The fork-controlled version is passed via the environment and only ever + # used as quoted shell data (never interpolated into a command), so it + # cannot be used for script injection. + env: + PR_VERSION: ${{ steps.read_yml.outputs['nf_core_version'] }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + mkdir -p pr-comment + echo "$PR_NUMBER" > pr-comment/pr_number.txt + echo "template-version" > pr-comment/header.txt + + latest_version=$(nf-core --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -n1) + + if [ -n "$PR_VERSION" ] && [ -n "$latest_version" ] && [ "$PR_VERSION" != "$latest_version" ]; then + cat > pr-comment/comment.md < [!WARNING] + > Newer version of the nf-core template is available. + > + > Your pipeline is using an old version of the nf-core template: ${PR_VERSION}. + > Please update your pipeline to the latest version. + > + > For more documentation on how to update your pipeline, please see the [Synchronisation documentation](https://nf-co.re/docs/developing/template-syncs/overview). + EOF + fi + + - name: Upload PR comment artifact + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: pr-comment + path: pr-comment/ diff --git a/.gitignore b/.gitignore index 2503c16..cc2b1a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -assets/long_reads.fa.gz .nextflow* work/ data/ @@ -7,5 +6,5 @@ results/ testing/ testing* *.pyc -.idea/ -.vscode +null/ +.lineage/ diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 105a182..0000000 --- a/.gitpod.yml +++ /dev/null @@ -1,20 +0,0 @@ -image: nfcore/gitpod:latest -tasks: - - name: Update Nextflow and setup pre-commit - command: | - pre-commit install --install-hooks - nextflow self-update - - name: unset JAVA_TOOL_OPTIONS - command: | - unset JAVA_TOOL_OPTIONS - -vscode: - extensions: # based on nf-core.nf-core-extensionpack - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - # - nextflow.nextflow # Nextflow syntax highlighting - - oderwat.indent-rainbow # Highlight indentation level - - streetsidesoftware.code-spell-checker # Spelling checker for source code - - charliermarsh.ruff # Code linter Ruff diff --git a/.hooks/block_pipeline_outdir.sh b/.hooks/block_pipeline_outdir.sh new file mode 100755 index 0000000..e9ba4f9 --- /dev/null +++ b/.hooks/block_pipeline_outdir.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# This hook is used to block commits if they include staged files inside a directory +# which also contains a subdirectory called `pipeline_info`. The purpose of this is to +# prevent users from inadvertently committing output from pipeline test runs inside the +# development directory. + +set -e + +status=0 +seen_dirs="" + +while IFS= read -r file; do + # The offending output bundle's root is the ancestor directory that has + # `pipeline_info` as an immediate child, so callers can restore it in one go. + if [[ "$file" == pipeline_info/* ]]; then + top_dir="pipeline_info" + elif [[ "$file" == */pipeline_info/* ]]; then + top_dir="${file%%/pipeline_info/*}" + else + top_dir="" + dir=$(dirname "$file") + while [[ "$dir" != "." && "$dir" != "/" ]]; do + if [[ -d "$dir/pipeline_info" ]]; then + top_dir="$dir" + break + fi + dir=$(dirname "$dir") + done + fi + + if [[ -n "$top_dir" ]]; then + echo "❌ Commit blocked: Please do not commit output from pipeline test runs to the pipeline code itself: $file" + status=1 + case "$seen_dirs" in + *"|$top_dir|"*) ;; + *) + echo "Run 'git restore --staged $top_dir' to remove the whole output folder from the staging area." + seen_dirs="$seen_dirs|$top_dir|" + ;; + esac + fi +done < <(git diff --cached --name-only) + +exit "$status" diff --git a/.nf-core.yml b/.nf-core.yml index b2a1c59..a846008 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,8 +1,16 @@ +nf_core_version: 4.1.0 repository_type: pipeline -nf_core_version: "2.14.1" +template: + author: "Sébastien Guizard (@sguizard)" + description: Genes and transcripts annotation with Isoseq using uLTRA and TAMA + force: false + is_nfcore: true + name: isoseq + org: nf-core + outdir: . + version: 3.0.0 lint: files_unchanged: - - ".github/workflows/linting.yml" - - .github/workflows/branch.yml - files_exist: - - .github/workflows/linting_comment.yml + - assets/nf-core-isoseq_logo_light.png + - docs/images/nf-core-isoseq_logo_light.png + - docs/images/nf-core-isoseq_logo_dark.png diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4dc0f1d..e9503db 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,10 +4,47 @@ repos: hooks: - id: prettier additional_dependencies: - - prettier@3.2.5 - - - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "2.7.3" + - prettier@3.9.6 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 hooks: - - id: editorconfig-checker - alias: ec + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/(?!local/).*| + subworkflows/(?!local/).*| + .*\.snap$ + )$ + - id: end-of-file-fixer + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/(?!local/).*| + subworkflows/(?!local/).*| + .*\.snap$ + )$ + - id: check-added-large-files + args: [--maxkb=5000] + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + .*\.snap$| + lib/nfcore_external_java_deps.jar$| + docs/.*\.(svg|pdf)$| + assets/.*$ + )$ + - id: check-merge-conflict + - repo: https://github.com/seqeralabs/nf-lint-pre-commit + rev: v0.3.0 + hooks: + - id: nextflow-lint + files: '\.nf$|nextflow\.config$' + args: ["-output", "json"] + - repo: local + hooks: + - id: block-pipeline-outdir + name: Prevent committing output from pipeline test runs to the pipeline code itself + entry: ./.hooks/block_pipeline_outdir.sh + language: script diff --git a/.prettierignore b/.prettierignore index 437d763..63cde50 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,4 @@ email_template.html -adaptivecard.json -slackreport.json .nextflow* work/ data/ @@ -10,3 +8,7 @@ testing/ testing* *.pyc bin/ +.nf-test/ +ro-crate-metadata.json +modules/nf-core/ +subworkflows/nf-core/ diff --git a/.prettierrc.yml b/.prettierrc.yml index c81f9a7..07dbd8b 100644 --- a/.prettierrc.yml +++ b/.prettierrc.yml @@ -1 +1,6 @@ printWidth: 120 +tabWidth: 4 +overrides: + - files: "*.{md,yml,yaml,html,css,scss,js,cff}" + options: + tabWidth: 2 diff --git a/CHANGELOG.md b/CHANGELOG.md index b4de61a..e21e9af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,78 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## v3.0.0 - Patchwork Zooble [07/08/2026] + +> [!WARNING] +> This is a major release with breaking changes. Samplesheets and command lines written for +> v2.0.0 will not work unmodified. See the migration notes below. + +### `Added` + +- New samplesheet-driven input system: each row declares its own entry point via `start_from`, + allowing subreads, CCS, full-length and long-read FASTA inputs to be mixed in a single run + [#40](https://github.com/nf-core/isoseq/issues/40), [#57](https://github.com/nf-core/isoseq/issues/57) +- Support for multiple libraries (cells) per sample, merged with TAMA +- Input chunking before mapping via the new `chunker` subworkflow, controlled by `chunk_ccs` + and `chunk_mapping` +- Added parameter `tama_merge_all` to allow merging of sample-wise beds into a single annotation bed +- Updated nf-core template to version 4.1.0 + +### `Changed` + +- **Breaking:** the samplesheet format has been redefined. Columns are now + `sample,seq_data,pbi,start_from`, replacing `sample,bam,pbi,reads`. The `seq_data` column + takes any supported input file, and `start_from` (`ccs`, `lima`, `refine` or `mapping`) + declares where that row enters the pipeline. The `None` placeholder is replaced by `none` + for absent `pbi` files. +- **Breaking:** the `chunk` parameter has been split into `chunk_ccs` and `chunk_mapping`, + which independently control chunking of CCS generation and of mapping. +- Software versions are now collected through Nextflow topic channels instead of a dedicated + module. +- `--primers` is no longer unconditionally required. It is only consumed by `LIMA` and + `isoseq refine`, so it is now required only when at least one samplesheet row uses + `start_from` `ccs`, `lima` or `refine`. Runs where every row uses `mapping` can omit it + [#50](https://github.com/nf-core/isoseq/issues/50) + +### `Removed` + +- **Breaking:** removed the `--entrypoint` parameter. Per-row `start_from` in the samplesheet + replaces it, and is strictly more flexible: entry points can now differ between samples + within one run. +- **Breaking:** removed `--max_cpus`, `--max_memory` and `--max_time`. These were replaced by + the `resourceLimits` directive in the nf-core template; set limits in a custom config instead. +- Removed the `--hook_url` parameter, following the nf-core template. +- Removed the `custom/dumpsoftwareversions` module. + +### `Fixed` + +- Updated all nf-core modules to their latest revisions (`bamtools/convert`, `gnu/sort`, + `gstama/collapse`, `gstama/merge`, `gstama/polyacleanup`, `gunzip`, `isoseq/refine`, `lima`, + `minimap2/align`, `multiqc`, `pbccs`, `ultra/align`, `ultra/index`) +- Replaced the `utils_nfvalidation_plugin` subworkflow with `utils_nfschema_plugin`, moving + parameter validation to `nf-schema` 2.5.1 +- Moved local subworkflows into their own directories to follow nf-core guidelines +- Improved samplesheet validation: `start_from` is now an `enum`, file-extension patterns are + correctly anchored, and a `.bam.pbi` index is required when `start_from` is `ccs` + [#48](https://github.com/nf-core/isoseq/issues/48) +- Fixed `CSS` / `CCS` typo in the documentation [#36](https://github.com/nf-core/isoseq/issues/36) +- Removed a vulnerable artifact pattern from the PR-comment workflow + [#61](https://github.com/nf-core/isoseq/pull/61) + +### `Dependencies` + +| Tool | Previous version | New version | +| --------- | ---------------- | ----------- | +| coreutils | 9.3 | 9.5 | +| lima | 2.9.0 | 2.12.0 | +| minimap2 | 2.28 | 2.30 | +| multiqc | 1.24.1 | 1.35 | +| samtools | 1.20 | 1.23.1 | + +### `Deprecated` + +- None + ## v2.0.0 - Sapphire Duck [05/09/2024] New entrypoint option to skip isoseq pre-processing. @@ -48,16 +120,16 @@ Update the pipeline to nf-core 2.9. - Add gnu/sort to sort annotation before uLTRA index - Update citations - Add background to pipeline png - | Tool | Previous version | New version | - | ----------------------- | ---------------- | ----------- | - | isoseq3 | 3.8.1 | 3.8.2 | - | lima | 2.6.0 | 2.7.1 | - | bamtools/convert | 2.5.1 | 2.5.2 | - | gstama/merge | 1.0.2 | 1.0.3 | - | uLTRA/index | 0.0.4.2 | 0.1 | - | uLTRA/align | 0.0.4.2 | 0.1 | - | samtools | 1.17 | 1.17 | - | gnu/sort | ---- | 8.25 | + | Tool | Previous version | New version | + | ---------------- | ---------------- | ----------- | + | isoseq3 | 3.8.1 | 3.8.2 | + | lima | 2.6.0 | 2.7.1 | + | bamtools/convert | 2.5.1 | 2.5.2 | + | gstama/merge | 1.0.2 | 1.0.3 | + | uLTRA/index | 0.0.4.2 | 0.1 | + | uLTRA/align | 0.0.4.2 | 0.1 | + | samtools | 1.17 | 1.17 | + | gnu/sort | ---- | 8.25 | ### `Dependencies` diff --git a/CITATIONS.md b/CITATIONS.md index ba9c0dd..c010a82 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -36,11 +36,9 @@ > Kuo, R.I., Cheng, Y., Zhang, R. et al. Illuminating the dark side of the human transcriptome with long read transcript sequencing. BMC Genomics 21, 751 (2020). - > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. - - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. +> Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. ## Software packaging/containerisation tools @@ -60,6 +58,6 @@ > Merkel, D. (2014). Docker: lightweight linux containers for consistent development and deployment. Linux Journal, 2014(239), 2. doi: 10.5555/2600239.2600241. -- [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) +- [Singularity / Apptainer](https://pubmed.ncbi.nlm.nih.gov/28494014/) > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. diff --git a/LICENSE b/LICENSE index 4b9d949..da41bc4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Sébastien Guizard (@sguizard) +Copyright (c) The nf-core/isoseq team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b989d74..cef920e 100644 --- a/README.md +++ b/README.md @@ -5,25 +5,26 @@ -[![GitHub Actions CI Status](https://github.com/nf-core/isoseq/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/isoseq/actions/workflows/ci.yml) -[![GitHub Actions Linting Status](https://github.com/nf-core/isoseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/isoseq/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/isoseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7116979-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7116979) +[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/isoseq) +[![GitHub Actions CI Status](https://github.com/nf-core/isoseq/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/isoseq/actions/workflows/nf-test.yml) +[![GitHub Actions Linting Status](https://github.com/nf-core/isoseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/isoseq/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/isoseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.13694618-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.13694618) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/isoseq/results) -[![DOI](https://zenodo.org/badge/499464196.svg)](https://zenodo.org/badge/latestdoi/499464196) +[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7116979-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7116979) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.4-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) +[![nf-core template version](https://img.shields.io/badge/nf--core_template-4.1.0-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/4.1.0) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) [![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/isoseq) -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23isoseq-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/isoseq)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23isoseq-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/isoseq)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) ## Introduction **nf-core/isoseq** is a bioinformatics best-practice analysis pipeline for Isoseq gene annotation with uLTRA and TAMA. Starting from raw isoseq subreads, the pipeline: -- Generates the Circular Consensus Sequences (CSS) +- Generates the Circular Consensus Sequences (CCS) - Clean and polish CCS to create Full Length Non Chimeric (FLNC) reads @@ -39,8 +40,8 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary -1. Generate CCS consensuses from raw isoseq subreads ([`PBCCS`](https://github.com/PacificBiosciences/ccs)) -2. Remove primer sequences from consensuses ([`LIMA`](https://github.com/pacificbiosciences/barcoding/)) +1. Generate CCS consensuses from raw isoseq subreads (Optional, [`PBCCS`](https://github.com/PacificBiosciences/ccs)) +2. Remove primer sequences from consensuses (Optional, [`LIMA`](https://github.com/pacificbiosciences/barcoding/)) 3. Detect and remove chimeric reads ([`ISOSEQ3 REFINE`](https://github.com/PacificBiosciences/IsoSeq)) 4. Convert bam file into fasta file ([`BAMTOOLS CONVERT`](https://github.com/pezmaster31/bamtools)) 5. Select reads with a polyA tail and trim it ([`GSTAMA_POLYACLEANUP`](https://github.com/GenomeRIK/tama)) @@ -53,18 +54,22 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Usage > [!NOTE] -> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. +> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/get_started/environment_setup/overview) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/get_started/run-your-first-pipeline) with `-profile test` before running the workflow on actual data. First, prepare a samplesheet with your input data that looks as follows: `samplesheet.csv`: ```csv -sample,bam,pbi,reads -sample1,sample1.subreads.bam,sample1.subreads.bam.pbi,None +sample,seq_data,pbi,start_from +sample1,sample1.subreads.bam,sample1.subreads.bam.pbi,ccs +sample2,sample2.ccs.bam,none,lima +sample3,sample3.fl.primer_5p--primer_3p.bam,none,refine +sample4,sample4.long_reads.fa.gz,none,mapping ``` -Each row represents a pair of raw subreads and it's associated pacbio index (pbi) file fastq files. +The file list all datasets to analyse. Those datasets can be raw subreads, Circular Consensus Sequences (CCS), Full Length sequences produced by LIMA (Pacbio software suite), or long reads sequence Pacbio Hifi (or Oxford Nanopore long reads!) +The first column define the sample ID, the second sequence data file, the third PacBio Index file (subreads only) and the program where to start the analysis. Now, you can run the pipeline using: @@ -78,8 +83,7 @@ nextflow run nf-core/isoseq \ ``` > [!WARNING] -> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; -> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). +> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/running/run-pipelines#using-parameter-files). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/isoseq/usage) and the [parameter documentation](https://nf-co.re/isoseq/parameters). @@ -103,12 +107,13 @@ We thank the following people for their extensive assistance in the development - The nf-core community for their help in the development of this pipeline - [James A. Fellows Yates](https://github.com/jfy133) & nf-core for the metro map style components for pipeline graph - [Júlia Mir Pedrol](https://github.com/mirpedrol) for debugging help +- [Usman Rashid](https://github.com/GallVp) for his contributions on pipeline development This pipeline has been developed as part of the GENE-SWitCH project. This project has received funding from the European Union's Horizon 2020 Research and Innovation Programme under the grant agreement n° 817998. ## Contributions and Support -If you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md). +If you would like to contribute to this pipeline, please see the [contributing guidelines](docs/CONTRIBUTING.md). For further information or help, don't hesitate to get in touch on the [Slack `#isoseq` channel](https://nfcore.slack.com/channels/isoseq) (you can join with [this invite](https://nf-co.re/join/slack)). diff --git a/assets/adaptivecard.json b/assets/adaptivecard.json deleted file mode 100644 index 0d5154a..0000000 --- a/assets/adaptivecard.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "contentUrl": null, - "content": { - "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "msteams": { - "width": "Full" - }, - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "type": "TextBlock", - "size": "Large", - "weight": "Bolder", - "color": "<% if (success) { %>Good<% } else { %>Attention<%} %>", - "text": "nf-core/isoseq v${version} - ${runName}", - "wrap": true - }, - { - "type": "TextBlock", - "spacing": "None", - "text": "Completed at ${dateComplete} (duration: ${duration})", - "isSubtle": true, - "wrap": true - }, - { - "type": "TextBlock", - "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors. The full error message was: ${errorReport}.<% } %>", - "wrap": true - }, - { - "type": "TextBlock", - "text": "The command used to launch the workflow was as follows:", - "wrap": true - }, - { - "type": "TextBlock", - "text": "${commandLine}", - "isSubtle": true, - "wrap": true - } - ], - "actions": [ - { - "type": "Action.ShowCard", - "title": "Pipeline Configuration", - "card": { - "type": "AdaptiveCard", - "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "body": [ - { - "type": "FactSet", - "facts": [<% out << summary.collect{ k,v -> "{\"title\": \"$k\", \"value\" : \"$v\"}"}.join(",\n") %> - ] - } - ] - } - } - ] - } - } - ] -} diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index cce31e5..0bf4411 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -3,8 +3,6 @@ description: "Suggested text and references to use when describing pipeline usag section_name: "nf-core/isoseq Methods Description" section_href: "https://github.com/nf-core/isoseq" plot_type: "html" -## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline -## You inject any metadata in the Nextflow '${workflow}' object data: |

Methods

Data was processed using nf-core/isoseq v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020), utilising reproducible software environments from the Bioconda (Grüning et al., 2018) and Biocontainers (da Veiga Leprevost et al., 2017) projects.

diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 61a8541..47190c7 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/isoseq analysis pipeline. For information about how to interpret - these results, please see the documentation. - + This report has been generated by the nf-core/isoseq + analysis pipeline. For information about how to interpret these results, please see the + documentation. report_section_order: "nf-core-isoseq-methods-description": order: -1000 diff --git a/assets/nf-core-isoseq_logo_light.png b/assets/nf-core-isoseq_logo_light.png index a1ac089..57cac45 100644 Binary files a/assets/nf-core-isoseq_logo_light.png and b/assets/nf-core-isoseq_logo_light.png differ diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv deleted file mode 100644 index cd01ecd..0000000 --- a/assets/samplesheet.csv +++ /dev/null @@ -1,3 +0,0 @@ -sample,bam,pbi -sample1,sample1.subreads.bam,sample1.subreads.bam.pbi -sample2,sample2.subreads.bam,sample2.subreads.bam.pbi diff --git a/assets/samplesheet_map_entrypoint.csv b/assets/samplesheet_map_entrypoint.csv deleted file mode 100644 index a6514c6..0000000 --- a/assets/samplesheet_map_entrypoint.csv +++ /dev/null @@ -1,2 +0,0 @@ -sample,bam,pbi,reads -alz,None,None,/home/sguizard/Work/Dev/github/nf-core/isoseq/assets/long_reads.fa.gz diff --git a/assets/samplesheet_v2_ccs_lima_refine_map.csv b/assets/samplesheet_v2_ccs_lima_refine_map.csv new file mode 100644 index 0000000..6d210fe --- /dev/null +++ b/assets/samplesheet_v2_ccs_lima_refine_map.csv @@ -0,0 +1,5 @@ +sample,seq_data,pbi,start_from +sample1,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/alz.1perc.subreads.10000.bam,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/alz.1perc.subreads.10000.bam.pbi,ccs +sample2,https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/homo_sapiens/pacbio/bam/alz.ccs.bam,none,lima +sample3,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/alz_lima.fl.NEB_5p--NEB_Clontech_3p.bam,none,refine +sample4,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/long_reads.fa.gz,none,mapping diff --git a/assets/samplesheet_v2_ccs_map.csv b/assets/samplesheet_v2_ccs_map.csv new file mode 100644 index 0000000..73b33a4 --- /dev/null +++ b/assets/samplesheet_v2_ccs_map.csv @@ -0,0 +1,3 @@ +sample,seq_data,pbi,start_from +sample1,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/alz.1perc.subreads.10000.bam,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/alz.1perc.subreads.10000.bam.pbi,ccs +sample4,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/long_reads.fa.gz,none,mapping diff --git a/assets/samplesheet_v2_lima_refine_map.csv b/assets/samplesheet_v2_lima_refine_map.csv new file mode 100644 index 0000000..0936775 --- /dev/null +++ b/assets/samplesheet_v2_lima_refine_map.csv @@ -0,0 +1,4 @@ +sample,seq_data,pbi,start_from +sample2,https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/homo_sapiens/pacbio/bam/alz.ccs.bam,none,lima +sample3,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/assets/alz_lima.fl.NEB_5p--NEB_Clontech_3p.bam,none,refine +sample4,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/long_reads.fa.gz,none,mapping diff --git a/assets/samplesheet_v2_map.csv b/assets/samplesheet_v2_map.csv new file mode 100644 index 0000000..d3da2e9 --- /dev/null +++ b/assets/samplesheet_v2_map.csv @@ -0,0 +1,2 @@ +sample,seq_data,pbi,start_from +sample4,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/long_reads.fa.gz,none,mapping diff --git a/assets/samplesheet_v2_refine_map.csv b/assets/samplesheet_v2_refine_map.csv new file mode 100644 index 0000000..9b3aa23 --- /dev/null +++ b/assets/samplesheet_v2_refine_map.csv @@ -0,0 +1,3 @@ +sample,seq_data,pbi,start_from +sample3,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/alz_lima.fl.NEB_5p--NEB_Clontech_3p.bam,none,refine +sample4,https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/long_reads.fa.gz,none,mapping diff --git a/assets/schema_input.json b/assets/schema_input.json index 48d23fb..3564021 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/isoseq/master/assets/schema_input.json", "title": "nf-core/isoseq pipeline - params.input schema", "description": "Schema for the file provided with params.input", @@ -13,28 +13,52 @@ "errorMessage": "Sample name must be provided and cannot contain spaces", "meta": ["id"] }, - "bam": { + "seq_data": { "type": "string", + "pattern": "^\\S+\\.(bam|fa|fa\\.gz)$", "format": "file-path", - "exists": false, - "pattern": "(^\\S+\\.bam$|^None$)", - "errorMessage": "Subreads BAM file must be provided, cannot contain spaces and must have extension '.bam' or being 'None' if the entrypoint is 'map'" + "errorMessage": "Sequence data file must be provided, cannot contain spaces and must have extension '.bam', '.fa' or '.fa.gz'" }, "pbi": { - "type": "string", - "format": "file-path", - "exists": false, - "pattern": "(^\\S+\\.bam\\.pbi$|^None$)", - "errorMessage": "PacBio Index file for BAM subreads cannot contain spaces and must have extension '.bam.pbi' or being 'None' if the entrypoint is 'map'" + "anyOf": [ + { + "type": "string", + "pattern": "^\\S+\\.bam\\.pbi$", + "format": "file-path" + }, + { + "type": "string", + "pattern": "^none$" + } + ], + "errorMessage": "PacBio index for a subreads BAM must have extension '.bam.pbi' and cannot contain spaces. Use 'none' when no index applies." }, - "reads": { + "start_from": { "type": "string", - "format": "file-path", - "exists": false, - "pattern": "(^\\S+\\.fa\\.gz$|^None$)", - "errorMessage": "Long reads file cannot contain spaces and must have extension '.bam.pbi' or being 'None' if the entrypoint is 'isoseq'" + "enum": ["ccs", "lima", "refine", "mapping"], + "errorMessage": "start_from must be one of: ccs, lima, refine, mapping", + "meta": ["start_from"] } }, - "required": ["sample"] + "required": ["sample", "seq_data", "start_from"], + "allOf": [ + { + "if": { + "properties": { + "start_from": { "const": "ccs" } + }, + "required": ["start_from"] + }, + "then": { + "required": ["pbi"], + "properties": { + "pbi": { + "pattern": "^\\S+\\.bam\\.pbi$", + "errorMessage": "A PacBio index file ('.bam.pbi') is required when start_from is 'ccs'" + } + } + } + } + ] } } diff --git a/assets/slackreport.json b/assets/slackreport.json deleted file mode 100644 index 042ab1e..0000000 --- a/assets/slackreport.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "attachments": [ - { - "fallback": "Plain-text summary of the attachment.", - "color": "<% if (success) { %>good<% } else { %>danger<%} %>", - "author_name": "nf-core/isoseq ${version} - ${runName}", - "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", - "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", - "fields": [ - { - "title": "Command used to launch the workflow", - "value": "```${commandLine}```", - "short": false - } - <% - if (!success) { %> - , - { - "title": "Full error message", - "value": "```${errorReport}```", - "short": false - }, - { - "title": "Pipeline configuration", - "value": "<% out << summary.collect{ k,v -> k == "hook_url" ? "_${k}_: (_hidden_)" : ( ( v.class.toString().contains('Path') || ( v.class.toString().contains('String') && v.contains('/') ) ) ? "_${k}_: `${v}`" : (v.class.toString().contains('DateTime') ? ("_${k}_: " + v.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM))) : "_${k}_: ${v}") ) }.join(",\n") %>", - "short": false - } - <% } - %> - ], - "footer": "Completed at <% out << dateComplete.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM)) %> (duration: ${duration})" - } - ] -} diff --git a/conf/base.config b/conf/base.config index 73006d1..7898995 100644 --- a/conf/base.config +++ b/conf/base.config @@ -10,45 +10,48 @@ process { - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } - errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in ((130..145) + 104 + (175..177)) ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' // Process-specific resource requirements - // NOTE - Please try and re-use the labels below as much as possible. + // NOTE - Please try and reuse the labels below as much as possible. // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { 20.h * task.attempt } + } + withLabel:process_low_memory { + memory = { 1.GB * task.attempt } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + memory = { 200.GB * task.attempt } } withLabel:error_ignore { errorStrategy = 'ignore' @@ -57,4 +60,8 @@ process { errorStrategy = 'retry' maxRetries = 2 } + withLabel: process_gpu { + ext.use_gpu = { workflow.profile.contains('gpu') } + accelerator = { workflow.profile.contains('gpu') ? 1 : null } + } } diff --git a/conf/containers_conda_lock_files_amd64.config b/conf/containers_conda_lock_files_amd64.config new file mode 100644 index 0000000..eb32fe5 --- /dev/null +++ b/conf/containers_conda_lock_files_amd64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { conda = 'modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt' } } diff --git a/conf/containers_conda_lock_files_arm64.config b/conf/containers_conda_lock_files_arm64.config new file mode 100644 index 0000000..3733ddf --- /dev/null +++ b/conf/containers_conda_lock_files_arm64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { conda = 'modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt' } } diff --git a/conf/containers_docker_amd64.config b/conf/containers_docker_amd64.config new file mode 100644 index 0000000..ea18c3f --- /dev/null +++ b/conf/containers_docker_amd64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { container = 'community.wave.seqera.io/library/multiqc:1.35--c17fb751507e9dfc' } } diff --git a/conf/containers_docker_arm64.config b/conf/containers_docker_arm64.config new file mode 100644 index 0000000..369f743 --- /dev/null +++ b/conf/containers_docker_arm64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { container = 'community.wave.seqera.io/library/multiqc:1.35--5c84a5000a226ab5' } } diff --git a/conf/containers_singularity_https_amd64.config b/conf/containers_singularity_https_amd64.config new file mode 100644 index 0000000..932fc7c --- /dev/null +++ b/conf/containers_singularity_https_amd64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { container = 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c8/c8e346f4f6080eadf1253505e6ff09ef004454fc18e8d672006fd7b222cc412e/data' } } diff --git a/conf/containers_singularity_https_arm64.config b/conf/containers_singularity_https_arm64.config new file mode 100644 index 0000000..4f79532 --- /dev/null +++ b/conf/containers_singularity_https_arm64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { container = 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e4/e48aa28aebc881254a499b24c3e1ce77b8df1b85a5432699ed6f72eb17ac7fb5/data' } } diff --git a/conf/containers_singularity_oras_amd64.config b/conf/containers_singularity_oras_amd64.config new file mode 100644 index 0000000..2fa065b --- /dev/null +++ b/conf/containers_singularity_oras_amd64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { container = 'oras://community.wave.seqera.io/library/multiqc:1.35--c680f2aea25ccec2' } } diff --git a/conf/containers_singularity_oras_arm64.config b/conf/containers_singularity_oras_arm64.config new file mode 100644 index 0000000..84f0792 --- /dev/null +++ b/conf/containers_singularity_oras_arm64.config @@ -0,0 +1 @@ +process { withName: 'MULTIQC' { container = 'oras://community.wave.seqera.io/library/multiqc:1.35--c0468833d65b2f81' } } diff --git a/conf/igenomes.config b/conf/igenomes.config index 3f11437..b8c8154 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -8,433 +8,431 @@ ---------------------------------------------------------------------------------------- */ -params { +params.genomes = [ // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'CHM13' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" - bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" - gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" - mito_name = "chrM" - } - 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" - } - 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" - } - 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" - } - 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" - } - 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" - } - 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" - } - 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" - } - 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" - } - 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" - } - 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" - } - 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" - } - 'Rnor_5.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" - } - 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" - } - 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" - } - 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" - } - 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" - } - 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" - } - 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" - } - 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" - } - 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.37e9" - } - 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" - } - 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" - } - 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" - } - 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" - } - 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" - } - 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" - } - } -} + 'GRCh37' : [ + fasta : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt", + mito_name : "MT", + macs_gsize : "2.7e9", + blacklist : "${projectDir}/assets/blacklists/GRCh37-blacklist.bed", + ], + 'GRCh38' : [ + fasta : "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed", + mito_name : "chrM", + macs_gsize : "2.7e9", + blacklist : "${projectDir}/assets/blacklists/hg38-blacklist.bed", + ], + 'CHM13' : [ + fasta : "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/", + bwamem2 : "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/", + gtf : "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf", + gff : "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz", + mito_name : "chrM", + ], + 'GRCm38' : [ + fasta : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt", + mito_name : "MT", + macs_gsize : "1.87e9", + blacklist : "${projectDir}/assets/blacklists/GRCm38-blacklist.bed", + ], + 'TAIR10' : [ + fasta : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt", + mito_name : "Mt", + ], + 'EB2' : [ + fasta : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt", + ], + 'UMD3.1' : [ + fasta : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt", + mito_name : "MT", + ], + 'WBcel235' : [ + fasta : "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed", + mito_name : "MtDNA", + macs_gsize : "9e7", + ], + 'CanFam3.1' : [ + fasta : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt", + mito_name : "MT", + ], + 'GRCz10' : [ + fasta : "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed", + mito_name : "MT", + ], + 'BDGP6' : [ + fasta : "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed", + mito_name : "M", + macs_gsize : "1.2e8", + ], + 'EquCab2' : [ + fasta : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt", + mito_name : "MT", + ], + 'EB1' : [ + fasta : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt", + ], + 'Galgal4' : [ + fasta : "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed", + mito_name : "MT", + ], + 'Gm01' : [ + fasta : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt", + ], + 'Mmul_1' : [ + fasta : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt", + mito_name : "MT", + ], + 'IRGSP-1.0' : [ + fasta : "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed", + mito_name : "Mt", + ], + 'CHIMP2.1.4' : [ + fasta : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt", + mito_name : "MT", + ], + 'Rnor_5.0' : [ + fasta : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed", + mito_name : "MT", + ], + 'Rnor_6.0' : [ + fasta : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed", + mito_name : "MT", + ], + 'R64-1-1' : [ + fasta : "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed", + mito_name : "MT", + macs_gsize : "1.2e7", + ], + 'EF2' : [ + fasta : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt", + mito_name : "MT", + macs_gsize : "1.21e7", + ], + 'Sbi1' : [ + fasta : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt", + ], + 'Sscrofa10.2' : [ + fasta : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt", + mito_name : "MT", + ], + 'AGPv3' : [ + fasta : "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed", + mito_name : "Mt", + ], + 'hg38' : [ + fasta : "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed", + mito_name : "chrM", + macs_gsize : "2.7e9", + blacklist : "${projectDir}/assets/blacklists/hg38-blacklist.bed", + ], + 'hg19' : [ + fasta : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt", + mito_name : "chrM", + macs_gsize : "2.7e9", + blacklist : "${projectDir}/assets/blacklists/hg19-blacklist.bed", + ], + 'mm10' : [ + fasta : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt", + mito_name : "chrM", + macs_gsize : "1.87e9", + blacklist : "${projectDir}/assets/blacklists/mm10-blacklist.bed", + ], + 'bosTau8' : [ + fasta : "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed", + mito_name : "chrM", + ], + 'ce10' : [ + fasta : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt", + mito_name : "chrM", + macs_gsize : "9e7", + ], + 'canFam3' : [ + fasta : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt", + mito_name : "chrM", + ], + 'danRer10' : [ + fasta : "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed", + mito_name : "chrM", + macs_gsize : "1.37e9", + ], + 'dm6' : [ + fasta : "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed", + mito_name : "chrM", + macs_gsize : "1.2e8", + ], + 'equCab2' : [ + fasta : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt", + mito_name : "chrM", + ], + 'galGal4' : [ + fasta : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt", + mito_name : "chrM", + ], + 'panTro4' : [ + fasta : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt", + mito_name : "chrM", + ], + 'rn6' : [ + fasta : "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed", + mito_name : "chrM", + ], + 'sacCer3' : [ + fasta : "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/", + readme : "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt", + mito_name : "chrM", + macs_gsize : "1.2e7", + ], + 'susScr3' : [ + fasta : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa", + bwa : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/", + bowtie2 : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/", + star : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/", + bismark : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/", + gtf : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf", + bed12 : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed", + readme : "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt", + mito_name : "chrM", + ], +] diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 0000000..b4034d8 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index 96d5ae1..661a0ff 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -107,23 +107,15 @@ process { ext.args = "--isoseq" } - if (params.capped == true) { - withName: GSTAMA_COLLAPSE { - publishDir = [ - path: { "${params.outdir}/07_GSTAMA_COLLAPSE" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = "-x capped -b BAM -a ${params.five_prime} -m ${params.splice_junction} -z ${params.three_prime}" - } - } else { - withName: GSTAMA_COLLAPSE { - publishDir = [ - path: { "${params.outdir}/07_GSTAMA_COLLAPSE" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = "-x no_cap -b BAM -a ${params.five_prime} -m ${params.splice_junction} -z ${params.three_prime}" + withName: GSTAMA_COLLAPSE { + publishDir = [ + path: { "${params.outdir}/07_GSTAMA_COLLAPSE" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + ext.args = { + def cap_flag = params.capped ? 'capped' : 'no_cap' + "-x ${cap_flag} -b BAM -a ${params.five_prime} -m ${params.splice_junction} -z ${params.three_prime}" } } @@ -144,20 +136,4 @@ process { ext.args = "-a ${params.five_prime} -m ${params.splice_junction} -z ${params.three_prime}" } - withName: SAMPLESHEET_CHECK { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: CUSTOM_DUMPSOFTWAREVERSIONS { - publishDir = [ - path: { "${params.outdir}/multiqc" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } diff --git a/conf/test.config b/conf/test.config index 491a9a6..129d574 100644 --- a/conf/test.config +++ b/conf/test.config @@ -10,22 +10,26 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/samplesheet.csv' - primers = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/primers.fasta' - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' - gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/reference/Homo_sapiens.GRCh38.104.chr.13_18_19.gtf' + input = params.pipelines_testdata_base_path + 'samplesheet_v2_ccs.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + gtf = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.104.chr.13_18_19.gtf' rq = 0.9 - chunk = 5 + chunk_ccs = 5 + chunk_mapping = 500 five_prime = 100 splice_junction = 10 three_prime = 100 diff --git a/conf/test_full.config b/conf/test_full.config index 0302104..c0c4088 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,10 +15,11 @@ params { config_profile_description = 'Full test dataset to check pipeline function' // Input data for full size test - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/samplesheet_full.csv' - primers = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/primers_complete.fasta' + input = params.pipelines_testdata_base_path + 'samplesheet_v2_full.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers_complete.fasta' rq = 0.9 - chunk = 100 + chunk_ccs = 100 + chunk_mapping = 100000 five_prime = 100 splice_junction = 10 three_prime = 100 diff --git a/conf/test_minimap2.config b/conf/test_minimap2.config index fe07514..225bb5b 100644 --- a/conf/test_minimap2.config +++ b/conf/test_minimap2.config @@ -10,21 +10,25 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Test profile - Minimap2 path' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/samplesheet.csv' - primers = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/primers.fasta' - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + input = params.pipelines_testdata_base_path + 'samplesheet_v2_ccs.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' rq = 0.9 - chunk = 5 + chunk_ccs = 5 + chunk_mapping = 500 five_prime = 100 splice_junction = 10 three_prime = 100 diff --git a/conf/test_minimap2_map_entrypoint.config b/conf/test_samplesheet_v2_ccs.config similarity index 55% rename from conf/test_minimap2_map_entrypoint.config rename to conf/test_samplesheet_v2_ccs.config index 7c11013..43ba727 100644 --- a/conf/test_minimap2_map_entrypoint.config +++ b/conf/test_samplesheet_v2_ccs.config @@ -10,26 +10,28 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { - config_profile_name = 'Test profile - Minimap2 path - Entrypoint map' + config_profile_name = 'Test inputs ccs' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/samplesheet_map_entrypoint.csv' - primers = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/primers.fasta' - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' - - chunk = 100 + input = params.pipelines_testdata_base_path + 'samplesheet_v2_ccs.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 500 five_prime = 100 splice_junction = 10 three_prime = 100 capped = true - aligner = 'minimap2' - entrypoint = 'map' } diff --git a/conf/test_samplesheet_v2_ccs_lima_refine_map.config b/conf/test_samplesheet_v2_ccs_lima_refine_map.config new file mode 100644 index 0000000..8f0415a --- /dev/null +++ b/conf/test_samplesheet_v2_ccs_lima_refine_map.config @@ -0,0 +1,37 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs ccs lima refine map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_ccs_lima_refine_map.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 500 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_samplesheet_v2_ccs_lima_refine_map_mergeAll.config b/conf/test_samplesheet_v2_ccs_lima_refine_map_mergeAll.config new file mode 100644 index 0000000..16219a8 --- /dev/null +++ b/conf/test_samplesheet_v2_ccs_lima_refine_map_mergeAll.config @@ -0,0 +1,38 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs ccs lima refine map and merge all samples' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_ccs_lima_refine_map.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 500 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' + tama_merge_all = true +} diff --git a/conf/test_samplesheet_v2_ccs_map.config b/conf/test_samplesheet_v2_ccs_map.config new file mode 100644 index 0000000..90fe6e2 --- /dev/null +++ b/conf/test_samplesheet_v2_ccs_map.config @@ -0,0 +1,37 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs ccs map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_ccs_map.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 55 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_samplesheet_v2_lima.config b/conf/test_samplesheet_v2_lima.config new file mode 100644 index 0000000..21d9782 --- /dev/null +++ b/conf/test_samplesheet_v2_lima.config @@ -0,0 +1,37 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs lima refine map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_lima.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 500 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_samplesheet_v2_lima_refine_map.config b/conf/test_samplesheet_v2_lima_refine_map.config new file mode 100644 index 0000000..e744b99 --- /dev/null +++ b/conf/test_samplesheet_v2_lima_refine_map.config @@ -0,0 +1,37 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs lima refine map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_lima_refine_map.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 500 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_samplesheet_v2_map.config b/conf/test_samplesheet_v2_map.config new file mode 100644 index 0000000..e881a73 --- /dev/null +++ b/conf/test_samplesheet_v2_map.config @@ -0,0 +1,40 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + // NOTE: `primers` is deliberately omitted. Every row of samplesheet_v2_map.csv uses + // start_from 'mapping', so LIMA and ISOSEQ_REFINE never run and no primer file is + // needed. This profile is the regression test for + // https://github.com/nf-core/isoseq/issues/50 - do not add `primers` back. + input = params.pipelines_testdata_base_path + 'samplesheet_v2_map.csv' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 55 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_samplesheet_v2_multi_lib.config b/conf/test_samplesheet_v2_multi_lib.config new file mode 100644 index 0000000..8bad7c1 --- /dev/null +++ b/conf/test_samplesheet_v2_multi_lib.config @@ -0,0 +1,37 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs ccs lima refine map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_multi_lib.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 500 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_samplesheet_v2_refine.config b/conf/test_samplesheet_v2_refine.config new file mode 100644 index 0000000..5f2e105 --- /dev/null +++ b/conf/test_samplesheet_v2_refine.config @@ -0,0 +1,37 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs refine map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_refine.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 55 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_samplesheet_v2_refine_map.config b/conf/test_samplesheet_v2_refine_map.config new file mode 100644 index 0000000..9df2dc1 --- /dev/null +++ b/conf/test_samplesheet_v2_refine_map.config @@ -0,0 +1,37 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/isoseq -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test inputs refine map' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'samplesheet_v2_refine_map.csv' + primers = params.pipelines_testdata_base_path + 'testdata/primers.fasta' + fasta = params.pipelines_testdata_base_path + 'reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' + rq = 0.9 + chunk_ccs = 5 + chunk_mapping = 55 + five_prime = 100 + splice_junction = 10 + three_prime = 100 + capped = true + aligner = 'minimap2' +} diff --git a/conf/test_ultra_map_entrypoint.config b/conf/test_ultra_map_entrypoint.config deleted file mode 100644 index 0ac7c19..0000000 --- a/conf/test_ultra_map_entrypoint.config +++ /dev/null @@ -1,36 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test. - - Use as follows: - nextflow run nf-core/isoseq -profile test, --outdir - ----------------------------------------------------------------------------------------- -*/ - -params { - config_profile_name = 'Test profile - ULTRA path - Entrypoint map' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - - // Input data - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/samplesheet_map_entrypoint.csv' - primers = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/testdata/primers.fasta' - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/reference/Homo_sapiens.GRCh38.dna.chromosome.19.fasta' - gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/reference/Homo_sapiens.GRCh38.104.chr.13_18_19.gtf' - - chunk = 100 - five_prime = 100 - splice_junction = 10 - three_prime = 100 - capped = true - - aligner = 'ultra' - entrypoint = 'map' -} diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000..8dfad3d --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,185 @@ +--- +title: Contributing +markdownPlugin: checklist +--- + +# `nf-core/isoseq`: Contributing guidelines + +Hi there! +Thanks for taking an interest in improving nf-core/isoseq. + +This page describes the recommended nf-core way to contribute to both nf-core/isoseq and nf-core pipelines in general, including: + +- [General contribution guidelines](#general-contribution-guidelines): common procedures or guides across all nf-core pipelines. +- [Pipeline-specific contribution guidelines](#pipeline-specific-contribution-guidelines): procedures or guides specific to the development conventions of nf-core/isoseq. + +> [!NOTE] +> If you need help using or modifying nf-core/isoseq, ask on the nf-core Slack [#isoseq](https://nfcore.slack.com/channels/isoseq) channel ([join our Slack here](https://nf-co.re/join/slack)). + +## General contribution guidelines + +### Contribution quick start + +To contribute code to any nf-core pipeline: + +- [ ] Ensure you have Nextflow, nf-core tools, and nf-test installed. See the [nf-core/tools repository](https://github.com/nf-core/tools) for instructions. +- [ ] Check whether a GitHub [issue](https://github.com/nf-core/isoseq/issues) about your idea already exists. If an issue does not exist, create one so that others are aware you are working on it. +- [ ] [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/isoseq repository](https://github.com/nf-core/isoseq) to your GitHub account. +- [ ] Create a branch on your forked repository and make your changes following [pipeline conventions](#pipeline-contribution-conventions) (if applicable). +- [ ] To fix major bugs, name your branch `patch` and follow the [patch release](#patch-release) process. +- [ ] Update relevant documentation within the `docs/` folder, use nf-core/tools to update `nextflow_schema.json`, and update `CITATIONS.md`. +- [ ] Run and/or update tests. See [Testing](#testing) for more information. +- [ ] [Lint](#lint-tests) your code with nf-core/tools. +- [ ] Submit a pull request (PR) against the `dev` branch and request a review. + +If you are not used to this workflow with Git, see the [GitHub documentation](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or [Git resources](https://try.github.io/) for more information. + +## Use of AI and LLMs + +The nf-core stance on the use of AI and LLMs is that humans are still ultimately responsible for their submitted code, regardless of the tools they use. + +If you’re using AI tools, try to stick by these guidelines: + +- Keep PRs as small and focused as possible +- Avoid any unnecessary changes, such as moving or refactoring code (unless that is the explicit intention of the PR) +- Review all generated code yourself before opening a PR, and ensure that you understand it +- Engage with the community review process and expect to make revisions + +For more detail, see the [blog post](https://nf-co.re/blog/2026/statement-on-ai) for a statement from the nf-core/core team. + +### Getting help + +For further information and help, see the [nf-core/isoseq documentation](https://nf-co.re/isoseq/usage) or ask on the nf-core [#isoseq](https://nfcore.slack.com/channels/isoseq) Slack channel ([join our Slack here](https://nf-co.re/join/slack)). + +### GitHub Codespaces + +You can contribute to nf-core/isoseq without installing a local development environment on your machine by using [GitHub Codespaces](https://github.com/codespaces). + +[GitHub Codespaces](https://github.com/codespaces) is an online developer environment that runs in your browser, complete with VS Code and a terminal. +Most nf-core repositories include a devcontainer configuration, which creates a GitHub Codespaces environment specifically for Nextflow development. +The environment includes pre-installed nf-core tools, Nextflow, and a few other helpful utilities via a Docker container. + +To get started, open the repository in [Codespaces](https://github.com/nf-core/isoseq/codespaces). + +### Testing + +Once you have made your changes, run the pipeline with nf-test to test them locally. +For additional information, use the `--verbose` flag to view the Nextflow console log output. + +```bash +nf-test test --tag test --profile +docker --verbose +``` + +If you have added new functionality, ensure you update the test assertions in the `.nf.test` files in the `tests/` directory. +Update the snapshots with the following command: + +```bash +nf-test test --tag test --profile +docker --verbose --update-snapshots +``` + +When you create a pull request with changes, GitHub Actions will run automatic tests. +Pull requests are typically reviewed when these tests are passing. + +Two types of tests are typically run: + +#### Lint tests + +nf-core has a [set of guidelines](https://nf-co.re/docs/specifications/overview) which all pipelines must follow. +To enforce these, run linting with nf-core/tools: + +```bash +nf-core pipelines lint +``` + +If you encounter failures or warnings, follow the linked documentation printed to screen. +For more information about linting tests, see [nf-core/tools API documentation](https://nf-co.re/docs/nf-core-tools/api_reference/latest/pipeline_lint_tests/actions_awsfulltest). + +#### Pipeline tests + +Each nf-core pipeline should be set up with a minimal set of test data. +GitHub Actions runs the pipeline on this data to ensure it runs through and exits successfully. +If there are any failures then the automated tests fail. +These tests are run with the latest available version of Nextflow and the minimum required version specified in the pipeline code. + +### Patch release + +> [!WARNING] +> Only in the unlikely event of a release that contains a critical bug. + +- [ ] Create a new branch `patch` on your fork based on `upstream/main` or `upstream/master`. +- [ ] Fix the bug and use nf-core/tools to bump the version to the next semantic version, for example, `1.2.3` → `1.2.4`. +- [ ] Open a Pull Request from `patch` directly to `main`/`master` with the changes. + +### Pipeline contribution conventions + +nf-core semi-standardises how you write code and other contributions to make the nf-core/isoseq code and processing logic more understandable for new contributors and to ensure quality. + +#### Add a new pipeline step + +To contribute a new step to the pipeline, follow the general nf-core coding procedure. +Please also refer to the [pipeline-specific contribution guidelines](#pipeline-specific-contribution-guidelines): + +- [ ] Define the corresponding [input channel](#channel-naming-schemes) into your new process from the expected previous process channel. +- [ ] Install a module with nf-core/tools, or write a local module (see [default processes resource requirements](#default-processes-resource-requirements)), and add it to the target `.nf`. +- [ ] Define the output channel if needed. Mix the version output channel into `ch_versions` and relevant files into `ch_multiqc`. +- [ ] Add new or updated parameters to `nextflow.config` with a [default value](#default-parameter-values). +- [ ] Add new or updated parameters and relevant help text to `nextflow_schema.json` with [nf-core/tools](#default-parameter-values). +- [ ] Add validation for relevant parameters to the pipeline utilisation section of `utils_nfcore_\_pipeline/main.nf` subworkflow. +- [ ] Perform local tests to validate that the new code works as expected. + - [ ] If applicable, add a new test in the `tests` directory. +- [ ] Update `usage.md`, `output.md`, and `citation.md` as appropriate. +- [ ] [Lint](#lint-tests) the code with nf-core/tools. +- [ ] Update any diagrams or pipeline images as necessary. +- [ ] Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name cleanup, and module plots are in the appropriate order. +- [ ] If applicable, create a [MultiQC](https://seqera.io/multiqc/) module. +- [ ] Add a description of the output files and, if relevant, images from the MultiQC report to `docs/output.md`. + +To update the minimum required Nextflow version, see the [Nextflow version bumping](#nextflow-version-bumping) section below. For more information about pipeline contributions, see [pipeline-specific contribution guidelines](#pipeline-specific-contribution-guidelines). + +#### Channel naming schemes + +Use the following naming schemes for channels to make the channel flow easier to understand: + +- Initial process channel: `ch_output_from_` +- Intermediate and terminal channels: `ch__for_` + +#### Default parameter values + +Parameters should be initialised and defined with default values within the `params` scope in `nextflow.config`. +They should also be documented in the pipeline JSON schema. + +To update `nextflow_schema.json`, run: + +```bash +nf-core pipelines schema build +``` + +The schema builder interface that loads in your browser should automatically update the defaults in the parameter documentation. + +#### Default processes resource requirements + +If you write a local module, specify a default set of resource requirements for the process. + +Sensible defaults for process resource requirements (CPUs, memory, time) should be defined in `conf/base.config`. +Specify these with generic `withLabel:` selectors, so they can be shared across multiple processes and steps of the pipeline. + +nf-core provides a set of standard labels that you should follow where possible, as seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config). +These labels define resource defaults for single-core processes, modules that require a GPU, and different levels of multi-core configurations with increasing memory requirements. + +Values assigned within these labels can be dynamically passed to a tool using the `${task.cpus}` and `${task.memory}` Nextflow variables in the `script:` block of a module (see an example in the [modules repository](https://github.com/nf-core/modules/blob/bd1b6a40f55933d94b8c9ca94ec8c1ea0eaf4b82/modules/nf-core/samtools/bam2fq/main.nf#L30)). + +#### Nextflow version bumping + +If you use a new feature from core Nextflow, bump the minimum required Nextflow version in the pipeline with: + +```bash +nf-core pipelines bump-version --nextflow . +``` + +#### Images and figures guidelines + +If you update images or graphics, follow the nf-core [style guidelines](https://nf-co.re/docs/community/brand/workflow-schematics). + +## Pipeline specific contribution guidelines + + diff --git a/docs/images/Isoseq_pipeline_metro.eps b/docs/images/Isoseq_pipeline_metro.eps index ab9cb8b..5acd279 100644 --- a/docs/images/Isoseq_pipeline_metro.eps +++ b/docs/images/Isoseq_pipeline_metro.eps @@ -1,10 +1,10 @@ %!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.18.0 (https://cairographics.org) -%%CreationDate: Fri May 17 17:21:38 2024 +%%Creator: cairo 1.16.0 (https://cairographics.org) +%%CreationDate: Thu Nov 27 23:05:47 2025 %%Pages: 1 %%DocumentData: Clean7Bit %%LanguageLevel: 3 -%%BoundingBox: 0 1 741 580 +%%BoundingBox: 0 0 783 612 %%EndComments %%BeginProlog 50 dict begin @@ -74,11 +74,9 @@ /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for Encoding 32 /space put -Encoding 46 /period put Encoding 65 /A put Encoding 66 /B put Encoding 67 /C put -Encoding 69 /E put Encoding 70 /F put Encoding 71 /G put Encoding 73 /I put @@ -112,337 +110,329 @@ Encoding 118 /v put Encoding 120 /x put Encoding 121 /y put Encoding 122 /z put -/CharStrings 40 dict dup begin +/CharStrings 38 dict dup begin /.notdef 0 def -/E 1 def -/n 2 def -/t 3 def -/r 4 def -/y 5 def -/p 6 def -/o 7 def -/i 8 def +/G 1 def +/e 2 def +/n 3 def +/space 4 def +/m 5 def +/o 6 def +/d 7 def +/l 8 def /s 9 def -/e 10 def -/q 11 def -/m 12 def -/a 13 def -/g 14 def -/f 15 def -/R 16 def -/c 17 def -/A 18 def -/I 19 def -/d 20 def -/x 21 def -/S 22 def -/G 23 def -/P 24 def -/space 25 def -/l 26 def -/L 27 def -/M 28 def -/b 29 def -/v 30 def -/h 31 def -/period 32 def -/z 33 def -/U 34 def -/C 35 def -/u 36 def -/B 37 def -/F 38 def -/T 39 def +/c 10 def +/a 11 def +/i 12 def +/g 13 def +/L 14 def +/t 15 def +/f 16 def +/p 17 def +/M 18 def +/r 19 def +/S 20 def +/h 21 def +/R 22 def +/v 23 def +/y 24 def +/A 25 def +/I 26 def +/x 27 def +/U 28 def +/z 29 def +/P 30 def +/C 31 def +/u 32 def +/B 33 def +/F 34 def +/T 35 def +/b 36 def +/q 37 def end readonly def /sfnts [ -<000100000009008000030010637674206d5f6ba100001edc000002886670676d7e61b6110000 -2164000007b4676c7966b94e8cd90000009c00001e40686561640b8df5290000291800000036 -686865610e18039b0000295000000024686d7478b83c0f3b00002974000000a06c6f63610002 -6da800002a14000000a46d6178700440053400002ab800000020707265708aa104b900002ad8 +<000100000009008000030010637674206d5f6ba100001e08000002886670676d7e61b6110000 +2090000007b4676c796663c0a08f0000009c00001d6c686561640b8df5290000284400000036 +686865610e1803990000287c00000024686d7478b0ad0e27000028a0000000986c6f63610002 +165c000029380000009c6d617870043e0534000029d400000020707265708aa104b9000029f4 00000490000200cd00000532058100030007001f400d06020503020309080503040003003fcd 2fcd11120139391133113331301321112113112111cd0465fb9b4c03cd0581fa7f0535fb1704 -e900000000010089000005060581000b0074404a050909000b00010b060a030700040c0d0508 -5f590f057f059f05030f058f05ff05030f03051615490f0501140505160c490505000101045f -59010300095f590012400d01300d01200d015d5d5d003f2b00183f2b11120039182f2b5f5e5d -2b5f5e5d712b11120117395f5e5d113311333130331121152111211521112115890454fcd302 -f0fd1003560581e4fe9ee4fe8de400000001008700000464044f0018004f402f001810070708 -08181a1910141403505914100c0f080015a01a01901a01f01a01b01a01a01a01901a01701a01 -ef1a015d71717171717272003f323f3f2b110033111201393911331133113331302111102322 -0615112111342627211e0115333e013332161511034cc1667dfee70503010c030a0439ac77ac -b8025f011daf89fdbc0348576f2c13a51f7c70d4ccfd510000010019ffee029105380015003b +e900000000010054ffec05ba0596001c004a40291a0e141304070e130507041e1d06055f5906 +060b1111175f59141411040b005f590b13301e01201e015d5d003f2b00183f332f2b11120039 +182f2b111201173911331133113331302532363735213521110604232000111000212013052e +01232206151412032673d83bfea8026670fe99c5fea8fe8e0174015d01f087fef02cbc7fd0d8 +dfd34334c3dafdfa7382017d015e015c0173fe91526b6efcebeffefb00020050ffec042d044e +00120019006f4043170a1011160b0b0303110a031b1a160b525916211011480f16010e051616 +0006061352590610000e51597f1001101001101000169f1b016f1b015f1b014f1b012f1b015d +5d5d5d5d003f322f5d5d2b00183f2b11120039182f5f5e5d2b2b111201173911331133113311 +3331300522001110003332121115211416333237050201220607212e01024af4fefa010af4e9 +f6fd4a756c9527010973fea0636b0301a4086e1401210115010c0120fecbfed6089ea18117fe +da03b18a7c8383000001008700000464044f0018004f402f00181007070808181a1910141403 +505914100c0f080015a01a01901a01f01a01b01a01a01a01901a01701a01ef1a015d71717171 +717272003f323f3f2b1100331112013939113311331133313021111023220615112111342627 +211e0115333e013332161511034cc1667dfee70503010c030a0439ac77acb8025f011daf89fd +bc0348576f2c13a51f7c70d4ccfd5100000100870000069e044f00260093405e172600001f08 +1f1e1007081e08282722031403505910171a0314100c0f1f080015e42801d428018428015428 +013b2801db2801bb28019b28015428013b28012f2801021f2801002801e02801d02801b02801 +9f28018028016028012f28015d5d5d5d5d5d5d71715f7171717171717272727272003f32323f +3f17332b11003311120139391133331133111239113333313021111023220615112111342627 +211e0115333e01333217333e0133321615112111102322060711030ca4556bfee70503010c03 +0a04349b6cf83506379a779ea6fee9a4526905025f011dae8afdbc0348576f2c13a51f7c70ec +7e6ed7c9fd51025f011d9f8cfdaf00020050ffec0493044e000b00150030401a11060c000600 +1716090f4f59091003144f5903167017016017017171003f2b00183f2b111201393911331133 +3130011000212200111000212000013426232011141633200493fedcfefefdfee00120010301 +090117feda7e78ff007d760103021efef9fed5012c01060105012bfedffef1c1aefe91b5bd00 +000000020054ffec045c05cc00160021003e402017031212131d091309222312000c1a4f590f +0c10061f4f59030616001570230171003f3f332b00183f332b00183f11120139391133113311 +33333130212e0135230623220211101233321617332711211114170134262322061510333236 +034c040b045bffbdced9c773a72d0202011908fee37572716edd6f7a0f7928c401270109010d +0125605fb2018bfb2064880223afbdb7bcfe90c300000001008f000001a805cc00030046402d +030000050401000015500501400501b00501a005017f05016005011f0501ef0501d00501c005 +01b005018005015d5d5d5d5d71717171717272003f3f1112013911333130331121118f011905 +ccfa340000010048ffec041f044f002800724045070621141b1a0d00001a140604292a210d17 +03171e5159c21b01601b01030f1b1f1b020a041b1b1710030a5159140724070207070316502a +01b02a01302a01402a012f2a015d5d717172003f332f5d2b00183f332f5f5e5d5f5d5d2b1112 +00393911120117391133113311331133313001140423222627371e01333236353426272e0235 +343633321617072e01232206151416171e03041ffeffe3dfed27f7156780766c5768eea657ef +dbc1eb1df90c5e6664644d5b7fc57747013c9db38d95254d403c40343d152f51815e9bad968e +1a4241333c2f37121a374c7700010050ffec0437044e00180042402414150a090f0303091503 +1a19060d4f590a0a061000146014020d0314140000114f590016003f2b110033182f5f5e5d3f +332f2b1112011739113311331133313005220011100033321617052e01232211103332363705 +0e020252f6fef4010ef8bffa20fee50c6058d9dd506c0d011a0f81d21401250106010c012bc0 +a90e5363fe95fe8a65640d6fae5f00000002003cffec0480044e00260033006d403f24272707 +07150e0f2c03030f1503353406285259060600590e690e022d0e01030f0e1f0e0209040e1212 +0b51591210192f002f4f5924210016bf35014f35015d71003f32322b110033183f2b1100335f +5e5d5f5d5d1239182f2b11120117391133113311331133113331300522263534363f01353426 +23220607253e0133321615111416333237150e0323222627230613070e0215141633323e0135 +01899db0dbd0e94a544e4909fedb1bebcbcdde2930201e1928282d1e6a650a0676599062522b +473b426d3e14ab9ba8b00204376a6747520e9ea3cabafe765b450698060a06046865d5020902 +0423483c4d4b487f47000002008f000001a805cc00030007005640360307070004040809050f +0415010053590100500901400901b00901a009017f09016009011f0901ef0901d00901c00901 +b009018009015d5d5d5d5d71717171717272003f2b00183f3f11120139113333113331301335 +2115011121118f0119fee7011904fdcfcffb03043afbc60000020054fe4e045a044f0021002b +0061403a18220a0a1f0403271212031f032d2c1b0f15254f591715100f294f590c0f15000751 +59560466047604032204320402050415040204001b702d0171003f325d5d5d2b00183f332b00 +183f332b00183f1112011739113311331133113333313001222627251e013332363d01372306 +23220211101233321733343637210615111404033426232211103332360254c6f11c01190f63 +50756c02025dffbdd0d6ccec5b050905010a06fefa0f776ee1df7077fe4e978c21414a908e39 +6bc7011c010801090120c32378136c8efce1e7ec03dea7bbfe98fe9fbb000000000100890000 +04a40581000500234011030000040607010300035f5900125007015d003f2b00183f11120139 +391133313033112111211589012702f40581fb63e400000000010019ffee029105380015003b 401d130c0c0a0d080d040416170d0506054f590a060808060f00114f590016003f2b00183f33 2f11332b11003311120139113333113333113331300522263511233533373315331523111416 333237150601a47c86899758b0cdcd3c3f213d68128789027ebefefebefdce4f4b0eae220000 -00010087000002fe044f0016003e402508161600000f18170d125059080d10050f00159f1801 -7f1801d01801af18015f18012f18015d5d5d5d7171003f3f3f332b1112013939113311333130 -3311342627211e0115333e02333217152623220615118f0503010c030a042940584236214434 -6975033c59772e12b71e725d2d0feb0faaa7fded000000010010fe570468043a001501ba40ff -0b0a13090e1112120e030a041617110a0f130e0900055059001b961701861701731701631701 -00501701421701321701241701141701061701f21701e01701d01701c21701b41701a4170196 -170182170174170160170152170142170134170126170112170104170167f41701e21701d217 -01c41701b41701a2170194170184170176170166170154170144170132170122170114170106 -1701f61701d41701c61701b01701a21701921701841701761701661701401701321701221701 -141701061701f61701d41701c21701b2170101a0170190170184170160170154170144170130 -170120170114170104170137f41701cb1701b41701741701041701403bf41701e41701cb1701 -bb1701ab17019417017417013b170124170100170102f01701e01701bf170180170170170150 -1701301701101701001701075e5d5d5d5d5d5d5d5d5d5f717171717171717171717272727272 -5e5d5d5d5d5d5d5d5d5d5d5f5d5d5d5d71717171717171717171717171717272727272727272 -72727272727272725e5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d7171717171715f71717171003f -2b00182f33333f331112011739113311333311333130012227351633323e013701211316173f -011321010e01011b654c352c3c4f3f27fe540129aa283d1941a00126fe5456b9fe570dc80826 -5869042ffe056de15feb01fffb8dd0a0000000020087fe57048f045100170021003c40201800 -121d09090b000b2322151a4f591215100e0f0a1b03204f5906031670230171003f332b00183f -3f3f332b1112013939113311333311333130011002232226272316151121113427211e011533 -3633321201102322061514163332048fd9c672a92d0606fee70801110507045ffbbdd0fedbdf -7077776ee10222fef1fed9635d1e98fe6104ea9960126a34c7feddfef4016cc4b0afbf000000 -00020050ffec0493044e000b00150030401a11060c0006001716090f4f59091003144f590316 -7017016017017171003f2b00183f2b1112013939113311333130011000212200111000212000 -013426232011141633200493fedcfefefdfee00120010301090117feda7e78ff007d76010302 -1efef9fed5012c01060105012bfedffef1c1aefe91b5bd0000000002008f000001a805cc0003 -0007005640360307070004040809050f0415010053590100500901400901b00901a009017f09 -016009011f0901ef0901d00901c00901b009018009015d5d5d5d5d71717171717272003f2b00 -183f3f111201391133331133313013352115011121118f0119fee7011904fdcfcffb03043afb -c60000010048ffec041f044f002800724045070621141b1a0d00001a140604292a210d170317 -1e5159c21b01601b01030f1b1f1b020a041b1b1710030a5159140724070207070316502a01b0 -2a01302a01402a012f2a015d5d717172003f332f5d2b00183f332f5f5e5d5f5d5d2b11120039 -3911120117391133113311331133313001140423222627371e01333236353426272e02353436 -33321617072e01232206151416171e03041ffeffe3dfed27f7156780766c5768eea657efdbc1 -eb1df90c5e6664644d5b7fc57747013c9db38d95254d403c40343d152f51815e9bad968e1a42 -41333c2f37121a374c7700020050ffec042d044e00120019006f4043170a1011160b0b030311 -0a031b1a160b525916211011480f16010e0516160006061352590610000e51597f1001101001 -101000169f1b016f1b015f1b014f1b012f1b015d5d5d5d5d003f322f5d5d2b00183f2b111200 -39182f5f5e5d2b2b111201173911331133113311333130052200111000333212111521141633 -3237050201220607212e01024af4fefa010af4e9f6fd4a756c9527010973fea0636b0301a408 -6e1401210115010c0120fecbfed6089ea18117feda03b18a7c83830000020054fe57045a044f -0014001e003c402005150d0d0c1a000c00201f121c4f590f12160d1b090f03184f5905031070 -200171003f332b00183f3f3f332b111201393911331133113333313013101233321734363721 -06151121113723062122020134262322111033323654dbc7ec5b0b04010e06fee905025dfefc -bdce02eb7471e1df6e79021c010c0127c32e710f6c8dfb1601c29bc80127010fadbffe8efe90 -c300000100870000069e044f00260093405e172600001f081f1e1007081e0828272203140350 -5910171a0314100c0f1f080015e42801d428018428015428013b2801db2801bb28019b280154 -28013b28012f2801021f2801002801e02801d02801b028019f28018028016028012f28015d5d -5d5d5d5d5d71715f7171717171717272727272003f32323f3f17332b11003311120139391133 -331133111239113333313021111023220615112111342627211e0115333e01333217333e0133 -321615112111102322060711030ca4556bfee70503010c030a04349b6cf83506379a779ea6fe -e9a4526905025f011dae8afdbc0348576f2c13a51f7c70ec7e6ed7c9fd51025f011d9f8cfdaf -0002003cffec0480044e00260033006d403f2427270707150e0f2c03030f1503353406285259 -060600590e690e022d0e01030f0e1f0e0209040e12120b51591210192f002f4f5924210016bf -35014f35015d71003f32322b110033183f2b1100335f5e5d5f5d5d1239182f2b111201173911 -33113311331133113331300522263534363f0135342623220607253e01333216151114163332 -37150e0323222627230613070e0215141633323e013501899db0dbd0e94a544e4909fedb1beb -cbcdde2930201e1928282d1e6a650a0676599062522b473b426d3e14ab9ba8b00204376a6747 -520e9ea3cabafe765b450698060a06046865d50209020423483c4d4b487f470000020054fe4e -045a044f0021002b0061403a18220a0a1f0403271212031f032d2c1b0f15254f591715100f29 -4f590c0f1500075159560466047604032204320402050415040204001b702d0171003f325d5d -5d2b00183f332b00183f332b00183f1112011739113311331133113333313001222627251e01 -3332363d01372306232202111012333217333436372106151114040334262322111033323602 -54c6f11c01190f6350756c02025dffbdd0d6ccec5b050905010a06fefa0f776ee1df7077fe4e -978c21414a908e396bc7011c010801090120c32378136c8efce1e7ec03dea7bbfe98fe9fbb00 -000000010023000002ae05cc0015004340240d1301060102021504150417160a0f51590a0000 -0405044f5913050f0115bf17018017015d71003f3f332b110033183f2b111201393211123911 -333311333231300111211123353335343633321715262322061d01331501d9fee89e9e9c9f4f -632929483bd5037cfc84037cbe71938e10b509394855be00000200890000059d0581000d0015 -005d4033010c0c1209120303040e09000d0d09040317160c120202125f590202000505115f59 -0503040012701701a017013017012017015d5d5d71003f323f2b11120039182f2b1112003911 -1201173911331133113311331112391133313021012111211121320415140607090134290111 -2132360451feb9fea6fed902c0fc0112a88f017dfe91fefcfe8601827c800217fde90581d9cb -94d722fdb003d1cbfe607000000000010050ffec0437044e00180042402414150a090f030309 -15031a19060d4f590a0a061000146014020d0314140000114f590016003f2b110033182f5f5e -5d3f332f2b1112011739113311331133313005220011100033321617052e0123221110333236 -37050e020252f6fef4010ef8bffa20fee50c6058d9dd506c0d011a0f81d21401250106010c01 -2bc0a90e5363fe95fe8a65640d6fae5f0000000200330000059105810007000f020740ff0d01 -000c02080300070304060508040807031011070c025f590d08050c0c06050304001286110174 -1101641101531101431101341101251101161101021101f31101e41101d41101c51101b61101 -a3110193110184110175110166110154110145110134110124110115110104110168f51101e5 -1101d41101c51101b3110100a011019211018411017411016211015011014211013211012411 -01161101021101f01101e21101d41101c41101b21101a4110190110182110174110162110152 -1101441101361101241101101101021101f41101e41101d61101c41101b21101a21101941101 -86110176110164110152110144110134110126110114110106406f110138f21101e41101d611 -01c21101b41101a6110184110176110164110154110146110126110112110101001101f41101 -c41101b01101a01101941101741101641101501101441101341101141101e41101c41101b411 -0194110184110170110164110144110110110102001101085e5d5f5d5d5d5d5d5d5d5d5d7171 -717171717171717171725f727272727272727272727272725e5d5d5d5d5d5d5d5d5d5d5d5d5d -5d5d5d7171717171717171717171717171717172727272727272727272725f72727272725e5d -5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d717171717171717171003f323f33392f1239332b00182f -111201173911333311331133111239391139393130210321032101210901070e010321032704 -6d7dfde77dfed90202015c0200fd52060a1c9e01958b2b0168fe980581fa7f04a816245cfe34 -01958800000000010089000001b00581000300664045030000040501030012e00501b00501a0 -0501900501800501500501400501000501f00501c00501b00501a005017005016005011f0501 -e00501d00501c00501b005018005015d5d5d5d5d717171717171717272727272727272003f3f -1112013911333130331121118901270581fa7f0000020054ffec045c05cc00160021003e4020 -17031212131d091309222312000c1a4f590f0c10061f4f59030616001570230171003f3f332b -00183f332b00183f1112013939113311331133333130212e0135230623220211101233321617 -332711211114170134262322061510333236034c040b045bffbdced9c773a72d0202011908fe -e37572716edd6f7a0f7928c401270109010d0125605fb2018bfb2064880223afbdb7bcfe90c3 -00000001000e00000464043a000b00404024000b08090a04010706050203030507090b050d0c -050f0015f00d01e00d019f0d014f0d015d5d5d71003f3f111201173911331133113333331133 -11333130210b01210901211b012109010333fcfefed5018cfe87012fe7e60131fe87018f0188 -fe78022f020bfe9e0162fdf8fdce00000001003bffec05060596002a0052402f0c001d1c2216 -070606161c00042c2b0c22031919205f591d1d1904030a5f5910072007300703300740070207 -070313003f332f5d712b00183f332f2b11120039391112011739113311331133113331300114 -0421202427251e01332035342e01272e0435342421200417052e01232015141e01171e030506 -fecdfed7fef1fecc2c011d1da89501354781b79e7c644627011f01120106010726fee216877e -fef43970abcbaf66360196cfdbc0c32f7065bc3c4e3425252d3d56744bbfcba4bd275b5ca837 -4631252b4961870000010054ffec05ba0596001c004a40291a0e141304070e130507041e1d06 -055f5906060b1111175f59141411040b005f590b13301e01201e015d5d003f2b00183f332f2b -11120039182f2b11120117391133113311333130253236373521352111060423200011100021 -2013052e01232206151412032673d83bfea8026670fe99c5fea8fe8e0174015d01f087fef02c -bc7fd0d8dfd34334c3dafdfa7382017d015e015c0173fe91526b6efcebeffefb000200890000 -05100581000b0013004840290f0606070c000700151405105f5905050608080f5f5908030612 -8015017015016015013015011f15017171717171003f3f2b11120039182f2b11120139391133 -11331133313001140e012321112111213204053429011121323605107ce79ffea2fed90279fd -0111fed7fefafecf01397a8403c388d675fe100581e9dadefe3779000001008f000001a805cc -00030046402d030000050401000015500501400501b00501a005017f05016005011f0501ef05 -01d00501c00501b005018005015d5d5d5d5d71717171717272003f3f11120139113331303311 -21118f011905ccfa340000010089000004a40581000500234011030000040607010300035f59 -00125007015d003f2b00183f11120139391133313033112111211589012702f40581fb63e400 -0000000100890000062105810017016d40ff150017100d0e170e1918040a0713171327130308 -0a180a280a03090a13150f030e0800128b19016b19014b19013b19011b1901fb1901ef1901c4 -1901ab19019f19018b19017419015b19014f19013419010b190167ff1901e41901cb1901bb19 -01af19019419017b19016f19014419012b19011f19010b1901f41901db1901cf1901bb19018b -19016b19014b19013b19011b1901fb1901cb1901ab19018b19017b19015b19013b19012f1901 -04190137eb1901cb1901b419019b19017419014b19012419010b1901fb1901d41901bb1901af -19018419016b19015f1901024019013f19011f1901f01901e01901cf1901a019017f19014f19 -013f1901201901b3001901075e5d5d5d5d5d5d5d5d5d7171715f717171717171717272727272 -7272725e5d5d5d5d5d5d5d5d5d7171717171717171717272727272727272727272725e5d5d5d -5d5d5d5d5d5d5d5d7171717171003f32323f3339395e5d5d1133111201393911333311333331 -302111343637020703230b01161511211121131f0137012111051b01094722fed2fe6b0cfefa -018bfc16303f0103018903561d3adcfef36afcee03120177e84bfcaa0581fcec4cbde2033bfa -7f0000020087ffec048f05cc00160021003c40201d060f0f0d17000d002322141a4f59111410 -0e000b1503204f5906031670230171003f332b00183f3f3f332b111201393911331133113333 -313001100223222627231406072136351121110733363332120134262322061514163332048f -d7c873a82d020905feef08011904045ffbc0cdfedb6c7172777572df0221fef4fed7645e237a -115d9a04d5fe62b0d0feddfef6b8b2bfb4acc0000000000100080000046a043a000a015340ff -0302010006090a0a0602030b0c940c01800c01620c720c02540c01420c01340c01260c01120c -01040c01f40c01e60c01d20c0101c00c01a40cb40c02800c900c02640c740c02400c500c0234 -0c01100c01040c0167f40c01d00ce00c02b40cc40c02a00c01840c940c02600c01440c540c02 -200c01140c01d40ce40c02cb0c01900ca00c02840c01600c700c02440c540c02200c300c0214 -0c01f00c01d40ce40c02b00c01640c740c940ca40c04400c01240c340c02000c013702700c80 -0cb00cc00cf00c055f0c01000c100c400c03d00c01af0c01900c016f0c01500c012f0c3f0c02 -7f0c8f0cbf0cef0cff0c05500c010f0c1f0c3f0c030709020f0601b015003f333f33015e5d5d -5d7171717171717272725f5e5d5d5d5d5d5d5d71717171717171717272727272727272725e5d -5d5d5d5d5d5d5d5f5d5d5d717171717171717171111217391133113333113331302901012113 -16173e01132102dbfeb0fe7d0129bd0f380a3ec70126043afda332c829ce026000000001008f -0000046405cc00150050402f120f0f1008071007171611001007151503030b50590310a01701 -901701f01701b01701a01701901701701701ef17015d71717171717272003f2b110033183f33 -3f11120139391133113311333130013e013332161511211110232206151121112111140701a4 -39ac77acb8fee8c1667dfee701190803627c70d4ccfd52025e011daf89fdbd05ccfe6b6d6800 -0001008b000001ac013100030017400a030000040500019b5b00002f2b111201391133313033 -1121118b01210131fecf00010052000003b6043a0009004440270206070101030608040b0a06 -0304035059040f0107000750590015400b01d00b01c00b017f0b015d717172003f2b11003318 -3f2b1100331112011739113311333130333501213521150121155201fdfe2c030afe06022bc7 -02a8cbc9fd5ccd000001007bffec054a058100110049402c0d0e05040e0413120d040300095f -590013601301501301401301801301701301c01301a013013013012013015d5d5d5d71717272 -72003f2b00183f33111201393911331133313005200019012111141633323635112111100002 -d3feddfecb01279f9a9eaa0127feb514011c01080371fca6a7adb5a90350fc9efef4fed90000 -00010054ffec058f05960018005240321609100f0203090f03031a190c135f5910100c040002 -100202000240028002c002d002050b0302020606005f590613301a015d003f2b110033182f5f -5e5d713f332f2b1112011739113311331133313025201305060423200011100021320417052e -01232206151412031b010b68010153febfe0feacfe8d01660154f801383ffefc21c183c8cfd5 -d4010c61ccc70181015a015b0174c7c1476a7df8eff3ff000001007fffec045c043a0016004f -402f0e0707080016081618170e121203505912160c1507000fa01801901801f01801b01801a0 -1801901801701801ef18015d71717171717272003f323f3f2b11003311120139391133113311 -333130011110333236351121111417212635230e0123222635110198c0667d011908fef40c05 -38ad77acb8043afda1fee3af890244fcb88a6890477b70d3cc02af00000300890000056a0581 -000e0017001f008540510c1309131b1b040f0918000009040321200c141b141b5f590f141f14 -02140514160c491414040505135f590503041c5f590412a02101902101802101702101602101 -5021014021013021013021012021015d5d7171717171717171003f2b00183f2b11120039182f -2b5f5e5d2b111200391112011739113311331133113311123931300114042901112120041514 -06071e010134262321112132361334290111213236056afee0ff00fd3f0285010201098588ab -b3fe867977feb001527d7152fee4fe8a01818e830192c0d20581b3af78a51d14af01d55f50fe -a357fe09c6fe6c6700000001008900000498058100090048402a01050506080206030a0b0104 -5f590f01010b0301400d31480101050707005f5907030512300b01200b015d5d003f3f2b1112 -0039182f2b5f5e5d2b11120117391133113331300111211521112111211501b002d1fd2ffed9 -040f049dfe4ce4fdfb0581e400010017000004cd05810007014440e801020402070309080004 -05045f5905030112500901400901340901240901040901f40901e40901c00901b40901a40901 -8b09017009016409015409013b090124090104090168fb0901e40901cb0901a0090190090184 -0901540901440901340901040901f40901db0901cb0901b409018b09017409015b09013b0901 -2409010b0901fb0901eb0901d00901c409019b09014409011b09010b090137f40901cb0901bb -09019b09018b09017b09016f09014b09013b09012b0901040901db0901ab09018b09015b0901 -4b09010b0901ff090102df0901cf09018f0901700901300901200901000901075e5d5d5d5d5d -5d5d5f5d71717171717172727272727272727272725e5d5d5d5d5d5d5d5d7171717171717171 -7171727272727272727272725e5d5d5d5d5d5d5d5d5d5d5d5d7171717171003f3f2b11003311 -120117391133313001112111213521150305fed9fe3904b6049dfb63049de4e4000005cc05cc -007d058100150079058100150000000000000000000000000000043a001400770000ffec0000 -0000ffec00000000ffec0000fe57fff700000000000000000000000000000000000000000000 +00010023000002ae05cc0015004340240d1301060102021504150417160a0f51590a00000405 +044f5913050f0115bf17018017015d71003f3f332b110033183f2b1112013932111239113333 +11333231300111211123353335343633321715262322061d01331501d9fee89e9e9c9f4f6329 +29483bd5037cfc84037cbe71938e10b509394855be0000020087fe57048f045100170021003c +40201800121d09090b000b2322151a4f591215100e0f0a1b03204f5906031670230171003f33 +2b00183f3f3f332b111201393911331133331133313001100223222627231615112111342721 +1e0115333633321201102322061514163332048fd9c672a92d0606fee70801110507045ffbbd +d0fedbdf7077776ee10222fef1fed9635d1e98fe6104ea9960126a34c7feddfef4016cc4b0af +bf000000000100890000062105810017016d40ff150017100d0e170e1918040a071317132713 +03080a180a280a03090a13150f030e0800128b19016b19014b19013b19011b1901fb1901ef19 +01c41901ab19019f19018b19017419015b19014f19013419010b190167ff1901e41901cb1901 +bb1901af19019419017b19016f19014419012b19011f19010b1901f41901db1901cf1901bb19 +018b19016b19014b19013b19011b1901fb1901cb1901ab19018b19017b19015b19013b19012f +190104190137eb1901cb1901b419019b19017419014b19012419010b1901fb1901d41901bb19 +01af19018419016b19015f1901024019013f19011f1901f01901e01901cf1901a019017f1901 +4f19013f1901201901b3001901075e5d5d5d5d5d5d5d5d5d7171715f71717171717171727272 +72727272725e5d5d5d5d5d5d5d5d5d7171717171717171717272727272727272727272725e5d +5d5d5d5d5d5d5d5d5d5d7171717171003f32323f3339395e5d5d113311120139391133331133 +3331302111343637020703230b01161511211121131f0137012111051b01094722fed2fe6b0c +fefa018bfc16303f0103018903561d3adcfef36afcee03120177e84bfcaa0581fcec4cbde203 +3bfa7f0000010087000002fe044f0016003e402508161600000f18170d125059080d10050f00 +159f18017f1801d01801af18015f18012f18015d5d5d5d7171003f3f3f332b11120139391133 +113331303311342627211e0115333e02333217152623220615118f0503010c030a0429405842 +362144346975033c59772e12b71e725d2d0feb0faaa7fded00000001003bffec05060596002a +0052402f0c001d1c2216070606161c00042c2b0c22031919205f591d1d1904030a5f59100720 +07300703300740070207070313003f332f5d712b00183f332f2b111200393911120117391133 +113311331133313001140421202427251e01332035342e01272e0435342421200417052e0123 +2015141e01171e030506fecdfed7fef1fecc2c011d1da89501354781b79e7c644627011f0112 +0106010726fee216877efef43970abcbaf66360196cfdbc0c32f7065bc3c4e3425252d3d5674 +4bbfcba4bd275b5ca8374631252b496187000001008f0000046405cc00150050402f120f0f10 +08071007171611001007151503030b50590310a01701901701f01701b01701a0170190170170 +1701ef17015d71717171717272003f2b110033183f333f11120139391133113311333130013e +013332161511211110232206151121112111140701a439ac77acb8fee8c1667dfee701190803 +627c70d4ccfd52025e011daf89fdbd05ccfe6b6d6800000200890000059d0581000d0015005d +4033010c0c1209120303040e09000d0d09040317160c120202125f590202000505115f590503 +040012701701a017013017012017015d5d5d71003f323f2b11120039182f2b11120039111201 +1739113311331133113311123911333130210121112111213204151406070901342901112132 +360451feb9fea6fed902c0fc0112a88f017dfe91fefcfe8601827c800217fde90581d9cb94d7 +22fdb003d1cbfe6070000000000100080000046a043a000a015340ff0302010006090a0a0602 +030b0c940c01800c01620c720c02540c01420c01340c01260c01120c01040c01f40c01e60c01 +d20c0101c00c01a40cb40c02800c900c02640c740c02400c500c02340c01100c01040c0167f4 +0c01d00ce00c02b40cc40c02a00c01840c940c02600c01440c540c02200c01140c01d40ce40c +02cb0c01900ca00c02840c01600c700c02440c540c02200c300c02140c01f00c01d40ce40c02 +b00c01640c740c940ca40c04400c01240c340c02000c013702700c800cb00cc00cf00c055f0c +01000c100c400c03d00c01af0c01900c016f0c01500c012f0c3f0c027f0c8f0cbf0cef0cff0c +05500c010f0c1f0c3f0c030709020f0601b015003f333f33015e5d5d5d717171717171727272 +5f5e5d5d5d5d5d5d5d71717171717171717272727272727272725e5d5d5d5d5d5d5d5d5f5d5d +5d71717171717171717111121739113311333311333130290101211316173e01132102dbfeb0 +fe7d0129bd0f380a3ec70126043afda332c829ce0260000000010010fe570468043a001501ba +40ff0b0a13090e1112120e030a041617110a0f130e0900055059001b96170186170173170163 +170100501701421701321701241701141701061701f21701e01701d01701c21701b41701a417 +0196170182170174170160170152170142170134170126170112170104170167f41701e21701 +d21701c41701b41701a217019417018417017617016617015417014417013217012217011417 +01061701f61701d41701c61701b01701a2170192170184170176170166170140170132170122 +1701141701061701f61701d41701c21701b2170101a017019017018417016017015417014417 +0130170120170114170104170137f41701cb1701b41701741701041701403bf41701e41701cb +1701bb1701ab17019417017417013b170124170100170102f01701e01701bf17018017017017 +01501701301701101701001701075e5d5d5d5d5d5d5d5d5d5f71717171717171717171727272 +72725e5d5d5d5d5d5d5d5d5d5d5f5d5d5d5d7171717171717171717171717171727272727272 +727272727272727272725e5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d7171717171715f71717171 +003f2b00182f33333f331112011739113311333311333130012227351633323e013701211316 +173f011321010e01011b654c352c3c4f3f27fe540129aa283d1941a00126fe5456b9fe570dc8 +08265869042ffe056de15feb01fffb8dd0a00000000200330000059105810007000f020740ff +0d01000c02080300070304060508040807031011070c025f590d08050c0c0605030400128611 +01741101641101531101431101341101251101161101021101f31101e41101d41101c51101b6 +1101a3110193110184110175110166110154110145110134110124110115110104110168f511 +01e51101d41101c51101b3110100a01101921101841101741101621101501101421101321101 +241101161101021101f01101e21101d41101c41101b21101a411019011018211017411016211 +01521101441101361101241101101101021101f41101e41101d61101c41101b21101a2110194 +110186110176110164110152110144110134110126110114110106406f110138f21101e41101 +d61101c21101b41101a6110184110176110164110154110146110126110112110101001101f4 +1101c41101b01101a01101941101741101641101501101441101341101141101e41101c41101 +b4110194110184110170110164110144110110110102001101085e5d5f5d5d5d5d5d5d5d5d5d +7171717171717171717171725f727272727272727272727272725e5d5d5d5d5d5d5d5d5d5d5d +5d5d5d5d5d7171717171717171717171717171717172727272727272727272725f7272727272 +5e5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d717171717171717171003f323f33392f1239332b00 +182f111201173911333311331133111239391139393130210321032101210901070e01032103 +27046d7dfde77dfed90202015c0200fd52060a1c9e01958b2b0168fe980581fa7f04a816245c +fe3401958800000000010089000001b00581000300664045030000040501030012e00501b005 +01a00501900501800501500501400501000501f00501c00501b00501a005017005016005011f +0501e00501d00501c00501b005018005015d5d5d5d5d71717171717171727272727272727200 +3f3f1112013911333130331121118901270581fa7f000001000e00000464043a000b00404024 +000b08090a04010706050203030507090b050d0c050f0015f00d01e00d019f0d014f0d015d5d +5d71003f3f11120117391133113311333333113311333130210b01210901211b012109010333 +fcfefed5018cfe87012fe7e60131fe87018f0188fe78022f020bfe9e0162fdf8fdce00000001 +007bffec054a058100110049402c0d0e05040e0413120d040300095f59001360130150130140 +1301801301701301c01301a013013013012013015d5d5d5d7171727272003f2b00183f331112 +01393911331133313005200019012111141633323635112111100002d3feddfecb01279f9a9e +aa0127feb514011c01080371fca6a7adb5a90350fc9efef4fed9000000010052000003b6043a +0009004440270206070101030608040b0a060304035059040f0107000750590015400b01d00b +01c00b017f0b015d717172003f2b110033183f2b110033111201173911331133313033350121 +3521150121155201fdfe2c030afe06022bc702a8cbc9fd5ccd0000020089000005100581000b +0013004840290f0606070c000700151405105f5905050608080f5f5908030612801501701501 +6015013015011f15017171717171003f3f2b11120039182f2b11120139391133113311333130 +01140e012321112111213204053429011121323605107ce79ffea2fed90279fd0111fed7fefa +fecf01397a8403c388d675fe100581e9dadefe37790000010054ffec058f0596001800524032 +1609100f0203090f03031a190c135f5910100c040002100202000240028002c002d002050b03 +02020606005f590613301a015d003f2b110033182f5f5e5d713f332f2b111201173911331133 +1133313025201305060423200011100021320417052e01232206151412031b010b68010153fe +bfe0feacfe8d01660154f801383ffefc21c183c8cfd5d4010c61ccc70181015a015b0174c7c1 +476a7df8eff3ff000001007fffec045c043a0016004f402f0e0707080016081618170e121203 +505912160c1507000fa01801901801f01801b01801a01801901801701801ef18015d71717171 +717272003f323f3f2b1100331112013939113311331133313001111033323635112111141721 +2635230e0123222635110198c0667d011908fef40c0538ad77acb8043afda1fee3af890244fc +b88a6890477b70d3cc02af00000300890000056a0581000e0017001f008540510c1309131b1b +040f0918000009040321200c141b141b5f590f141f1402140514160c491414040505135f5905 +03041c5f590412a021019021018021017021016021015021014021013021013021012021015d +5d7171717171717171003f2b00183f2b11120039182f2b5f5e5d2b1112003911120117391133 +1133113311331112393130011404290111212004151406071e01013426232111213236133429 +0111213236056afee0ff00fd3f0285010201098588abb3fe867977feb001527d7152fee4fe8a +01818e830192c0d20581b3af78a51d14af01d55f50fea357fe09c6fe6c670000000100890000 +0498058100090048402a01050506080206030a0b01045f590f01010b0301400d314801010507 +07005f5907030512300b01200b015d5d003f3f2b11120039182f2b5f5e5d2b11120117391133 +113331300111211521112111211501b002d1fd2ffed9040f049dfe4ce4fdfb0581e400010017 +000004cd05810007014440e80102040207030908000405045f59050301125009014009013409 +01240901040901f40901e40901c00901b40901a409018b09017009016409015409013b090124 +090104090168fb0901e40901cb0901a00901900901840901540901440901340901040901f409 +01db0901cb0901b409018b09017409015b09013b09012409010b0901fb0901eb0901d00901c4 +09019b09014409011b09010b090137f40901cb0901bb09019b09018b09017b09016f09014b09 +013b09012b0901040901db0901ab09018b09015b09014b09010b0901ff090102df0901cf0901 +8f0901700901300901200901000901075e5d5d5d5d5d5d5d5f5d717171717171727272727272 +72727272725e5d5d5d5d5d5d5d5d71717171717171717171727272727272727272725e5d5d5d +5d5d5d5d5d5d5d5d5d7171717171003f3f2b1100331112011739113331300111211121352115 +0305fed9fe3904b6049dfb63049de4e4000000020087ffec048f05cc00160021003c40201d06 +0f0f0d17000d002322141a4f591114100e000b1503204f5906031670230171003f332b00183f +3f3f332b11120139391133113311333331300110022322262723140607213635112111073336 +3332120134262322061514163332048fd7c873a82d020905feef08011904045ffbc0cdfedb6c +7172777572df0221fef4fed7645e237a115d9a04d5fe62b0d0feddfef6b8b2bfb4acc0000000 +00020054fe57045a044f0014001e003c402005150d0d0c1a000c00201f121c4f590f12160d1b +090f03184f5905031070200171003f332b00183f3f3f332b1112013939113311331133333130 +1310123332173436372106151121113723062122020134262322111033323654dbc7ec5b0b04 +010e06fee905025dfefcbdce02eb7471e1df6e79021c010c0127c32e710f6c8dfb1601c29bc8 +0127010fadbffe8efe90c30005cc05cc007d0581001500790581001500000000000000000000 +00000000043a001400770000ffec00000000ffec00000000ffec0000fe57fff7000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000800000000000119012500f500eb0000000000000000 -000000c100d300ba00b000cf0000000000000000000000000127012901060000011200e400f4 -00c60000000000000000000000000000000000000000000000000119011f014c0000000000df -00d100c500b500000000000000000000000000000000000000000000010200a901fd00d80119 -008000b701fd00000000013f00db015d012500aa00800075008d01fc0179012100a001100000 -000001310119010e0104000000000000000000000000000000000000013d01ff00e001060094 -00e00094014400e005730319000000d802c5009c038102cd00cb00f4004e028d000000ff00d7 -00cc01300145007300b400a60000000000730080008d000000000000000000000000030000a2 -00980083008d000000000000000005aefebc0581fd300011fff600b600bc00c60000007f008a -0060000000000000000000f001ee0190000002190108011500000000000000be000000000000 -00000748036a02b60202fd930000009100670091006101d90000028d03410000000000000000 -00000000000000aafe6ffe6801050093009800e20151008f00be00aefeb9fea4005e00af02d5 -005500f200a604150601000003e1001002fa000ffed401eafff300b8000000000363000bfd0f -fff500000000000006810477001504d90000ffecffc5fe7f007500cd00f2010200d501194047 -5b5a59585554535251504f4e4d4c4b4a494847464544434241403f3e3d3c3b3a393837363531 -302f2e2d2c28272625242322211f181411100f0e0d0b0a090807060504030201002c20b00160 -45b003252011466123452361482d2c20451868442d2c45234660b0206120b04660b004262348 -482d2c4523462361b0206020b02661b02061b004262348482d2c45234660b0406120b06660b0 -04262348482d2c4523462361b0406020b02661b04061b004262348482d2c0110203c003c2d2c -20452320b0cd442320b8015a51582320b08d44235920b0ed51582320b04d44235920b0042651 -582320b00d44235921212d2c20204518684420b001602045b04676688a4560442d2c01b10b0a -432343650a2d2c00b10a0b4323430b2d2c00b0282370b101283e01b0282370b10228453ab102 -00080d2d2c2045b00325456164b050515845441b2121592d2c49b00e23442d2c2045b0004360 -442d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc08a8cb8100062602b0c642364 -615c58b00361592d2c8a03458a8a87b0112bb0292344b0297ae4182d2c4565b02c234445b02b -23442d2c4b525845441b2121592d2c4b515845441b2121592d2c01b005251023208af500b001 -6023edec2d2c01b005251023208af500b0016123edec2d2c01b0062510f500edec2d2cb00243 -b001525821212121211b462346608a8a462320468a608a61b8ff8062232010238ab10c0c8a70 -456020b0005058b00161b8ffba8b1bb0468c59b0106068013a592d2c2045b0032546524bb013 -515b58b0022546206861b00325b003253f2321381b2111592d2c2045b00325465058b0022546 -206861b00325b003253f2321381b2111592d2c00b00743b006430b2d2c21210c6423648bb840 -00622d2c21b08051580c6423648bb82000621bb200402f2b59b002602d2c21b0c051580c6423 -648bb81555621bb200802f2b59b002602d2c0c6423648bb84000626023212d2c4b53588ab004 -254964234569b0408b61b08062b020616ab00e23442310b00ef61b21238a121120392f592d2c -4b535820b0032549646920b00526b0062549642361b08062b020616ab00e2344b0042610b00e -f68a10b00e2344b00ef6b00e2344b00eed1b8ab00426111220392320392f2f592d2c45234560 -23456023456023766818b08062202d2cb0482b2d2c2045b0005458b040442045b04061441b21 -21592d2c45b1302f4523456160b0016069442d2c4b5158b02f2370b01423421b2121592d2c4b -515820b0032545695358441b2121591b2121592d2c45b01443b0006063b0016069442d2cb02f -45442d2c452320458a60442d2c45234560442d2c4b235158b90033ffe0b134201bb333003400 -5944442d2cb0164358b00326458a586466b01f601b64b020606620581b21b04059b001615923 -586559b02923442310b029e01b2121212121592d2cb0024354584b53234b515a58381b212159 -1b21212121592d2cb0164358b004254564b020606620581b21b04059b0016123581b6559b029 -2344b00525b00825082058021b0359b0042510b005252046b0042523423cb00425b0072508b0 -072510b006252046b00425b0016023423c2058011b0059b0042510b00525b029e0b029204565 -44b0072510b00625b029e0b00525b00825082058021b0359b00525b003254348b00425b00725 -08b00625b00325b0016043481b2159212121212121212d2c02b00425202046b004252342b005 -2508b003254548212121212d2c02b0032520b0042508b0022543482121212d2c452320451820 -b00050205823652359236820b040505821b04059235865598a60442d2c4b53234b515a582045 -8a60441b2121592d2c4b545820458a60441b2121592d2c4b53234b515a58381b2121592d2cb0 -00214b5458381b2121592d2cb002435458b0462b1b21212121592d2cb002435458b0472b1b21 -2121592d2cb002435458b0482b1b21212121592d2cb002435458b0492b1b212121592d2c208a -08234b538a4b515a5823381b2121592d2c00b0022549b000535820b04038111b21592d2c0146 -23466023466123201020468a61b8ff80628ab140408a704560683a2d2c208a2349648a235358 -3c1b21592d2c4b52587d1b7a592d2cb012004b014b54422d2cb1020042b123018851b1400188 -535a58b910000020885458b202010243604259b12401885158b920000040885458b202020243 -6042b12401885458b2022002436042004b014b5258b2020802436042591bb940000080885458 -b202040243604259b94000008063b80100885458b202080243604259b94000010063b8020088 -5458b202100243604259b12601885158b94000020063b80400885458b202400243604259b940 -00040063b80800885458b2028002436042595959595959b10002435458400a0540084009400c -020d021bb10102435458b2054008ba010000090100b30c010d011bb18002435258b2054008b8 -0180b109401bb2054008ba01800009014059b9400000808855b94000020063b8040088555a58 -b30c000d011bb30c000d0159595942424242422d2c451868234b51582320452064b04050587c -59688a6059442d2cb00016b00225b0022501b001233e00b002233eb10102060cb00a236542b0 -0b234201b001233f00b002233fb10102060cb006236542b0072342b00116012d2cb080b00243 -50b001b00243545b58212310b0201ac91b8a10ed592d2cb0592b2d2c8a10e52d000100000002 -1999f12616555f0f3cf5001f080000000000c849682600000000dd7b292bfc25fcfd0a6f0844 -00010008000200010000000000010000073efe4e00430aaafc25fa7a0a6f0001000000000000 -00000000000000000028060000cd0556008904e3008702aa0019031d00870473001004e30087 -04e300500239008f047300480473005004e30054071d00870473003c04e3005402aa002305c7 -00890473005005c700330239008904e300540473000e0556003b063900540556008902390000 -0239008f04e3008906aa008904e300870473000804e3008f0239008b0400005205c7007b05c7 -005404e3007f05c7008904e3008904e30017000000000000004c000000f00000019000000210 -00000298000004a800000554000005e0000006600000074c0000081c000008c0000009c80000 -0acc00000bb800000c4000000cf400000d9000000fe40000106400001110000011900000126c -0000131c000013b0000013b000001410000014540000161c000016c800001850000018ec0000 -191c0000198c00001a1c00001acc00001b6800001c6000001cd400001e400001000000280152 +0000000000000000000000000000000000000000000000000000000000000000080000000000 +0119012500f500eb0000000000000000000000c100d300ba00b000cf00000000000000000000 +00000127012901060000011200e400f400c60000000000000000000000000000000000000000 +000000000119011f014c0000000000df00d100c500b500000000000000000000000000000000 +000000000000010200a901fd00d80119008000b701fd00000000013f00db015d012500aa0080 +0075008d01fc0179012100a001100000000001310119010e0104000000000000000000000000 +000000000000013d01ff00e00106009400e00094014400e005730319000000d802c5009c0381 +02cd00cb00f4004e028d000000ff00d700cc01300145007300b400a60000000000730080008d +000000000000000000000000030000a200980083008d000000000000000005aefebc0581fd30 +0011fff600b600bc00c60000007f008a0060000000000000000000f001ee0190000002190108 +011500000000000000be00000000000000000748036a02b60202fd9300000091006700910061 +01d90000028d0341000000000000000000000000000000aafe6ffe6801050093009800e20151 +008f00be00aefeb9fea4005e00af02d5005500f200a604150601000003e1001002fa000ffed4 +01eafff300b8000000000363000bfd0ffff500000000000006810477001504d90000ffecffc5 +fe7f007500cd00f2010200d5011940475b5a59585554535251504f4e4d4c4b4a494847464544 +434241403f3e3d3c3b3a393837363531302f2e2d2c28272625242322211f181411100f0e0d0b +0a090807060504030201002c20b0016045b003252011466123452361482d2c20451868442d2c +45234660b0206120b04660b004262348482d2c4523462361b0206020b02661b02061b0042623 +48482d2c45234660b0406120b06660b004262348482d2c4523462361b0406020b02661b04061 +b004262348482d2c0110203c003c2d2c20452320b0cd442320b8015a51582320b08d44235920 +b0ed51582320b04d44235920b0042651582320b00d44235921212d2c20204518684420b00160 +2045b04676688a4560442d2c01b10b0a432343650a2d2c00b10a0b4323430b2d2c00b0282370 +b101283e01b0282370b10228453ab10200080d2d2c2045b00325456164b050515845441b2121 +592d2c49b00e23442d2c2045b0004360442d2c01b00643b00743650a2d2c2069b04061b0008b +20b12cc08a8cb8100062602b0c642364615c58b00361592d2c8a03458a8a87b0112bb0292344 +b0297ae4182d2c4565b02c234445b02b23442d2c4b525845441b2121592d2c4b515845441b21 +21592d2c01b005251023208af500b0016023edec2d2c01b005251023208af500b0016123edec +2d2c01b0062510f500edec2d2cb00243b001525821212121211b462346608a8a462320468a60 +8a61b8ff8062232010238ab10c0c8a70456020b0005058b00161b8ffba8b1bb0468c59b01060 +68013a592d2c2045b0032546524bb013515b58b0022546206861b00325b003253f2321381b21 +11592d2c2045b00325465058b0022546206861b00325b003253f2321381b2111592d2c00b007 +43b006430b2d2c21210c6423648bb84000622d2c21b08051580c6423648bb82000621bb20040 +2f2b59b002602d2c21b0c051580c6423648bb81555621bb200802f2b59b002602d2c0c642364 +8bb84000626023212d2c4b53588ab004254964234569b0408b61b08062b020616ab00e234423 +10b00ef61b21238a121120392f592d2c4b535820b0032549646920b00526b0062549642361b0 +8062b020616ab00e2344b0042610b00ef68a10b00e2344b00ef6b00e2344b00eed1b8ab00426 +111220392320392f2f592d2c4523456023456023456023766818b08062202d2cb0482b2d2c20 +45b0005458b040442045b04061441b2121592d2c45b1302f4523456160b0016069442d2c4b51 +58b02f2370b01423421b2121592d2c4b515820b0032545695358441b2121591b2121592d2c45 +b01443b0006063b0016069442d2cb02f45442d2c452320458a60442d2c45234560442d2c4b23 +5158b90033ffe0b134201bb3330034005944442d2cb0164358b00326458a586466b01f601b64 +b020606620581b21b04059b001615923586559b02923442310b029e01b2121212121592d2cb0 +024354584b53234b515a58381b2121591b21212121592d2cb0164358b004254564b020606620 +581b21b04059b0016123581b6559b0292344b00525b00825082058021b0359b0042510b00525 +2046b0042523423cb00425b0072508b0072510b006252046b00425b0016023423c2058011b00 +59b0042510b00525b029e0b02920456544b0072510b00625b029e0b00525b00825082058021b +0359b00525b003254348b00425b0072508b00625b00325b0016043481b215921212121212121 +2d2c02b00425202046b004252342b0052508b003254548212121212d2c02b0032520b0042508 +b0022543482121212d2c452320451820b00050205823652359236820b040505821b040592358 +65598a60442d2c4b53234b515a5820458a60441b2121592d2c4b545820458a60441b2121592d +2c4b53234b515a58381b2121592d2cb000214b5458381b2121592d2cb002435458b0462b1b21 +212121592d2cb002435458b0472b1b212121592d2cb002435458b0482b1b21212121592d2cb0 +02435458b0492b1b212121592d2c208a08234b538a4b515a5823381b2121592d2c00b0022549 +b000535820b04038111b21592d2c014623466023466123201020468a61b8ff80628ab140408a +704560683a2d2c208a2349648a2353583c1b21592d2c4b52587d1b7a592d2cb012004b014b54 +422d2cb1020042b123018851b1400188535a58b910000020885458b202010243604259b12401 +885158b920000040885458b2020202436042b12401885458b2022002436042004b014b5258b2 +020802436042591bb940000080885458b202040243604259b94000008063b80100885458b202 +080243604259b94000010063b80200885458b202100243604259b12601885158b94000020063 +b80400885458b202400243604259b94000040063b80800885458b20280024360425959595959 +59b10002435458400a0540084009400c020d021bb10102435458b2054008ba010000090100b3 +0c010d011bb18002435258b2054008b80180b109401bb2054008ba01800009014059b9400000 +808855b94000020063b8040088555a58b30c000d011bb30c000d0159595942424242422d2c45 +1868234b51582320452064b04050587c59688a6059442d2cb00016b00225b0022501b001233e +00b002233eb10102060cb00a236542b00b234201b001233f00b002233fb10102060cb0062365 +42b0072342b00116012d2cb080b0024350b001b00243545b58212310b0201ac91b8a10ed592d +2cb0592b2d2c8a10e52d0001000000021999ab64a7595f0f3cf5001f080000000000c8496826 +00000000dd7b292bfc25fcfd0a6f084400010008000200010000000000010000073efe4e0043 +0aaafc25fa7a0a6f000100000000000000000000000000000026060000cd0639005404730050 +04e3008702390000071d008704e3005004e300540239008f04730048047300500473003c0239 +008f04e3005404e3008902aa001902aa002304e3008706aa0089031d00870556003b04e3008f +05c70089047300080473001005c70033023900890473000e05c7007b040000520556008905c7 +005404e3007f05c7008904e3008904e3001704e3008704e30054000000000000004c000000fc +000001cc0000026c0000026c0000037400000400000004ac0000050c000005f8000006940000 +0798000008180000090400000948000009c800000a5000000afc00000cc400000d4c00000e28 +00000ec400000f78000011000000131000001564000015e400001664000016f4000017640000 +17f8000018a80000194400001a3c00001ab000001c1c00001cc800001d6c0001000000260152 0054005c000600020010002f005c0000034d0354000400014155013f000101390055013e0001 01390055014201400014001f01410140001f001f013b0033013a0055013800330139005500a4 013900f4013900020132003d0131005501310001012f00550130003d012f0055012c012900ff @@ -523,179 +513,179 @@ Encoding 121 /y put Encoding 122 /z put /CharStrings 35 dict dup begin /.notdef 0 def -/u 1 def -/L 2 def -/T 3 def -/R 4 def -/A 5 def -/space 6 def -/i 7 def -/n 8 def -/d 9 def -/e 10 def -/x 11 def -/g 12 def -/slash 13 def -/s 14 def -/o 15 def +/T 1 def +/A 2 def +/M 3 def +/space 4 def +/c 5 def +/o 6 def +/l 7 def +/a 8 def +/p 9 def +/s 10 def +/e 11 def +/f 12 def +/i 13 def +/t 14 def +/m 15 def /r 16 def -/t 17 def -/M 18 def -/c 19 def -/l 20 def -/a 21 def -/p 22 def -/f 23 def -/m 24 def -/y 25 def -/C 26 def -/S 27 def -/z 28 def -/I 29 def -/q 30 def -/three 31 def -/b 32 def -/v 33 def -/two 34 def +/g 17 def +/y 18 def +/n 19 def +/u 20 def +/two 21 def +/L 22 def +/R 23 def +/d 24 def +/x 25 def +/slash 26 def +/z 27 def +/I 28 def +/C 29 def +/S 30 def +/q 31 def +/three 32 def +/b 33 def +/v 34 def end readonly def /sfnts [ <0001000000090080000300106376742089437c3700001454000002ae6670676d7e61b6110000 1704000007b4676c7966775261350000009c000013b8686561640a13e53700001eb800000036 686865610863fd0400001ef000000024686d7478a8070eaa00001f140000008c6c6f63610001 -48c000001fa0000000906d61787004ba04c20000203000000020707265700f27a48900002050 +52d400001fa0000000906d61787004ba04c20000203000000020707265700f27a48900002050 000005fa0002007f0000038102f000030007001e400c060007030003080905010600002fcd2f cd111201393911331133313033112111032111217f030281fe00020002f0fd10026ffe120000 -00010087ffec043c043a0016002f401700160f080809160917180f121204525912160d150800 -0f003f323f3f2b11003311120139391133113311333130011114163332363511211114172126 -352306232226351101a059535a75011908fef40c056bdda4ac043afda18a93b1870244fcb88a -689047ebd1ce02af0000000100d30000046205450005001f400e030000050607010300035f59 -0012003f2b00183f111201393911333130331121112115d3012702680545fb9fe40000000001 -003d0000049005450007002640120601050102020908000405045f5905030112003f3f2b1100 -331112013911333311333130011121112135211502fafed9fe6a04530461fb9f0461e4e40002 -0089000004cb0545000d0015004d40260c010903000d0d0e0913030304090417160c13021302 -5f591313000505125f5905030d040012003f32323f2b11120039182f2b111200391112013939 -11331133113333113311123939313021012311211121200415140607090134262b0111333203 -7ffedeadfed901ee010801069483015dfe917c88a8b0fc0203fdfd0545cec289c027fdbb03a9 -5e59fe88000000020000000004cd05450007000e004d401b0b0304040507060c020801010000 -0805030f100b03615965080108b8ffd0400c090e4808060b0b0603040012003f323f392f1239 -2b5d2b11120117391133111239393232113311393931302901032103210121070e0103210226 -04cdfeda5cfe385cfed901bb0158ac082b73014c7529014afeb60545b62aa7fe6a019ca20002 -00760000047b05cc0009000d003a401f0d0100040a000305050e0f0b0a535b0b000807505908 -0f0004030450590315003f2b110033183f2b00183f2b11120139111733113333313025211521 -35211121352125352115031a0161fbfb018bfede023bfee70119bebebe02bebec3cfcf000000 -0001008700000450044f0018002f40171108080900180918191a11041504525915100d0f0900 -15003f323f3f2b11003311120139391133113311333130211134262322061511211134262721 -1e0115333e013320190103384d5e687dfee70503010c030a0439ac770150026b8d84b187fdbc -0348576f2c13a51f7c70fe60fd5100020061ffec044105cc00170024003a401d1e0a18031313 -140a14252613000d1b5059100d10072150590307160015003f3f332b00183f332b00183f1112 -013939113311333311333130212e0135230e0123220211101233321617332711211114170134 -2623220615141633323e010331040b04359c6bb3cecfbd6b9e2a0202011908fee37063646769 -603e62350f79286b59012c010301090128615eb2018dfb2064880222adbebbb7b8b759a60000 -00020064ffec0469044e0015001c0055402d190c0c0312131a0b0b1303031d1e12120700190c -51590f191f1902100319190007071651590710000f50590016003f2b00183f2b11120039182f -5f5e5d2b11120039182f11120117391133113311331133313005220011343e01333200111521 -14163332363705060403220607212e010272fcfeee81eea3ed0106fd2283724a7214010937ff -00b0677a0401cc077b140129010db4f880fec4fedd0893ac3f42178d9903b18b7b788e000001 -00310000049b043a000b0091405d0a070b0601040005080909000b06050502030b030d0cf407 -01b607e607029507017607860702520701460701340701160701fb0101b901e901029a010179 -018901023b015b010201040a070409080646055605660503050f0b03020015003f3232323f5d -33333317395d5d5d5d5d5d5d5d5d5d5d5d5d1112013939113333113311333311331112393911 -1239393130210901210901211b01210901036afefafef8fed50196fe7d012ff1f00131fe7d01 -990188fe78022f020bfe9e0162fdf8fdce0000000002007cfe4e045a044b0022002e004f4028 -040303291223180a0a2012202f301c0f1526505918151004040f000f2c50590c0f1500075159 -001c003f2b00183f332b11120039182f3f332b00183f11120139391133113333113333113331 -3001222627251e013332363d0137230623220211101233321617333436372106151114060334 -262322061514163332360268baea1b01190f5e41656802025debb3c6cec0699e2c050905010a -06ff16706164696c5f666dfe4e9a8921414c918f3b73c7011701030106011f615e2378136c8e -fce1e3f003dea4bab5afaea9bc00000000010059ffec047205cc0003001c400c030001020002 -040501000013003f3f111201393911331133313017013301590335e4fccf1405e0fa20000000 -00010079ffec0450044f002800584032070621141b1a0d00001a140604292a210d1703171e50 -59601b010f1b1f1b020a031b1b1710030a5059100720070207070316003f332f5d2b00183f33 -2f5f5e5d5d2b111200393911120117391133113311331133313001140423222627371e013332 -36353426272e0235343633321617072e01232206151416171e030450feffe3dfed27f7156780 -766c5768eea657efdbc1eb1df90c5e6664644d5b7fc57747013c9db38d95254d403c40343d15 -2f51815e9bad968e1a4241333c2f37121a374c7700000002005cffec0471044e000a00160028 -401411060b0006001718090e50590910031450590316003f2b00183f2b111201393911331133 -313001100023220011100033200134262322061514163332360471fef0fff6fef0010efe0209 -feda66797c6d6f6d7c70021efef3fedb0125010d010c0124fdd0c0afb0bfc1b1af0000000001 -00c600000439044e0014002940140e060607071415160e121202525912100b0f0615003f3f3f -2b1100331112013939113311333130012623220615112111342627211617333e013332170439 -70649cb7fee81b19010f240a0432aa886866035013ecc1fe4a02bd4cce638262887011000000 -000100a1fff3040b055400180036401b060a0a03181811191a140e5059141609010201505906 -020404020f003f332f11332b110033183f2b1112013939113333113331300123353313331121 -152111141e01333237150e0123222e01350148a7b558b00181fe7f214a437c838e76407fab57 -037cbe011afee6befdee583d231bba17094593850000000100630000046a05450019004e4029 -161101110a0e0e0f070614191701170300001919140f031a1b030a0a10161401140707171003 -0f0012003f323f33392f335d11331133111201173911331133335d11333311331133335d3130 -2111343702070323032627171615112311211316173637132111038c103b107cda7e1d2f0707 -dc015b870f17141488014f036469c4fede33fe2c01d46ce9646960fc9c0545fe0d2fb89b4b01 -f4fabb000001006effec0455044e0018004640260f030a141409150315191a060d50591f0a01 -0a0a061000141014020d03141400001150590016003f2b110033182f5f5e5d3f332f5d2b1112 -01393911333311331133313005220011100033321617052e012322111033323637050e020270 -f6fef4010ef8bffa20fee50c6058d9dd506c0d011a0f81d21401250106010c012bc0a90e5363 -fe95fe8a65640d6fae5f0000000500df0000047b05cc00110012001300140015000025171525 -26272627262711213521111617161727130103a2d9fea3635c2b1a1702fede023b02151b5c8e -09fedec002be051147215044660396befb8c56181f0d9afea80178000002006affec049a044e -002600310060401024073131150e0f2c03030f1503333227b8ffc040201013482707400f0e01 -0b030e070e071100110b51591110182e002e5059200016003f322b110033183f2b1112003939 -182f2f5f5e5d1a10cd2b111201173911331133113311333331300522263534363f0135342623 -220607251221321615111416333237150e0323222627230e0113070e0215143332363501b79d -b0d1d0df464e494508fedb360191cad72930201e1928282d1e6a650a063fa1c3865a512a7861 -8214ab9ba8af030437676a49500e0141c6c0fe785b450698060a060468657164020902022149 -3f98997500000002008cfe57046c044f00170025003e401f1f0a18041313140a142726170f13 -1b101c0d1c50590d160322072250590710003f2b110033183f2b110033183f3f111201393911 -3311333311333130011e0115333e01333212111002232226272317112111342701141e013332 -3635342623220e01019c06090430a16bb4cdcfbd6b9e2a0202fee708011d345f40656669603e -6235043a157e1d5f66fed2fefefef7fed6615eb2fe5e04f76488fdde77a155beb6b8b859a600 -000100750000046205ea00150033401a1301010602020c16170a0f50590a0100040504505913 -050f0115003f3f332b110033183f2b1112013939113333113331300111211121352135343633 -321715262322061d012115028dfee8ff000100dbcb9fa89680625d01bb037cfc84037cbe53ae -af1cb813516539be00000001004500000482044e0027004f402816272700001e090f0808091f -1e091e28291a2351591a1a13160f0f131304515913100c0f1f090015003f32323f3f2b110033 -11331133182f2b11120139391133113311331112391133123931302111342623220615112311 -3427331715333e0133321617333e01333216151123113426232206151101f52532333be506d1 -060222684e58571302286f557666e42532333b02929574bc99fdba0353bd2a7f30665d60646a -5aacd1fd2f02929574a1a1fda700000000010026fe5704a6043a00150000012227351f01323e -01370121131617371b0121010e0101456a4c33333c4f3f27fe400129be283d0951b40126fe40 -50befe570dc80503265869042ffdf16de12501250213fb8dcea2000000010050ffec0494055a -0015004e402d000b11101005060b0616170d145f591f110111110d04100501000510059005d0 -05040b0305050808035f590813003f2b110033182f5f5e5d713f332f5d2b1112013939113333 -1133113331300114163332370502212000111021321617052e012320017c8c8ba24e011185fe -81fee7fed90238bafb3bfef01d744bfef002a9e1f4f434fe580165015802b1c4c1426a750001 -0026ffec048d055a00280050402b0d001c1b2115070606151b00042a290d210318181e625900 -1c010d031c1c1804030a615980070107070313003f332f5d2b00183f332f5f5e5d2b11120039 -3911120117391133113311331133313001140421222427251e01333236353426272e03353424 -33321617052623220615141e01171e02048dfedbfefbebfed82a011d17927f847f706bd7b16a -390119e6e0fc25fee22cbd6a70365d8fbcca5e0187c0dbc6bd255e6d5459425b1a344d608150 -afccb1ba1db74f4a31412d252e71a0000001008a00000435043a00090035401a070401090206 -01060a0b060304035259040f0107000752590015003f2b110033183f2b110033111201393911 -33331133333130333501213521150121158a023afdef0351fdc90268c702a8cbc9fd5ccd0001 -009d000004310545000b0039401c000801050504080409090c0d040807085f590712030b000b -5f590003003f2b110033183f2b11003311120139113333113311331133313013211521112115 -21352111219d0394fec90137fc6c0137fec90545e4fc83e4e4037d00000000020061fe570441 -044f00160023003c401e171204040303251e0d0d2425160f101b50591210100a215059060a16 -031b003f3f332b00183f332b00183f1112013911331239113311333331300106151121113723 -0e012322021110123332173334363703342e01232206151416333236044108fee7020229a56f -bac8d6b5d062040c030d35613f606967646271043a8864fb0901a2b25b640126010d00ff0131 -c52c770dfdde78a659b8b8b7bdc000000001005dffe90465055a002900784044262311110600 -1b1c1c07061523230c0006002a2b070326101b1f11111075593f114f118f119f11bf11cf1106 -030d111d11020d041111031f1f1874591f07030975590319003f2b00183f2b11120039182f5f -5e5d5f5d2b111200391239113911120139391133331133113333113311123911123931300114 -042322242725163332363534262b01353332363534262322060725362433321e011514060715 -1e010465fef1efe6fef317011e19d269769187625c7a836d5b567008fee7160103d394d9739c -919db40178bdd2c9be19bc6557575ce35d534b60515814b3c25aa36b7ba41c0412a900000002 -008cffec046c05cc001700240038401d18130404031f0d030d2526101c50591310160a225059 -060a1003000015003f3f3f332b00183f332b1112013939113311331133333130333635112111 -07333e01333212111402232226272314060713141e013332363534262322068c080119020229 -a56fbac8d4b7689d2d0409060d35613f606967646271886404e0fe76b25b64fedafef3fefece -636121751a022378a659b8b8b7bdc00000000001001f000004a9043a000a0032401701000606 -02090a0302020a0b0c06010a0903020f000115003f333f333333123911120139391133113312 -391133333130290101211316173e0113210306feb0fe690129d10f38063de00126043afd9232 -c818cf02810000000001007b00000455055a001d005440301b01010e0f1c08150f151e1f0f0e -1f0e2f0e5f0e6f0e0512030e400c0f480e0e121b120b74591207011b001b75590018003f2b11 -0033183f2b11120039182f2b5f5e5d11120139391133331133331133313033353e01373e0235 -342623220607253e01333216151406070e010721157b32b9b18a522f5e5b5a5f0efee518f5d3 -dafe8989c2861e028ec36edd907156512a4852616110c4cec7a76dcf6b968444e700000005cc +0001003d0000049005450007002640120601050102020908000405045f5905030112003f3f2b +1100331112013911333311333130011121112135211502fafed9fe6a04530461fb9f0461e4e4 +00020000000004cd05450007000e004d401b0b0304040507060c0208010100000805030f100b +03615965080108b8ffd0400c090e4808060b0b0603040012003f323f392f12392b5d2b111201 +17391133111239393232113311393931302901032103210121070e010321022604cdfeda5cfe +385cfed901bb0158ac082b73014c7529014afeb60545b62aa7fe6a019ca2000100630000046a +05450019004e4029161101110a0e0e0f070614191701170300001919140f031a1b030a0a1016 +14011407071710030f0012003f323f33392f335d11331133111201173911331133335d113333 +11331133335d31302111343702070323032627171615112311211316173637132111038c103b +107cda7e1d2f0707dc015b870f17141488014f036469c4fede33fe2c01d46ce9646960fc9c05 +45fe0d2fb89b4b01f4fabb000001006effec0455044e0018004640260f030a14140915031519 +1a060d50591f0a010a0a061000141014020d03141400001150590016003f2b110033182f5f5e +5d3f332f5d2b111201393911333311331133313005220011100033321617052e012322111033 +323637050e020270f6fef4010ef8bffa20fee50c6058d9dd506c0d011a0f81d2140125010601 +0c012bc0a90e5363fe95fe8a65640d6fae5f00000002005cffec0471044e000a001600284014 +11060b0006001718090e50590910031450590316003f2b00183f2b1112013939113311333130 +01100023220011100033200134262322061514163332360471fef0fff6fef0010efe0209feda +66797c6d6f6d7c70021efef3fedb0125010d010c0124fdd0c0afb0bfc1b1af000000000500df +0000047b05cc0011001200130014001500002517152526272627262711213521111617161727 +130103a2d9fea3635c2b1a1702fede023b02151b5c8e09fedec002be051147215044660396be +fb8c56181f0d9afea80178000002006affec049a044e002600310060401024073131150e0f2c +03030f1503333227b8ffc040201013482707400f0e010b030e070e071100110b51591110182e +002e5059200016003f322b110033183f2b1112003939182f2f5f5e5d1a10cd2b111201173911 +331133113311333331300522263534363f013534262322060725122132161511141633323715 +0e0323222627230e0113070e0215143332363501b79db0d1d0df464e494508fedb360191cad7 +2930201e1928282d1e6a650a063fa1c3865a512a78618214ab9ba8af030437676a49500e0141 +c6c0fe785b450698060a0604686571640209020221493f98997500000002008cfe57046c044f +00170025003e401f1f0a18041313140a142726170f131b101c0d1c50590d1603220722505907 +10003f2b110033183f2b110033183f3f1112013939113311333311333130011e0115333e0133 +3212111002232226272317112111342701141e0133323635342623220e01019c06090430a16b +b4cdcfbd6b9e2a0202fee708011d345f40656669603e6235043a157e1d5f66fed2fefefef7fe +d6615eb2fe5e04f76488fdde77a155beb6b8b859a60000010079ffec0450044f002800584032 +070621141b1a0d00001a140604292a210d1703171e5059601b010f1b1f1b020a031b1b171003 +0a5059100720070207070316003f332f5d2b00183f332f5f5e5d5d2b11120039391112011739 +1133113311331133313001140423222627371e01333236353426272e0235343633321617072e +01232206151416171e030450feffe3dfed27f7156780766c5768eea657efdbc1eb1df90c5e66 +64644d5b7fc57747013c9db38d95254d403c40343d152f51815e9bad968e1a4241333c2f3712 +1a374c77000000020064ffec0469044e0015001c0055402d190c0c0312131a0b0b1303031d1e +12120700190c51590f191f1902100319190007071651590710000f50590016003f2b00183f2b +11120039182f5f5e5d2b11120039182f11120117391133113311331133313005220011343e01 +33320011152114163332363705060403220607212e010272fcfeee81eea3ed0106fd2283724a +7214010937ff00b0677a0401cc077b140129010db4f880fec4fedd0893ac3f42178d9903b18b +7b788e00000100750000046205ea00150033401a1301010602020c16170a0f50590a01000405 +04505913050f0115003f3f332b110033183f2b11120139391133331133313001112111213521 +35343633321715262322061d012115028dfee8ff000100dbcb9fa89680625d01bb037cfc8403 +7cbe53aeaf1cb813516539be0000000200760000047b05cc0009000d003a401f0d0100040a00 +0305050e0f0b0a535b0b0008075059080f0004030450590315003f2b110033183f2b00183f2b +1112013911173311333331302521152135211121352125352115031a0161fbfb018bfede023b +fee70119bebebe02bebec3cfcf000000000100a1fff3040b055400180036401b060a0a031818 +11191a140e5059141609010201505906020404020f003f332f11332b110033183f2b11120139 +39113333113331300123353313331121152111141e01333237150e0123222e01350148a7b558 +b00181fe7f214a437c838e76407fab57037cbe011afee6befdee583d231bba17094593850000 +0001004500000482044e0027004f402816272700001e090f0808091f1e091e28291a2351591a +1a13160f0f131304515913100c0f1f090015003f32323f3f2b11003311331133182f2b111201 +393911331133113311123911331239313021113426232206151123113427331715333e013332 +1617333e01333216151123113426232206151101f52532333be506d1060222684e5857130228 +6f557666e42532333b02929574bc99fdba0353bd2a7f30665d60646a5aacd1fd2f02929574a1 +a1fda7000000000100c600000439044e0014002940140e060607071415160e12120252591210 +0b0f0615003f3f3f2b1100331112013939113311333130012623220615112111342627211617 +333e01333217043970649cb7fee81b19010f240a0432aa886866035013ecc1fe4a02bd4cce63 +82628870110000000002007cfe4e045a044b0022002e004f4028040303291223180a0a201220 +2f301c0f1526505918151004040f000f2c50590c0f1500075159001c003f2b00183f332b1112 +0039182f3f332b00183f111201393911331133331133331133313001222627251e013332363d +0137230623220211101233321617333436372106151114060334262322061514163332360268 +baea1b01190f5e41656802025debb3c6cec0699e2c050905010a06ff16706164696c5f666dfe +4e9a8921414c918f3b73c7011701030106011f615e2378136c8efce1e3f003dea4bab5afaea9 +bc00000000010026fe5704a6043a00150000012227351f01323e01370121131617371b012101 +0e0101456a4c33333c4f3f27fe400129be283d0951b40126fe4050befe570dc8050326586904 +2ffdf16de12501250213fb8dcea200000001008700000450044f0018002f4017110808090018 +0918191a11041504525915100d0f090015003f323f3f2b110033111201393911331133113331 +302111342623220615112111342627211e0115333e013320190103384d5e687dfee70503010c +030a0439ac770150026b8d84b187fdbc0348576f2c13a51f7c70fe60fd5100010087ffec043c +043a0016002f401700160f080809160917180f121204525912160d1508000f003f323f3f2b11 +0033111201393911331133113331300111141633323635112111141721263523062322263511 +01a059535a75011908fef40c056bdda4ac043afda18a93b1870244fcb88a689047ebd1ce02af +00000001007b00000455055a001d005440301b01010e0f1c08150f151e1f0f0e1f0e2f0e5f0e +6f0e0512030e400c0f480e0e121b120b74591207011b001b75590018003f2b110033183f2b11 +120039182f2b5f5e5d11120139391133331133331133313033353e01373e0235342623220607 +253e01333216151406070e010721157b32b9b18a522f5e5b5a5f0efee518f5d3dafe8989c286 +1e028ec36edd907156512a4852616110c4cec7a76dcf6b968444e7000000000100d300000462 +05450005001f400e030000050607010300035f590012003f2b00183f11120139391133313033 +1121112115d3012702680545fb9fe400000000020089000004cb0545000d0015004d40260c01 +0903000d0d0e0913030304090417160c130213025f591313000505125f5905030d040012003f +32323f2b11120039182f2b111200391112013939113311331133331133111239393130210123 +11211121200415140607090134262b01113332037ffedeadfed901ee010801069483015dfe91 +7c88a8b0fc0203fdfd0545cec289c027fdbb03a95e59fe88000000020061ffec044105cc0017 +0024003a401d1e0a18031313140a14252613000d1b5059100d10072150590307160015003f3f +332b00183f332b00183f1112013939113311333311333130212e0135230e0123220211101233 +3216173327112111141701342623220615141633323e010331040b04359c6bb3cecfbd6b9e2a +0202011908fee37063646769603e62350f79286b59012c010301090128615eb2018dfb206488 +0222adbebbb7b8b759a60000000100310000049b043a000b0091405d0a070b06010400050809 +09000b06050502030b030d0cf40701b607e60702950701760786070252070146070134070116 +0701fb0101b901e901029a010179018901023b015b010201040a070409080646055605660503 +050f0b03020015003f3232323f5d33333317395d5d5d5d5d5d5d5d5d5d5d5d5d111201393911 +33331133113333113311123939111239393130210901210901211b01210901036afefafef8fe +d50196fe7d012ff1f00131fe7d01990188fe78022f020bfe9e0162fdf8fdce00000000010059 +ffec047205cc0003001c400c030001020002040501000013003f3f1112013939113311333130 +17013301590335e4fccf1405e0fa200000000001008a00000435043a00090035401a07040109 +020601060a0b060304035259040f0107000752590015003f2b110033183f2b11003311120139 +391133331133333130333501213521150121158a023afdef0351fdc90268c702a8cbc9fd5ccd +0001009d000004310545000b0039401c000801050504080409090c0d040807085f590712030b +000b5f590003003f2b110033183f2b1100331112013911333311331133113331301321152111 +211521352111219d0394fec90137fc6c0137fec90545e4fc83e4e4037d00000000010050ffec +0494055a0015004e402d000b11101005060b0616170d145f591f110111110d04100501000510 +059005d005040b0305050808035f590813003f2b110033182f5f5e5d713f332f5d2b11120139 +391133331133113331300114163332370502212000111021321617052e012320017c8c8ba24e +011185fe81fee7fed90238bafb3bfef01d744bfef002a9e1f4f434fe580165015802b1c4c142 +6a7500010026ffec048d055a00280050402b0d001c1b2115070606151b00042a290d21031818 +1e6259001c010d031c1c1804030a615980070107070313003f332f5d2b00183f332f5f5e5d2b +111200393911120117391133113311331133313001140421222427251e01333236353426272e +0335342433321617052623220615141e01171e02048dfedbfefbebfed82a011d17927f847f70 +6bd7b16a390119e6e0fc25fee22cbd6a70365d8fbcca5e0187c0dbc6bd255e6d5459425b1a34 +4d608150afccb1ba1db74f4a31412d252e71a00000020061fe570441044f00160023003c401e +171204040303251e0d0d2425160f101b50591210100a215059060a16031b003f3f332b00183f +332b00183f11120139113312391133113333313001061511211137230e012322021110123332 +173334363703342e01232206151416333236044108fee7020229a56fbac8d6b5d062040c030d +35613f606967646271043a8864fb0901a2b25b640126010d00ff0131c52c770dfdde78a659b8 +b8b7bdc000000001005dffe90465055a0029007840442623111106001b1c1c07061523230c00 +06002a2b070326101b1f11111075593f114f118f119f11bf11cf1106030d111d11020d041111 +031f1f1874591f07030975590319003f2b00183f2b11120039182f5f5e5d5f5d2b1112003912 +3911391112013939113333113311333311331112391112393130011404232224272516333236 +3534262b01353332363534262322060725362433321e0115140607151e010465fef1efe6fef3 +17011e19d269769187625c7a836d5b567008fee7160103d394d9739c919db40178bdd2c9be19 +bc6557575ce35d534b60515814b3c25aa36b7ba41c0412a900000002008cffec046c05cc0017 +00240038401d18130404031f0d030d2526101c50591310160a225059060a1003000015003f3f +3f332b00183f332b111201393911331133113333313033363511211107333e01333212111402 +232226272314060713141e013332363534262322068c080119020229a56fbac8d4b7689d2d04 +09060d35613f606967646271886404e0fe76b25b64fedafef3fefece636121751a022378a659 +b8b8b7bdc00000000001001f000004a9043a000a003240170100060602090a0302020a0b0c06 +010a0903020f000115003f333f33333312391112013939113311331239113333313029010121 +1316173e0113210306feb0fe690129d10f38063de00126043afd9232c818cf028100000005cc 001e007d05450015004e054500150000000000000000000000000000043a001400770000ffec 00000000ffecff620000ffec0000fe57fff70000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000 @@ -766,16 +756,16 @@ b80200885458b202100243604259b12601885158b94000020063b80400885458b20240024360 4050587c59688a6059442d2cb00016b00225b0022501b001233e00b002233eb10102060cb00a 236542b00b234201b001233f00b002233fb10102060cb006236542b0072342b00116012d2cb0 80b0024350b001b00243545b58212310b0201ac91b8a10ed592d2cb0592b2d2c8a10e52d0001 -000000021999621de2655f0f3cf5001f080000000000c850bf5e00000000e0d5c25dfc25fcfd +000000021999621dce3d5f0f3cf5001f080000000000c850bf5e00000000e0d5c25dfc25fcfd 059307e80001000800020001000000000001000006a9fd99000004cdfc25fa7a059300010000 -000000000000000000000000002304cd007f04cd008704cd00d304cd003d04cd008904cd0000 -04cd000004cd007604cd008704cd006104cd006404cd003104cd007c04cd005904cd007904cd -005c04cd00c604cd00a104cd006304cd006e04cd00df04cd006a04cd008c04cd007504cd0045 -04cd002604cd005004cd002604cd008a04cd009d04cd006104cd005d04cd008c04cd001f04cd -007b0000000000000048000000c40000010400000150000001f00000028000000280000002f4 -0000037400000424000004e0000005b400000694000006d0000007a400000824000008980000 -0920000009cc00000a6c00000ac800000bbc00000c7400000cf000000db400000e0c00000eac -00000f7c00000fdc00001048000010f8000011f00000129c00001304000013b8000100000023 +000000000000000000000000002304cd007f04cd003d04cd000004cd006304cd000004cd006e +04cd005c04cd00df04cd006a04cd008c04cd007904cd006404cd007504cd007604cd00a104cd +004504cd00c604cd007c04cd002604cd008704cd008704cd007b04cd00d304cd008904cd0061 +04cd003104cd005904cd008a04cd009d04cd005004cd002604cd006104cd005d04cd008c04cd +001f00000000000000480000009400000124000001d0000001d000000270000002f00000034c +00000440000004f8000005cc00000688000007040000077800000800000008c4000009380000 +0a1800000a7000000af000000b6c00000c2000000c6000000d0000000db000000e8400000ec0 +00000f2000000f8c0000102c000010fc000011ac000012a400001350000013b8000100000023 01220048005d000600020010002f005c000003d9031100030001412b01530001014d00550152 0001014d0055015601540014001f01550154001f001f014f0033014e0055014c0033014d0055 00a4014d00f4014d0002013d003d013c0055013c0001013a0055013b003d013a005501350134 @@ -823,1660 +813,1115 @@ b80190b154532b2b4bb807ff524bb009505bb00188b02553b00188b040515ab00688b000555a %%EndSetup %%Page: 1 1 %%BeginPageSetup -%%PageBoundingBox: 0 1 741 580 +%%PageBoundingBox: 0 0 783 612 %%EndPageSetup -q 0 1 741 579 rectclip -1 0 0 -1 0 580 cm q +q 0 0 783 612 rectclip +1 0 0 -1 0 612 cm q 1 g -0.281 0.168 740.438 578.664 re f -0.784314 g -37.695 33.785 m 108.152 33.785 l 112.352 33.785 115.73 37.168 115.73 41.363 - c 115.73 68.254 l 115.73 72.453 112.352 75.832 108.152 75.832 c 37.695 -75.832 l 33.5 75.832 30.117 72.453 30.117 68.254 c 30.117 41.363 l 30.117 - 37.168 33.5 33.785 37.695 33.785 c h -37.695 33.785 m f -0 g -2.434763 w -0 J -1 j -[] 0.0 d -4 M q 1 0 0 1 0 0 cm -37.695 33.785 m 108.152 33.785 l 112.352 33.785 115.73 37.168 115.73 41.363 - c 115.73 68.254 l 115.73 72.453 112.352 75.832 108.152 75.832 c 37.695 -75.832 l 33.5 75.832 30.117 72.453 30.117 68.254 c 30.117 41.363 l 30.117 - 37.168 33.5 33.785 37.695 33.785 c h -37.695 33.785 m S Q -BT -14.000025 0 0 -14.000025 37.545012 49.615414 Tm -/f-0-0 1 Tf -(Entrypoint)Tj -0.915771 -1.259121 Td -(isoseq)Tj -ET -0.784314 g -29.668 481.215 m 100.121 481.215 l 104.32 481.215 107.699 484.594 107.699 - 488.789 c 107.699 515.684 l 107.699 519.879 104.32 523.258 100.121 523.258 - c 29.668 523.258 l 25.469 523.258 22.09 519.879 22.09 515.684 c 22.09 488.789 - l 22.09 484.594 25.469 481.215 29.668 481.215 c h -29.668 481.215 m f -0 g -q 1 0 0 1 0 0 cm -29.668 481.215 m 100.121 481.215 l 104.32 481.215 107.699 484.594 107.699 - 488.789 c 107.699 515.684 l 107.699 519.879 104.32 523.258 100.121 523.258 - c 29.668 523.258 l 25.469 523.258 22.09 519.879 22.09 515.684 c 22.09 488.789 - l 22.09 484.594 25.469 481.215 29.668 481.215 c h -29.668 481.215 m S Q -BT -14.000025 0 0 -14.000025 29.515174 497.042096 Tm -/f-0-0 1 Tf -(Entrypoint)Tj -1.47168 -1.259121 Td -(map)Tj -ET +0 0 782.68 611.676 re f 0.141176 0.690196 0.392157 rg 7.5 w -0 j -q 1 0 0 1 0 0 cm -429.445 336.805 m 429.445 388.781 l S Q -1 0.6 0.0784314 rg -q 1 0 0 1 0 0 cm -272.707 327.355 m 347.539 327.355 l S Q -q 1 0 0 1 0 0 cm -392.027 327.359 m 466.863 327.359 l S Q -q 1 0 0 1 0 0 cm -333.023 327.355 m 407.859 327.355 l S Q -q 1 0 0 1 0 0 cm -428.551 390.125 m 463.551 390.125 l S Q -0 g -261.738 321.469 m 260.742 321.469 l 260.742 316.672 l 260.742 316.645 260.738 - 316.613 260.738 316.582 c 260.734 316.391 260.676 316.207 260.543 316.059 - c 252.562 306.941 l 252.562 306.938 252.559 306.938 252.559 306.938 c 252.512 - 306.883 252.457 306.84 252.398 306.801 c 252.379 306.789 252.363 306.777 - 252.344 306.77 c 252.293 306.742 252.238 306.719 252.184 306.703 c 252.168 - 306.695 252.156 306.691 252.141 306.688 c 252.078 306.672 252.016 306.664 - 251.953 306.664 c 232.344 306.664 l 231.449 306.664 230.719 307.391 230.719 - 308.285 c 230.719 321.469 l 229.727 321.469 l 228.445 321.469 227.406 322.504 - 227.406 323.789 c 227.406 335.852 l 227.406 337.133 228.445 338.172 229.727 - 338.172 c 230.719 338.172 l 230.719 346.426 l 230.719 347.324 231.449 348.051 - 232.344 348.051 c 259.121 348.051 l 260.016 348.051 260.746 347.324 260.746 - 346.426 c 260.746 338.172 l 261.738 338.172 l 263.02 338.172 264.059 337.133 - 264.059 335.852 c 264.059 323.789 l 264.059 322.508 263.02 321.469 261.738 - 321.469 c h -232.344 308.289 m 251.141 308.289 l 251.141 316.59 l 251.141 317.039 251.5 - 317.402 251.949 317.402 c 259.117 317.402 l 259.117 321.469 l 232.344 321.469 - l h -259.117 345.988 m 232.344 345.988 l 232.344 338.172 l 259.117 338.172 l - h -259.117 345.988 m f -261.738 321.469 m 229.727 321.469 l 228.445 321.469 227.406 322.504 227.406 - 323.789 c 227.406 335.852 l 227.406 337.133 228.445 338.172 229.727 338.172 - c 261.738 338.172 l 263.02 338.172 264.059 337.133 264.059 335.852 c 264.059 - 323.789 l 264.059 322.508 263.02 321.469 261.738 321.469 c h -261.738 321.469 m f -1 g -BT -10.942725 0 0 -10.942725 237.282891 332.591011 Tm -/f-0-0 1 Tf -(gtf)Tj -ET -232.344 308.27 m 251.141 308.27 l 251.141 316.574 l 251.141 317.023 251.5 - 317.387 251.949 317.387 c 259.117 317.387 l 259.117 321.449 l 232.344 321.449 - l h -259.117 345.973 m 232.344 345.973 l 232.344 338.152 l 259.117 338.152 l - h -259.117 345.973 m f -0 g -BT -10.281975 0 0 -10.281975 221.254891 358.750992 Tm -/f-0-0 1 Tf -(Reference)Tj --0.220234 -1.338889 Td -(Annotation)Tj -ET -9.4488 w -1 J -q 1 0 0 1 0 0 cm -438.895 327.355 m 438.895 332.574 434.664 336.805 429.445 336.805 c 424.227 - 336.805 419.996 332.574 419.996 327.355 c 419.996 322.141 424.227 317.91 - 429.445 317.91 c 434.664 317.91 438.895 322.141 438.895 327.355 c h -438.895 327.355 m S Q -1 g -438.895 327.355 m 438.895 332.574 434.664 336.805 429.445 336.805 c 424.227 - 336.805 419.996 332.574 419.996 327.355 c 419.996 322.141 424.227 317.91 - 429.445 317.91 c 434.664 317.91 438.895 322.141 438.895 327.355 c h -438.895 327.355 m f -0 g -BT -12 0 0 -12 404.783894 295.738014 Tm -/f-0-0 1 Tf -(Indexing)Tj -ET -0.141176 0.690196 0.392157 rg -BT -12 0 0 -12 389.595891 309.020004 Tm -/f-1-0 1 Tf -(uLTRA index)Tj -ET -0 g -q 1 0 0 1 0 0 cm -318.688 327.355 m 318.688 332.574 314.457 336.805 309.238 336.805 c 304.02 - 336.805 299.789 332.574 299.789 327.355 c 299.789 322.141 304.02 317.91 - 309.238 317.91 c 314.457 317.91 318.688 322.141 318.688 327.355 c h -318.688 327.355 m S Q -1 g -318.688 327.355 m 318.688 332.574 314.457 336.805 309.238 336.805 c 304.02 - 336.805 299.789 332.574 299.789 327.355 c 299.789 322.141 304.02 317.91 - 309.238 317.91 c 314.457 317.91 318.688 322.141 318.688 327.355 c h -318.688 327.355 m f -0 g -BT -12 0 0 -12 297.138883 295.738014 Tm -/f-0-0 1 Tf -(Sort)Tj -ET -0.141176 0.690196 0.392157 rg -BT -12 0 0 -12 280.638883 309.020004 Tm -/f-1-0 1 Tf -(gnu/sort)Tj -ET -0 g -508.824 321.469 m 507.832 321.469 l 507.832 316.672 l 507.832 316.645 507.828 - 316.613 507.824 316.582 c 507.82 316.391 507.762 316.203 507.629 316.055 - c 499.652 306.941 l 499.648 306.938 499.648 306.938 499.645 306.938 c 499.594 - 306.883 499.539 306.84 499.48 306.801 c 499.465 306.789 499.449 306.781 - 499.43 306.77 c 499.379 306.738 499.324 306.719 499.27 306.699 c 499.25 - 306.695 499.238 306.688 499.227 306.688 c 499.164 306.676 499.102 306.664 - 499.039 306.664 c 479.426 306.664 l 478.531 306.664 477.805 307.391 477.805 - 308.285 c 477.805 321.469 l 476.812 321.469 l 475.531 321.469 474.492 322.504 - 474.492 323.789 c 474.492 335.852 l 474.492 337.133 475.531 338.172 476.812 - 338.172 c 477.805 338.172 l 477.805 346.426 l 477.805 347.324 478.531 348.051 - 479.426 348.051 c 506.207 348.051 l 507.102 348.051 507.832 347.324 507.832 - 346.426 c 507.832 338.172 l 508.824 338.172 l 510.105 338.172 511.145 337.133 - 511.145 335.852 c 511.145 323.789 l 511.145 322.508 510.105 321.469 508.824 - 321.469 c h -479.43 308.285 m 498.227 308.285 l 498.227 316.59 l 498.227 317.039 498.59 - 317.402 499.039 317.402 c 506.207 317.402 l 506.207 321.469 l 479.43 321.469 - l h -506.207 345.988 m 479.43 345.988 l 479.43 338.168 l 506.207 338.168 l h -506.207 345.988 m f -508.824 321.469 m 507.832 321.469 l 477.805 321.465 l 476.812 321.465 l - 475.531 321.465 474.492 322.504 474.492 323.785 c 474.492 335.852 l 474.492 - 337.129 475.531 338.168 476.812 338.168 c 508.824 338.168 l 510.105 338.168 - 511.145 337.129 511.145 335.852 c 511.145 323.785 l 511.145 322.504 510.105 - 321.469 508.824 321.469 c h -508.824 321.469 m f -1 g -BT -10.942725 0 0 -10.942725 479.297655 333.849014 Tm -/f-0-0 1 Tf -(fasta)Tj -ET -479.43 308.27 m 498.227 308.27 l 498.227 316.574 l 498.227 317.02 498.59 - 317.383 499.039 317.383 c 506.207 317.383 l 506.207 321.449 l 479.43 321.449 - l h -506.207 345.969 m 479.43 345.969 l 479.43 338.152 l 506.207 338.152 l h -506.207 345.969 m f -0 g -BT -10.281975 0 0 -10.281975 472.170641 358.330009 Tm -/f-0-0 1 Tf -(Genome)Tj -ET -1 0.6 0.0784314 rg -7.499993 w -2 J -1 j -q 1 0 0 1 0 0 cm -490.984 366.441 m 490.984 379.52 480.383 390.125 467.301 390.125 c S Q 0 J 0 j -q 1 0 0 1 0 0 cm -490.984 367.141 m 490.984 362.691 l S Q -0.141176 0.690196 0.392157 rg -q 1 0 0 1 0 0 cm -576.836 85.191 m 576.836 145.191 l S Q +[] 0.0 d +4 M q 1 0 0 1 0 0 cm +628.418 138.559 m 670.543 138.559 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -584.336 85.191 m 584.336 145.191 l S Q -0 g -BT -10.281975 0 0 -10.281975 201.212997 184.654015 Tm -/f-0-0 1 Tf -(Primers)Tj -ET -236.637 147.422 m 235.641 147.422 l 235.641 142.625 l 235.641 142.598 235.637 - 142.566 235.633 142.535 c 235.633 142.344 235.57 142.16 235.441 142.012 - c 227.461 132.895 l 227.461 132.891 227.457 132.891 227.453 132.891 c 227.406 - 132.84 227.352 132.793 227.293 132.754 c 227.277 132.742 227.258 132.734 - 227.238 132.723 c 227.188 132.695 227.133 132.672 227.078 132.656 c 227.062 - 132.652 227.051 132.645 227.035 132.645 c 226.977 132.629 226.914 132.617 - 226.848 132.617 c 207.238 132.617 l 206.344 132.617 205.617 133.348 205.617 - 134.242 c 205.617 147.422 l 204.621 147.422 l 203.34 147.422 202.301 148.461 - 202.301 149.742 c 202.301 161.805 l 202.301 163.086 203.34 164.125 204.621 - 164.125 c 205.617 164.125 l 205.617 172.383 l 205.617 173.277 206.344 174.004 - 207.238 174.004 c 234.02 174.004 l 234.914 174.004 235.641 173.277 235.641 - 172.383 c 235.641 164.125 l 236.637 164.125 l 237.914 164.125 238.953 163.086 - 238.953 161.805 c 238.953 149.742 l 238.953 148.461 237.914 147.422 236.637 - 147.422 c h -207.238 134.242 m 226.039 134.242 l 226.039 142.547 l 226.039 142.992 226.402 - 143.355 226.852 143.355 c 234.02 143.355 l 234.02 147.422 l 207.238 147.422 - l h -234.02 171.941 m 207.238 171.941 l 207.238 164.125 l 234.02 164.125 l h -234.02 171.941 m f -236.637 147.422 m 204.621 147.422 l 203.34 147.422 202.305 148.461 202.305 - 149.742 c 202.305 161.805 l 202.305 163.086 203.34 164.125 204.621 164.125 - c 236.637 164.125 l 237.918 164.125 238.957 163.086 238.957 161.805 c 238.957 - 149.742 l 238.957 148.461 237.918 147.422 236.637 147.422 c h -236.637 147.422 m f -1 g -BT -10.942725 0 0 -10.942725 207.110001 159.803009 Tm -/f-0-0 1 Tf -(fasta)Tj -ET -207.238 134.223 m 226.039 134.223 l 226.039 142.527 l 226.039 142.977 226.402 - 143.34 226.852 143.34 c 234.02 143.34 l 234.02 147.406 l 207.238 147.406 - l h -234.02 171.926 m 207.238 171.926 l 207.238 164.105 l 234.02 164.105 l h -234.02 171.926 m f +628.418 146.059 m 670.543 146.059 l S Q 0 g BT -12 0 0 -12 602.791992 321.257011 Tm +12 0 0 -12 479.257703 318.37539 Tm /f-0-0 1 Tf -(Gene models cleanning)Tj +(Gene models cleaning)Tj ET 0.141176 0.690196 0.392157 rg BT -12 0 0 -12 602.926987 335.329994 Tm +12 0 0 -12 512.811963 332.448419 Tm /f-1-0 1 Tf [(TAMA collapse)]TJ ET 0 g BT -12 0 0 -12 602.481995 225.612007 Tm +12 0 0 -12 468.149002 229.95948 Tm /f-0-0 1 Tf (List files sample)Tj ET 0.141176 0.690196 0.392157 rg BT -12 0 0 -12 602.926987 239.808998 Tm +12 0 0 -12 468.64824 244.156471 Tm /f-1-0 1 Tf [(TAMA filelist)]TJ ET 0 g BT -12 0 0 -12 602.481995 143.086018 Tm +12 0 0 -12 488.30952 138.744453 Tm /f-0-0 1 Tf [(Merging annotations)]TJ ET 0.141176 0.690196 0.392157 rg BT -12 0 0 -12 602.926987 156.368008 Tm +12 0 0 -12 534.411906 152.026466 Tm /f-1-0 1 Tf (TAMA merge)Tj ET 0 g -596.402 18.555 m 595.406 18.555 l 595.406 13.758 l 595.406 13.73 595.402 - 13.699 595.398 13.668 c 595.398 13.477 595.336 13.293 595.207 13.145 c -587.227 4.027 l 587.223 4.023 587.223 4.023 587.223 4.023 c 587.172 3.969 - 587.117 3.926 587.059 3.887 c 587.043 3.875 587.023 3.863 587.008 3.855 - c 586.957 3.828 586.902 3.805 586.848 3.789 c 586.832 3.781 586.816 3.777 - 586.801 3.773 c 586.742 3.758 586.68 3.75 586.617 3.75 c 567.004 3.75 l - 566.109 3.75 565.383 4.477 565.383 5.375 c 565.383 18.555 l 564.387 18.555 - l 563.109 18.555 562.07 19.594 562.07 20.875 c 562.07 32.938 l 562.07 34.219 - 563.109 35.258 564.387 35.258 c 565.383 35.258 l 565.383 43.516 l 565.383 - 44.41 566.109 45.137 567.004 45.137 c 593.785 45.137 l 594.68 45.137 595.406 - 44.41 595.406 43.516 c 595.406 35.258 l 596.402 35.258 l 597.684 35.258 - 598.723 34.219 598.723 32.938 c 598.723 20.875 l 598.723 19.594 597.684 - 18.555 596.402 18.555 c h -567.004 5.375 m 585.805 5.375 l 585.805 13.676 l 585.805 14.125 586.168 - 14.488 586.617 14.488 c 593.785 14.488 l 593.785 18.555 l 567.004 18.555 - l h -593.785 43.074 m 567.004 43.074 l 567.004 35.258 l 593.785 35.258 l h -593.785 43.074 m f -596.402 18.555 m 564.387 18.555 l 563.105 18.555 562.066 19.594 562.066 - 20.875 c 562.066 32.938 l 562.066 34.219 563.105 35.258 564.387 35.258 -c 596.402 35.258 l 597.684 35.258 598.723 34.219 598.723 32.938 c 598.723 - 20.875 l 598.723 19.594 597.684 18.555 596.402 18.555 c h -596.402 18.555 m f -1 g -BT -10.942725 0 0 -10.942725 570.233963 30.909013 Tm -/f-0-0 1 Tf -(bed)Tj -ET -567.004 5.355 m 585.805 5.355 l 585.805 13.66 l 585.805 14.109 586.168 -14.473 586.617 14.473 c 593.785 14.473 l 593.785 18.535 l 567.004 18.535 - l h -593.785 43.059 m 567.004 43.059 l 567.004 35.238 l 593.785 35.238 l h -593.785 43.059 m f -0 g -BT -10.281975 0 0 -10.281975 564.493973 55.313015 Tm -/f-0-0 1 Tf -(Isoseq)Tj --1.332273 -1.338886 Td -(Annotations)Tj -ET -0.141176 0.690196 0.392157 rg -2 J -1 j -q 1 0 0 1 0 0 cm -576.879 418.941 m 576.879 432.023 566.273 442.625 553.195 442.625 c S Q -0.494118 0.698039 0.866667 rg -q 1 0 0 1 0 0 cm -584.379 418.941 m 584.379 436.164 570.418 450.125 553.195 450.125 c S Q -0.141176 0.690196 0.392157 rg -0 J -0 j -q 1 0 0 1 0 0 cm -576.879 385.191 m 576.879 415.191 l S Q -0.494118 0.698039 0.866667 rg -q 1 0 0 1 0 0 cm -584.379 385.191 m 584.379 415.191 l S Q -0.141176 0.690196 0.392157 rg -q 1 0 0 1 0 0 cm -576.879 325.191 m 576.879 385.191 l S Q -0.494118 0.698039 0.866667 rg -q 1 0 0 1 0 0 cm -584.379 325.191 m 584.379 385.191 l S Q -0 g BT -12 0 0 -12 14.499999 381.257011 Tm +0 -10.281975 -10.281975 0 42.393685 234.103706 Tm /f-0-0 1 Tf +(Samplesheet)Tj +12 0 0 -12 222.260118 318.369498 Tm [(Removing polyA)37( tails)]TJ ET 0.141176 0.690196 0.392157 rg BT -12 0 0 -12 13.724599 395.330017 Tm +12 0 0 -12 222.70543 332.442526 Tm /f-1-0 1 Tf [(TAMA polyAcleanup)]TJ -8.385696 19.944334 Td -(CCS)Tj ET +7.499993 w 2 J 1 j q 1 0 0 1 0 0 cm -185.695 442.625 m 172.613 442.625 162.012 432.023 162.012 418.941 c S Q -1 0.6 0.0784314 rg -q 1 0 0 1 0 0 cm -165.762 182.371 m 165.762 169.289 176.363 158.688 189.445 158.688 c S Q +205.141 386.055 m 205.141 399.137 215.742 409.738 228.824 409.738 c S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -185.695 450.125 m 168.473 450.125 154.512 436.164 154.512 418.941 c S Q +197.641 386.055 m 197.641 403.277 211.602 417.238 228.824 417.238 c S Q 0.141176 0.690196 0.392157 rg 0 J 0 j q 1 0 0 1 0 0 cm -162.012 85.191 m 162.012 145.191 l S Q +205.141 142.305 m 205.141 82.305 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -154.512 85.191 m 154.512 145.191 l S Q +197.641 142.305 m 197.641 82.305 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -162.012 385.191 m 162.012 415.191 l S Q +205.141 202.305 m 205.141 142.305 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -154.512 385.191 m 154.512 415.191 l S Q +197.641 202.305 m 197.641 142.305 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -162.012 325.191 m 162.012 385.191 l S Q +205.141 262.305 m 205.141 202.305 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -154.512 325.191 m 154.512 385.191 l S Q +197.641 262.305 m 197.641 202.305 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -162.012 265.191 m 162.012 325.191 l S Q +205.141 322.305 m 205.141 262.305 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -154.512 265.191 m 154.512 325.191 l S Q +197.641 322.305 m 197.641 262.305 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -158.262 205.191 m 158.262 265.191 l S Q +205.141 382.305 m 205.141 322.305 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -150.762 205.191 m 150.762 265.191 l S Q -0.141176 0.690196 0.392157 rg +197.641 382.305 m 197.641 322.305 l S Q +1 0.6 0.0784314 rg +3.75 w q 1 0 0 1 0 0 cm -158.262 145.191 m 158.262 205.191 l S Q -0.494118 0.698039 0.866667 rg +66.602 296.781 m 66.602 107.863 l S Q q 1 0 0 1 0 0 cm -150.762 145.191 m 150.762 205.191 l S Q -1 0.6 0.0784314 rg +92.16 322.305 m 189.766 322.305 l S Q +q 1 0 0 1 0 0 cm +92.16 262.305 m 189.766 262.305 l S Q +q 1 0 0 1 0 0 cm +92.16 142.305 m 190.215 142.305 l S Q q 1 0 0 1 0 0 cm -165.762 184.848 m 165.762 205.191 l S Q +72.359 202.305 m 191.941 202.305 l S Q q 1 0 0 1 0 0 cm -165.762 244.848 m 165.762 265.191 l S Q +92.16 82.305 m 190.215 82.305 l S Q 0 g 9.4488 w 1 J q 1 0 0 1 0 0 cm -158.262 154.641 m 153.043 154.641 148.812 150.41 148.812 145.191 c 148.812 - 139.973 153.043 135.742 158.262 135.742 c 163.48 135.742 167.711 139.973 - 167.711 145.191 c 167.711 150.41 163.48 154.641 158.262 154.641 c h -158.262 154.641 m S Q +201.391 312.855 m 196.172 312.855 191.941 317.086 191.941 322.305 c 191.941 + 327.523 196.172 331.754 201.391 331.754 c 206.609 331.754 210.84 327.523 + 210.84 322.305 c 210.84 317.086 206.609 312.855 201.391 312.855 c h +201.391 312.855 m S Q 1 g -158.262 154.641 m 153.043 154.641 148.812 150.41 148.812 145.191 c 148.812 - 139.973 153.043 135.742 158.262 135.742 c 163.48 135.742 167.711 139.973 - 167.711 145.191 c 167.711 150.41 163.48 154.641 158.262 154.641 c h -158.262 154.641 m f +201.391 312.855 m 196.172 312.855 191.941 317.086 191.941 322.305 c 191.941 + 327.523 196.172 331.754 201.391 331.754 c 206.609 331.754 210.84 327.523 + 210.84 322.305 c 210.84 317.086 206.609 312.855 201.391 312.855 c h +201.391 312.855 m f 0 g q 1 0 0 1 0 0 cm -158.262 214.641 m 153.043 214.641 148.812 210.41 148.812 205.191 c 148.812 - 199.973 153.043 195.742 158.262 195.742 c 163.48 195.742 167.711 199.973 - 167.711 205.191 c 167.711 210.41 163.48 214.641 158.262 214.641 c h -158.262 214.641 m S Q +201.391 252.855 m 196.172 252.855 191.941 257.086 191.941 262.305 c 191.941 + 267.523 196.172 271.754 201.391 271.754 c 206.609 271.754 210.84 267.523 + 210.84 262.305 c 210.84 257.086 206.609 252.855 201.391 252.855 c h +201.391 252.855 m S Q 1 g -158.262 214.641 m 153.043 214.641 148.812 210.41 148.812 205.191 c 148.812 - 199.973 153.043 195.742 158.262 195.742 c 163.48 195.742 167.711 199.973 - 167.711 205.191 c 167.711 210.41 163.48 214.641 158.262 214.641 c h -158.262 214.641 m f +201.391 252.855 m 196.172 252.855 191.941 257.086 191.941 262.305 c 191.941 + 267.523 196.172 271.754 201.391 271.754 c 206.609 271.754 210.84 267.523 + 210.84 262.305 c 210.84 257.086 206.609 252.855 201.391 252.855 c h +201.391 252.855 m f 0 g q 1 0 0 1 0 0 cm -158.262 274.641 m 153.043 274.641 148.812 270.41 148.812 265.191 c 148.812 - 259.973 153.043 255.742 158.262 255.742 c 163.48 255.742 167.711 259.973 - 167.711 265.191 c 167.711 270.41 163.48 274.641 158.262 274.641 c h -158.262 274.641 m S Q +201.391 192.855 m 196.172 192.855 191.941 197.086 191.941 202.305 c 191.941 + 207.523 196.172 211.754 201.391 211.754 c 206.609 211.754 210.84 207.523 + 210.84 202.305 c 210.84 197.086 206.609 192.855 201.391 192.855 c h +201.391 192.855 m S Q 1 g -158.262 274.641 m 153.043 274.641 148.812 270.41 148.812 265.191 c 148.812 - 259.973 153.043 255.742 158.262 255.742 c 163.48 255.742 167.711 259.973 - 167.711 265.191 c 167.711 270.41 163.48 274.641 158.262 274.641 c h -158.262 274.641 m f +201.391 192.855 m 196.172 192.855 191.941 197.086 191.941 202.305 c 191.941 + 207.523 196.172 211.754 201.391 211.754 c 206.609 211.754 210.84 207.523 + 210.84 202.305 c 210.84 197.086 206.609 192.855 201.391 192.855 c h +201.391 192.855 m f 0 g q 1 0 0 1 0 0 cm -158.262 334.641 m 153.043 334.641 148.812 330.41 148.812 325.191 c 148.812 - 319.973 153.043 315.742 158.262 315.742 c 163.48 315.742 167.711 319.973 - 167.711 325.191 c 167.711 330.41 163.48 334.641 158.262 334.641 c h -158.262 334.641 m S Q +201.391 132.855 m 196.172 132.855 191.941 137.086 191.941 142.305 c 191.941 + 147.523 196.172 151.754 201.391 151.754 c 206.609 151.754 210.84 147.523 + 210.84 142.305 c 210.84 137.086 206.609 132.855 201.391 132.855 c h +201.391 132.855 m S Q 1 g -158.262 334.641 m 153.043 334.641 148.812 330.41 148.812 325.191 c 148.812 - 319.973 153.043 315.742 158.262 315.742 c 163.48 315.742 167.711 319.973 - 167.711 325.191 c 167.711 330.41 163.48 334.641 158.262 334.641 c h -158.262 334.641 m f +201.391 132.855 m 196.172 132.855 191.941 137.086 191.941 142.305 c 191.941 + 147.523 196.172 151.754 201.391 151.754 c 206.609 151.754 210.84 147.523 + 210.84 142.305 c 210.84 137.086 206.609 132.855 201.391 132.855 c h +201.391 132.855 m f 0 g -174.266 25.738 m 173.273 25.738 l 173.273 20.941 l 173.273 20.914 173.27 - 20.883 173.266 20.852 c 173.266 20.664 173.203 20.477 173.074 20.328 c -165.094 11.211 l 165.09 11.207 165.09 11.207 165.086 11.207 c 165.039 11.152 - 164.984 11.109 164.926 11.07 c 164.906 11.059 164.891 11.051 164.871 11.039 - c 164.82 11.012 164.766 10.988 164.711 10.973 c 164.695 10.965 164.684 -10.961 164.668 10.957 c 164.609 10.941 164.547 10.934 164.48 10.934 c 144.871 - 10.934 l 143.977 10.934 143.25 11.664 143.25 12.559 c 143.25 25.738 l 142.254 - 25.738 l 140.973 25.738 139.934 26.777 139.934 28.059 c 139.934 40.121 -l 139.934 41.402 140.973 42.441 142.254 42.441 c 143.25 42.441 l 143.25 -50.699 l 143.25 51.594 143.977 52.32 144.871 52.32 c 171.652 52.32 l 172.547 - 52.32 173.273 51.594 173.273 50.699 c 173.273 42.441 l 174.27 42.441 l -175.547 42.441 176.586 41.402 176.586 40.121 c 176.586 28.059 l 176.586 -26.777 175.547 25.738 174.27 25.738 c h -144.871 12.559 m 163.672 12.559 l 163.672 20.863 l 163.672 21.309 164.035 - 21.672 164.48 21.672 c 171.648 21.672 l 171.648 25.738 l 144.871 25.738 - l h -171.648 50.258 m 144.871 50.258 l 144.871 42.441 l 171.648 42.441 l h -171.648 50.258 m f -174.266 25.738 m 142.254 25.738 l 140.973 25.738 139.934 26.777 139.934 - 28.059 c 139.934 40.121 l 139.934 41.402 140.973 42.441 142.254 42.441 -c 174.266 42.441 l 175.547 42.441 176.586 41.402 176.586 40.121 c 176.586 - 28.059 l 176.586 26.777 175.547 25.738 174.266 25.738 c h -174.266 25.738 m f +q 1 0 0 1 0 0 cm +201.391 72.855 m 196.172 72.855 191.941 77.086 191.941 82.305 c 191.941 + 87.523 196.172 91.754 201.391 91.754 c 206.609 91.754 210.84 87.523 210.84 + 82.305 c 210.84 77.086 206.609 72.855 201.391 72.855 c h +201.391 72.855 m S Q 1 g +201.391 72.855 m 196.172 72.855 191.941 77.086 191.941 82.305 c 191.941 + 87.523 196.172 91.754 201.391 91.754 c 206.609 91.754 210.84 87.523 210.84 + 82.305 c 210.84 77.086 206.609 72.855 201.391 72.855 c h +201.391 72.855 m f +0.141176 0.690196 0.392157 rg BT -10.942725 0 0 -10.942725 149.370003 36.977014 Tm -/f-0-0 1 Tf -(csv)Tj +12 0 0 -12 383.823761 390.440964 Tm +/f-1-0 1 Tf +(Minimap2)Tj ET -144.871 12.539 m 163.672 12.539 l 163.672 20.844 l 163.672 21.293 164.035 - 21.656 164.48 21.656 c 171.648 21.656 l 171.648 25.723 l 144.871 25.723 - l h -171.652 50.242 m 144.871 50.242 l 144.871 42.422 l 171.648 42.422 l 171.648 - 50.242 l h -171.652 50.242 m f +0.494118 0.698039 0.866667 rg +7.5 w +0 J +q 1 0 0 1 0 0 cm +472.566 523.059 m 472.566 471.082 l S Q +1 0.6 0.0784314 rg +3.75 w +q 1 0 0 1 0 0 cm +315.832 532.508 m 390.664 532.508 l S Q +q 1 0 0 1 0 0 cm +435.152 532.508 m 509.984 532.508 l S Q +0.494118 0.698039 0.866667 rg +7.5 w +q 1 0 0 1 0 0 cm +364.809 532.508 m 462.32 532.508 l S Q +1 0.6 0.0784314 rg +3.75 w +q 1 0 0 1 0 0 cm +473.551 469.738 m 508.547 469.738 l S Q 0 g -BT -10.281975 0 0 -10.281975 126.472 62.970011 Tm -/f-0-0 1 Tf -(Samplesheet)Tj -ET -0.831373 0 0 rg -226.59 22.332 m 225.781 22.332 l 225.781 18.418 l 225.781 18.395 225.777 - 18.371 225.77 18.344 c 225.77 18.191 225.719 18.039 225.613 17.918 c 219.105 - 10.48 l 219.102 10.477 219.102 10.477 219.102 10.477 c 219.062 10.434 219.016 - 10.398 218.969 10.367 c 218.953 10.355 218.941 10.348 218.926 10.34 c 218.883 - 10.316 218.84 10.297 218.793 10.285 c 218.781 10.281 218.77 10.277 218.758 - 10.273 c 218.711 10.258 218.66 10.254 218.605 10.254 c 202.609 10.254 l - 201.879 10.254 201.285 10.848 201.285 11.578 c 201.285 22.332 l 200.473 - 22.332 l 199.43 22.332 198.582 23.176 198.582 24.223 c 198.582 34.062 l - 198.582 35.109 199.43 35.957 200.473 35.957 c 201.285 35.957 l 201.285 -42.691 l 201.285 43.422 201.879 44.016 202.609 44.016 c 224.453 44.016 l - 225.184 44.016 225.777 43.422 225.777 42.691 c 225.777 35.957 l 226.59 -35.957 l 227.633 35.957 228.48 35.109 228.48 34.062 c 228.48 24.223 l 228.48 - 23.18 227.633 22.332 226.59 22.332 c h -202.609 11.578 m 217.945 11.578 l 217.945 18.352 l 217.945 18.719 218.242 - 19.016 218.609 19.016 c 224.457 19.016 l 224.457 22.332 l 202.609 22.332 +304.859 521.047 m 303.867 521.047 l 303.867 516.25 l 303.867 516.223 303.859 + 516.191 303.859 516.16 c 303.855 515.969 303.797 515.785 303.664 515.637 + c 295.684 506.52 l 295.684 506.516 295.68 506.516 295.68 506.516 c 295.633 + 506.461 295.578 506.418 295.52 506.379 c 295.5 506.367 295.484 506.355 +295.465 506.348 c 295.414 506.32 295.359 506.297 295.305 506.281 c 295.289 + 506.273 295.277 506.27 295.262 506.266 c 295.199 506.25 295.137 506.242 + 295.074 506.242 c 275.465 506.242 l 274.57 506.242 273.84 506.969 273.84 + 507.863 c 273.84 521.047 l 272.848 521.047 l 271.566 521.047 270.527 522.082 + 270.527 523.367 c 270.527 535.43 l 270.527 536.711 271.566 537.75 272.848 + 537.75 c 273.84 537.75 l 273.84 546.004 l 273.84 546.902 274.57 547.629 + 275.465 547.629 c 302.242 547.629 l 303.137 547.629 303.867 546.902 303.867 + 546.004 c 303.867 537.75 l 304.859 537.75 l 306.141 537.75 307.18 536.711 + 307.18 535.43 c 307.18 523.367 l 307.18 522.086 306.141 521.047 304.859 + 521.047 c h +275.465 507.867 m 294.262 507.867 l 294.262 516.168 l 294.262 516.617 294.625 + 516.98 295.074 516.98 c 302.242 516.98 l 302.242 521.047 l 275.465 521.047 l h -224.457 42.336 m 202.609 42.336 l 202.609 35.957 l 224.457 35.957 l h -224.457 42.336 m f -0 g -226.59 22.332 m 200.477 22.332 l 199.43 22.332 198.582 23.176 198.582 24.223 - c 198.582 34.062 l 198.582 35.109 199.43 35.957 200.477 35.957 c 226.59 - 35.957 l 227.637 35.957 228.484 35.109 228.484 34.062 c 228.484 24.223 -l 228.484 23.176 227.637 22.332 226.59 22.332 c h -226.59 22.332 m f +302.242 545.566 m 275.465 545.566 l 275.465 537.75 l 302.242 537.75 l h +302.242 545.566 m f +304.859 521.047 m 272.848 521.047 l 271.566 521.047 270.527 522.082 270.527 + 523.367 c 270.527 535.43 l 270.527 536.711 271.566 537.75 272.848 537.75 + c 304.859 537.75 l 306.141 537.75 307.18 536.711 307.18 535.43 c 307.18 + 523.367 l 307.18 522.086 306.141 521.047 304.859 521.047 c h +304.859 521.047 m f 1 g BT -8.926725 0 0 -8.926725 203.614998 32.409013 Tm +10.942725 0 0 -10.942725 280.405003 532.169686 Tm /f-0-0 1 Tf -(bam)Tj +(gtf)Tj ET -202.609 11.562 m 217.945 11.562 l 217.945 18.34 l 217.945 18.703 218.242 - 19 218.609 19 c 224.457 19 l 224.457 22.316 l 202.609 22.316 l h -224.457 42.32 m 202.609 42.32 l 202.609 35.941 l 224.457 35.941 l h -224.457 42.32 m f -0.831373 0 0 rg -261.066 22.332 m 260.258 22.332 l 260.258 18.418 l 260.258 18.395 260.254 - 18.371 260.25 18.344 c 260.246 18.191 260.195 18.039 260.09 17.918 c 253.582 - 10.48 l 253.578 10.477 253.578 10.477 253.578 10.477 c 253.539 10.434 253.492 - 10.398 253.445 10.367 c 253.434 10.355 253.414 10.348 253.402 10.34 c 253.359 - 10.316 253.316 10.297 253.273 10.285 c 253.258 10.281 253.25 10.277 253.238 - 10.273 c 253.188 10.258 253.137 10.254 253.086 10.254 c 237.086 10.254 -l 236.355 10.254 235.762 10.848 235.762 11.578 c 235.762 22.332 l 234.953 - 22.332 l 233.906 22.332 233.059 23.176 233.059 24.223 c 233.059 34.062 -l 233.059 35.109 233.906 35.957 234.953 35.957 c 235.762 35.957 l 235.762 - 42.691 l 235.762 43.422 236.355 44.016 237.086 44.016 c 258.934 44.016 -l 259.664 44.016 260.258 43.422 260.258 42.691 c 260.258 35.957 l 261.066 - 35.957 l 262.113 35.957 262.961 35.109 262.961 34.062 c 262.961 24.223 -l 262.961 23.18 262.113 22.332 261.066 22.332 c h -237.086 11.578 m 252.422 11.578 l 252.422 18.352 l 252.422 18.719 252.719 - 19.016 253.086 19.016 c 258.934 19.016 l 258.934 22.332 l 237.086 22.332 +275.465 507.848 m 294.262 507.848 l 294.262 516.152 l 294.262 516.602 294.625 + 516.965 295.074 516.965 c 302.242 516.965 l 302.242 521.027 l 275.465 521.027 l h -258.934 42.336 m 237.086 42.336 l 237.086 35.957 l 258.934 35.957 l h -258.934 42.336 m f +302.242 545.551 m 275.465 545.551 l 275.465 537.73 l 302.242 537.73 l h +302.242 545.551 m f 0 g -261.066 22.332 m 234.953 22.332 l 233.906 22.332 233.059 23.176 233.059 - 24.223 c 233.059 34.062 l 233.059 35.109 233.906 35.957 234.953 35.957 -c 261.066 35.957 l 262.113 35.957 262.961 35.109 262.961 34.062 c 262.961 - 24.223 l 262.961 23.176 262.113 22.332 261.066 22.332 c h -261.066 22.332 m f -1 g BT -8.926725 0 0 -8.926725 240.967003 31.382014 Tm +10.281975 0 0 -10.281975 264.377003 558.329667 Tm /f-0-0 1 Tf -(pbi)Tj +(Reference)Tj +-0.220234 -1.338889 Td +(Annotation)Tj ET -237.086 11.562 m 252.422 11.562 l 252.422 18.34 l 252.422 18.703 252.719 - 19 253.086 19 c 258.934 19 l 258.934 22.316 l 237.086 22.316 l h -258.934 42.32 m 237.086 42.32 l 237.086 35.941 l 258.934 35.941 l h -258.934 42.32 m f -0 0.501961 0 rg -226.59 61.324 m 225.777 61.324 l 225.777 57.41 l 225.777 57.387 225.773 - 57.363 225.773 57.336 c 225.77 57.184 225.723 57.027 225.613 56.91 c 219.105 - 49.473 l 219.105 49.469 219.102 49.469 219.102 49.469 c 219.062 49.426 -219.016 49.391 218.969 49.359 c 218.953 49.348 218.941 49.34 218.926 49.332 - c 218.883 49.309 218.84 49.289 218.797 49.277 c 218.785 49.273 218.773 -49.27 218.758 49.262 c 218.711 49.25 218.66 49.246 218.609 49.246 c 202.609 - 49.246 l 201.879 49.246 201.285 49.84 201.285 50.57 c 201.285 61.324 l -200.477 61.324 l 199.43 61.324 198.582 62.168 198.582 63.215 c 198.582 73.055 - l 198.582 74.102 199.43 74.949 200.477 74.949 c 201.285 74.949 l 201.285 - 81.684 l 201.285 82.414 201.879 83.008 202.609 83.008 c 224.457 83.008 -l 225.188 83.008 225.781 82.414 225.781 81.684 c 225.781 74.949 l 226.59 - 74.949 l 227.637 74.949 228.484 74.102 228.484 73.055 c 228.484 63.215 -l 228.484 62.168 227.637 61.324 226.59 61.324 c h -202.609 50.57 m 217.945 50.57 l 217.945 57.344 l 217.945 57.711 218.242 - 58.008 218.605 58.008 c 224.453 58.008 l 224.453 61.324 l 202.609 61.324 - l h -224.453 81.324 m 202.609 81.324 l 202.609 74.949 l 224.453 74.949 l h -224.453 81.324 m f -0 g -226.59 61.324 m 225.777 61.324 l 201.285 61.32 l 200.473 61.32 l 199.43 - 61.32 198.582 62.168 198.582 63.215 c 198.582 73.055 l 198.582 74.102 199.43 - 74.949 200.473 74.949 c 226.59 74.949 l 227.633 74.949 228.48 74.102 228.48 - 73.055 c 228.48 63.215 l 228.48 62.168 227.633 61.324 226.59 61.324 c h -226.59 61.324 m f +9.4488 w +1 J +q 1 0 0 -1 0 0 cm +482.016 -532.508 m 482.016 -527.289 477.785 -523.059 472.566 -523.059 c + 467.348 -523.059 463.117 -527.289 463.117 -532.508 c 463.117 -537.723 467.348 + -541.953 472.566 -541.953 c 477.785 -541.953 482.016 -537.723 482.016 -532.508 + c h +482.016 -532.508 m S Q 1 g +482.016 532.508 m 482.016 527.289 477.785 523.059 472.566 523.059 c 467.348 + 523.059 463.117 527.289 463.117 532.508 c 463.117 537.723 467.348 541.953 + 472.566 541.953 c 477.785 541.953 482.016 537.723 482.016 532.508 c h +482.016 532.508 m f +0 g BT -8.926725 0 0 -8.926725 203.613991 71.401011 Tm +12 0 0 -12 447.90596 559.421664 Tm /f-0-0 1 Tf -(bam)Tj +(Indexing)Tj ET -202.609 50.555 m 217.945 50.555 l 217.945 57.328 l 217.945 57.695 218.242 - 57.992 218.605 57.992 c 224.453 57.992 l 224.453 61.309 l 202.609 61.309 - l h -224.457 81.312 m 202.609 81.312 l 202.609 74.934 l 224.453 74.934 l 224.453 - 81.312 l h -224.457 81.312 m f -0 0.501961 0 rg -261.066 61.324 m 260.258 61.324 l 260.258 57.41 l 260.258 57.387 260.254 - 57.363 260.25 57.336 c 260.246 57.184 260.195 57.027 260.09 56.91 c 253.582 - 49.473 l 253.578 49.469 253.578 49.469 253.578 49.469 c 253.539 49.426 -253.492 49.387 253.445 49.359 c 253.434 49.348 253.414 49.34 253.402 49.332 - c 253.359 49.309 253.316 49.289 253.273 49.277 c 253.258 49.273 253.25 -49.27 253.238 49.262 c 253.188 49.25 253.137 49.246 253.086 49.246 c 237.086 - 49.246 l 236.355 49.246 235.762 49.84 235.762 50.57 c 235.762 61.324 l -234.953 61.324 l 233.906 61.324 233.059 62.168 233.059 63.215 c 233.059 -73.055 l 233.059 74.102 233.906 74.949 234.953 74.949 c 235.762 74.949 l - 235.762 81.684 l 235.762 82.414 236.355 83.008 237.086 83.008 c 258.934 - 83.008 l 259.664 83.008 260.258 82.414 260.258 81.684 c 260.258 74.949 -l 261.066 74.949 l 262.113 74.949 262.961 74.102 262.961 73.055 c 262.961 - 63.215 l 262.961 62.168 262.113 61.324 261.066 61.324 c h -237.086 50.57 m 252.422 50.57 l 252.422 57.344 l 252.422 57.711 252.719 - 58.008 253.086 58.008 c 258.934 58.008 l 258.934 61.324 l 237.086 61.324 - l h -258.934 81.324 m 237.086 81.324 l 237.086 74.949 l 258.934 74.949 l h -258.934 81.324 m f -0 g -261.066 61.324 m 260.258 61.324 l 235.762 61.32 l 234.953 61.32 l 233.906 - 61.32 233.059 62.168 233.059 63.215 c 233.059 73.055 l 233.059 74.102 233.906 - 74.949 234.953 74.949 c 261.066 74.949 l 262.113 74.949 262.961 74.102 -262.961 73.055 c 262.961 63.215 l 262.961 62.168 262.113 61.324 261.066 -61.324 c h -261.066 61.324 m f -1 g +0.141176 0.690196 0.392157 rg BT -8.926725 0 0 -8.926725 240.967003 70.374012 Tm -/f-0-0 1 Tf -(pbi)Tj +12 0 0 -12 432.717957 572.703654 Tm +/f-1-0 1 Tf +(uLTRA index)Tj ET -237.086 50.555 m 252.422 50.555 l 252.422 57.328 l 252.422 57.695 252.719 - 57.992 253.086 57.992 c 258.934 57.992 l 258.934 61.309 l 237.086 61.309 - l h -258.934 81.312 m 237.086 81.312 l 237.086 74.934 l 258.934 74.934 l h -258.934 81.312 m f -0 g -0.941617 w -0 J -q 1 0 0 1 0 0 cm -195.199 10.711 m 195.199 10.711 191.934 11.527 191.109 15.094 c 190.277 - 18.691 193.918 29.438 191.125 30.219 c 186.086 31.629 l S Q -q 1 0 0 1 0 0 cm -195.199 52.543 m 195.199 52.543 191.934 51.727 191.109 48.16 c 190.277 -44.562 193.918 33.82 191.125 33.039 c 186.086 31.629 l S Q -9.4485 w -1 J -q 1 0 0 1 0 0 cm -158.262 94.641 m 153.043 94.641 148.812 90.41 148.812 85.191 c 148.812 -79.973 153.043 75.742 158.262 75.742 c 163.48 75.742 167.711 79.973 167.711 - 85.191 c 167.711 90.41 163.48 94.641 158.262 94.641 c h -158.262 94.641 m S Q -0.784314 g -158.262 94.641 m 153.043 94.641 148.812 90.41 148.812 85.191 c 148.812 -79.973 153.043 75.742 158.262 75.742 c 163.48 75.742 167.711 79.973 167.711 - 85.191 c 167.711 90.41 163.48 94.641 158.262 94.641 c h -158.262 94.641 m f 0 g -207.277 481.344 m 206.281 481.344 l 206.281 476.547 l 206.281 476.52 206.281 - 476.488 206.277 476.457 c 206.277 476.27 206.215 476.082 206.082 475.934 - c 198.105 466.816 l 198.102 466.812 198.102 466.812 198.098 466.812 c 198.051 - 466.758 197.992 466.715 197.938 466.676 c 197.914 466.664 197.902 466.656 - 197.883 466.645 c 197.828 466.617 197.777 466.594 197.723 466.578 c 197.703 - 466.57 197.695 466.566 197.68 466.562 c 197.617 466.547 197.559 466.539 - 197.488 466.539 c 177.883 466.539 l 176.988 466.539 176.262 467.27 176.262 - 468.164 c 176.262 481.344 l 175.266 481.344 l 173.984 481.344 172.945 482.383 - 172.945 483.664 c 172.945 495.727 l 172.945 497.008 173.984 498.047 175.266 - 498.047 c 176.258 498.047 l 176.258 506.305 l 176.258 507.199 176.988 507.926 - 177.879 507.926 c 204.66 507.926 l 205.559 507.926 206.281 507.199 206.281 - 506.305 c 206.281 498.047 l 207.281 498.047 l 208.559 498.047 209.594 497.008 - 209.594 495.727 c 209.594 483.664 l 209.594 482.383 208.559 481.344 207.281 - 481.344 c h -177.879 468.164 m 196.684 468.164 l 196.684 476.469 l 196.684 476.914 197.043 - 477.277 197.488 477.277 c 204.656 477.277 l 204.656 481.344 l 177.879 481.344 - l h -204.656 505.863 m 177.879 505.863 l 177.879 498.047 l 204.656 498.047 l - h -204.656 505.863 m f -207.277 481.344 m 175.262 481.344 l 173.984 481.344 172.945 482.383 172.945 - 483.664 c 172.945 495.727 l 172.945 497.008 173.984 498.047 175.262 498.047 - c 207.277 498.047 l 208.559 498.047 209.594 497.008 209.594 495.727 c 209.594 - 483.664 l 209.594 482.383 208.559 481.344 207.277 481.344 c h -207.277 481.344 m f +q 1 0 0 -1 0 0 cm +361.809 -532.508 m 361.809 -527.289 357.578 -523.059 352.359 -523.059 c + 347.141 -523.059 342.91 -527.289 342.91 -532.508 c 342.91 -537.723 347.141 + -541.953 352.359 -541.953 c 357.578 -541.953 361.809 -537.723 361.809 -532.508 + c h +361.809 -532.508 m S Q 1 g +361.809 532.508 m 361.809 527.289 357.578 523.059 352.359 523.059 c 347.141 + 523.059 342.91 527.289 342.91 532.508 c 342.91 537.723 347.141 541.953 +352.359 541.953 c 357.578 541.953 361.809 537.723 361.809 532.508 c h +361.809 532.508 m f +0 g BT -10.942725 0 0 -10.942725 182.379675 492.58215 Tm +12 0 0 -12 340.260949 556.679495 Tm /f-0-0 1 Tf -(csv)Tj +(Sort)Tj ET -177.879 468.145 m 196.684 468.145 l 196.684 476.449 l 196.684 476.898 197.043 - 477.262 197.488 477.262 c 204.656 477.262 l 204.656 481.328 l 177.879 481.328 - l h -204.66 505.848 m 177.879 505.848 l 177.879 498.027 l 204.656 498.027 l -204.656 505.848 l h -204.66 505.848 m f -0 g +0.141176 0.690196 0.392157 rg BT -10.281975 0 0 -10.281975 159.481672 518.575162 Tm -/f-0-0 1 Tf -(Samplesheet)Tj +12 0 0 -12 323.760949 569.961486 Tm +/f-1-0 1 Tf +(gnu/sort)Tj ET -0.831373 0 0 rg -149.078 477.938 m 148.27 477.938 l 148.27 474.023 l 148.27 474 148.266 -473.977 148.258 473.949 c 148.258 473.797 148.207 473.645 148.102 473.523 - c 141.594 466.086 l 141.59 466.082 141.59 466.082 141.59 466.082 c 141.551 - 466.039 141.504 466.004 141.457 465.973 c 141.441 465.961 141.43 465.953 - 141.414 465.945 c 141.371 465.922 141.328 465.902 141.281 465.891 c 141.27 - 465.887 141.258 465.883 141.246 465.879 c 141.199 465.863 141.148 465.859 - 141.094 465.859 c 125.098 465.859 l 124.367 465.859 123.773 466.453 123.773 - 467.184 c 123.773 477.938 l 122.961 477.938 l 121.918 477.938 121.07 478.781 - 121.07 479.828 c 121.07 489.668 l 121.07 490.715 121.918 491.562 122.961 - 491.562 c 123.773 491.562 l 123.773 498.297 l 123.773 499.027 124.367 499.621 - 125.098 499.621 c 146.941 499.621 l 147.672 499.621 148.266 499.027 148.266 - 498.297 c 148.266 491.562 l 149.078 491.562 l 150.121 491.562 150.969 490.715 - 150.969 489.668 c 150.969 479.828 l 150.969 478.785 150.121 477.938 149.078 - 477.938 c h -125.098 467.184 m 140.434 467.184 l 140.434 473.957 l 140.434 474.324 140.73 - 474.621 141.098 474.621 c 146.945 474.621 l 146.945 477.938 l 125.098 477.938 +0 g +551.945 521.047 m 550.953 521.047 l 550.953 516.25 l 550.953 516.223 550.949 + 516.191 550.945 516.16 c 550.941 515.969 550.883 515.781 550.75 515.633 + c 542.773 506.52 l 542.77 506.516 542.77 506.516 542.766 506.516 c 542.715 + 506.461 542.66 506.418 542.602 506.379 c 542.586 506.367 542.57 506.359 + 542.551 506.348 c 542.5 506.316 542.445 506.297 542.391 506.277 c 542.371 + 506.273 542.359 506.266 542.348 506.266 c 542.285 506.254 542.223 506.242 + 542.16 506.242 c 522.547 506.242 l 521.652 506.242 520.926 506.969 520.926 + 507.863 c 520.926 521.047 l 519.934 521.047 l 518.652 521.047 517.613 522.082 + 517.613 523.367 c 517.613 535.43 l 517.613 536.711 518.652 537.75 519.934 + 537.75 c 520.926 537.75 l 520.926 546.004 l 520.926 546.902 521.652 547.629 + 522.547 547.629 c 549.328 547.629 l 550.223 547.629 550.953 546.902 550.953 + 546.004 c 550.953 537.75 l 551.945 537.75 l 553.227 537.75 554.266 536.711 + 554.266 535.43 c 554.266 523.367 l 554.266 522.086 553.227 521.047 551.945 + 521.047 c h +522.551 507.863 m 541.348 507.863 l 541.348 516.168 l 541.348 516.617 541.711 + 516.98 542.16 516.98 c 549.328 516.98 l 549.328 521.047 l 522.551 521.047 l h -146.945 497.941 m 125.098 497.941 l 125.098 491.562 l 146.945 491.562 l +549.328 545.566 m 522.551 545.566 l 522.551 537.746 l 549.328 537.746 l h -146.945 497.941 m f -0 g -149.078 477.938 m 122.965 477.938 l 121.918 477.938 121.07 478.781 121.07 - 479.828 c 121.07 489.668 l 121.07 490.715 121.918 491.562 122.965 491.562 - c 149.078 491.562 l 150.125 491.562 150.973 490.715 150.973 489.668 c 150.973 - 479.828 l 150.973 478.781 150.125 477.938 149.078 477.938 c h -149.078 477.938 m f +549.328 545.566 m f +551.945 521.047 m 550.953 521.047 l 520.926 521.043 l 519.934 521.043 l + 518.652 521.043 517.613 522.082 517.613 523.363 c 517.613 535.43 l 517.613 + 536.707 518.652 537.746 519.934 537.746 c 551.945 537.746 l 553.227 537.746 + 554.266 536.707 554.266 535.43 c 554.266 523.363 l 554.266 522.082 553.227 + 521.047 551.945 521.047 c h +551.945 521.047 m f 1 g BT -8.926725 0 0 -8.926725 126.102865 488.014172 Tm +10.942725 0 0 -10.942725 522.41975 533.427764 Tm /f-0-0 1 Tf -(fa.gz)Tj +(fasta)Tj ET -125.098 467.168 m 140.434 467.168 l 140.434 473.945 l 140.434 474.309 140.73 - 474.605 141.098 474.605 c 146.945 474.605 l 146.945 477.922 l 125.098 477.922 - l h -146.945 497.926 m 125.098 497.926 l 125.098 491.547 l 146.945 491.547 l - h -146.945 497.926 m f -0 0.501961 0 rg -149.078 516.93 m 148.266 516.93 l 148.266 513.016 l 148.266 512.992 148.262 - 512.969 148.262 512.941 c 148.258 512.789 148.211 512.633 148.102 512.516 - c 141.594 505.078 l 141.594 505.074 141.59 505.074 141.59 505.074 c 141.551 - 505.031 141.504 504.996 141.457 504.965 c 141.441 504.953 141.43 504.945 - 141.414 504.938 c 141.371 504.914 141.328 504.895 141.285 504.883 c 141.273 - 504.879 141.262 504.875 141.246 504.867 c 141.199 504.855 141.148 504.852 - 141.098 504.852 c 125.098 504.852 l 124.367 504.852 123.773 505.445 123.773 - 506.176 c 123.773 516.93 l 122.965 516.93 l 121.918 516.93 121.07 517.773 - 121.07 518.82 c 121.07 528.66 l 121.07 529.707 121.918 530.555 122.965 -530.555 c 123.773 530.555 l 123.773 537.289 l 123.773 538.02 124.367 538.613 - 125.098 538.613 c 146.945 538.613 l 147.676 538.613 148.27 538.02 148.27 - 537.289 c 148.27 530.555 l 149.078 530.555 l 150.125 530.555 150.973 529.707 - 150.973 528.66 c 150.973 518.82 l 150.973 517.773 150.125 516.93 149.078 - 516.93 c h -125.098 506.176 m 140.434 506.176 l 140.434 512.949 l 140.434 513.316 140.73 - 513.613 141.094 513.613 c 146.941 513.613 l 146.941 516.93 l 125.098 516.93 +522.551 507.848 m 541.348 507.848 l 541.348 516.152 l 541.348 516.598 541.711 + 516.961 542.16 516.961 c 549.328 516.961 l 549.328 521.027 l 522.551 521.027 l h -146.941 536.93 m 125.098 536.93 l 125.098 530.555 l 146.941 530.555 l h -146.941 536.93 m f +549.328 545.547 m 522.551 545.547 l 522.551 537.73 l 549.328 537.73 l h +549.328 545.547 m f 0 g -149.078 516.93 m 148.266 516.93 l 123.773 516.926 l 122.961 516.926 l 121.918 - 516.926 121.07 517.773 121.07 518.82 c 121.07 528.66 l 121.07 529.707 121.918 - 530.555 122.961 530.555 c 149.078 530.555 l 150.121 530.555 150.969 529.707 - 150.969 528.66 c 150.969 518.82 l 150.969 517.773 150.121 516.93 149.078 - 516.93 c h -149.078 516.93 m f -1 g BT -8.926725 0 0 -8.926725 126.101858 527.006161 Tm +10.281975 0 0 -10.281975 515.292736 557.908759 Tm /f-0-0 1 Tf -(fa.gz)Tj +(Genome)Tj ET -125.098 506.16 m 140.434 506.16 l 140.434 512.934 l 140.434 513.301 140.73 - 513.598 141.094 513.598 c 146.941 513.598 l 146.941 516.914 l 125.098 516.914 - l h -146.945 536.918 m 125.098 536.918 l 125.098 530.539 l 146.941 530.539 l - 146.941 536.918 l h -146.945 536.918 m f -0 g -0.941617 w +1 0.6 0.0784314 rg +3.75 w +2 J +1 j +q 1 0 0 1 0 0 cm +534.109 493.422 m 534.109 480.344 523.504 469.738 510.422 469.738 c S Q 0 J -q -1 0 0 1 0 0 cm --154.355 466.316 m -154.355 466.316 -157.621 467.133 -158.445 470.699 c - -159.277 474.297 -155.637 485.043 -158.43 485.824 c -163.469 487.234 l S Q -q -1 0 0 1 0 0 cm --154.355 508.148 m -154.355 508.148 -157.621 507.332 -158.445 503.766 c - -159.277 500.168 -155.637 489.426 -158.43 488.645 c -163.469 487.234 l S Q -9.4488 w -1 J +0 j q 1 0 0 1 0 0 cm -158.262 394.641 m 153.043 394.641 148.812 390.41 148.812 385.191 c 148.812 - 379.973 153.043 375.742 158.262 375.742 c 163.48 375.742 167.711 379.973 - 167.711 385.191 c 167.711 390.41 163.48 394.641 158.262 394.641 c h -158.262 394.641 m S Q -1 g -158.262 394.641 m 153.043 394.641 148.812 390.41 148.812 385.191 c 148.812 - 379.973 153.043 375.742 158.262 375.742 c 163.48 375.742 167.711 379.973 - 167.711 385.191 c 167.711 390.41 163.48 394.641 158.262 394.641 c h -158.262 394.641 m f +534.109 492.723 m 534.109 497.172 l S Q 0.494118 0.698039 0.866667 rg 7.499993 w -0 J q 1 0 0 1 0 0 cm -369.445 495.125 m 429.445 495.125 l S Q +412.566 462.238 m 472.566 462.238 l S Q q 1 0 0 1 0 0 cm -309.445 495.125 m 369.445 495.125 l S Q +352.566 462.238 m 412.566 462.238 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -309.445 397.625 m 369.445 397.625 l S Q +352.566 364.738 m 412.566 364.738 l S Q q 1 0 0 1 0 0 cm -369.445 397.625 m 429.445 397.625 l S Q +412.566 364.738 m 472.566 364.738 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -549.445 450.125 m 526.945 450.125 l 515.766 450.125 504.852 457.219 496.945 - 465.125 c 489.445 472.625 l S Q +592.566 417.238 m 570.066 417.238 l 558.887 417.238 547.973 424.332 540.066 + 432.238 c 532.566 439.738 l S Q q 1 0 0 1 0 0 cm -429.445 495.125 m 451.945 495.125 l 463.125 495.125 474.039 488.031 481.945 - 480.125 c 489.445 472.625 l S Q +472.566 462.238 m 495.066 462.238 l 506.246 462.238 517.16 455.145 525.066 + 447.238 c 532.566 439.738 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -429.445 397.625 m 451.945 397.625 l 463.125 397.625 474.039 404.719 481.945 - 412.625 c 489.445 420.125 l S Q +472.566 364.738 m 495.066 364.738 l 506.246 364.738 517.16 371.832 525.066 + 379.738 c 532.566 387.238 l S Q q 1 0 0 1 0 0 cm -549.445 442.625 m 526.945 442.625 l 515.766 442.625 504.852 435.531 496.945 - 427.625 c 489.445 420.125 l S Q +592.566 409.738 m 570.066 409.738 l 558.887 409.738 547.973 402.645 540.066 + 394.738 c 532.566 387.238 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -309.445 495.125 m 286.945 495.125 l 275.766 495.125 264.852 488.031 256.945 - 480.125 c 249.445 472.625 l S Q +352.566 462.238 m 330.066 462.238 l 318.887 462.238 307.973 455.145 300.066 + 447.238 c 292.566 439.738 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -309.445 397.625 m 286.945 397.625 l 275.766 397.625 264.852 404.719 256.945 - 412.625 c 249.445 420.125 l S Q +352.566 364.738 m 330.066 364.738 l 318.887 364.738 307.973 371.832 300.066 + 379.738 c 292.566 387.238 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -189.445 450.125 m 211.945 450.125 l 223.125 450.125 234.039 457.219 241.945 - 465.125 c 249.445 472.625 l S Q +232.566 417.238 m 255.066 417.238 l 266.246 417.238 277.16 424.332 285.066 + 432.238 c 292.566 439.738 l S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -189.445 442.625 m 211.945 442.625 l 223.125 442.625 234.039 435.531 241.945 - 427.625 c 249.445 420.125 l S Q -0 g -9.4488 w -1 J -q 1 0 0 1 0 0 cm -189.09 455.824 m 183.871 455.824 179.641 451.594 179.641 446.375 c 179.641 - 441.156 183.871 436.926 189.09 436.926 c 194.309 436.926 198.539 441.156 - 198.539 446.375 c 198.539 451.594 194.309 455.824 189.09 455.824 c h -189.09 455.824 m S Q -0.784314 g -189.09 455.824 m 183.871 455.824 179.641 451.594 179.641 446.375 c 179.641 - 441.156 183.871 436.926 189.09 436.926 c 194.309 436.926 198.539 441.156 - 198.539 446.375 c 198.539 451.594 194.309 455.824 189.09 455.824 c h -189.09 455.824 m f +232.566 409.738 m 255.066 409.738 l 266.246 409.738 277.16 402.645 285.066 + 394.738 c 292.566 387.238 l S Q 0 g BT -12 0 0 -12 275.116997 423.508987 Tm +12 0 0 -12 318.239136 429.224899 Tm /f-0-0 1 Tf (Unzip reads)Tj ET 0.141176 0.690196 0.392157 rg BT -12 0 0 -12 287.556999 436.791 Tm +12 0 0 -12 330.679138 442.506912 Tm /f-1-0 1 Tf (gunzip)Tj ET 0 g +9.4488 w +1 J +q 1 0 0 -1 0 0 cm +342.91 -462.059 m 342.91 -467.277 347.141 -471.508 352.359 -471.508 c 357.578 + -471.508 361.809 -467.277 361.809 -462.059 c 361.809 -456.84 357.578 -452.609 + 352.359 -452.609 c 347.141 -452.609 342.91 -456.84 342.91 -462.059 c h +342.91 -462.059 m S Q +1 g +342.91 462.059 m 342.91 467.277 347.141 471.508 352.359 471.508 c 357.578 + 471.508 361.809 467.277 361.809 462.059 c 361.809 456.84 357.578 452.609 + 352.359 452.609 c 347.141 452.609 342.91 456.84 342.91 462.059 c h +342.91 462.059 m f +0 g +q 1 0 0 -1 0 0 cm +482.016 -462.238 m 482.016 -457.02 477.785 -452.789 472.566 -452.789 c +467.348 -452.789 463.117 -457.02 463.117 -462.238 c 463.117 -467.457 467.348 + -471.688 472.566 -471.688 c 477.785 -471.688 482.016 -467.457 482.016 -462.238 + c h +482.016 -462.238 m S Q +1 g +482.016 462.238 m 482.016 457.02 477.785 452.789 472.566 452.789 c 467.348 + 452.789 463.117 457.02 463.117 462.238 c 463.117 467.457 467.348 471.688 + 472.566 471.688 c 477.785 471.688 482.016 467.457 482.016 462.238 c h +482.016 462.238 m f +0 g +BT +12 0 0 -12 447.90509 429.224899 Tm +/f-0-0 1 Tf +(Mapping)Tj +-5 2.063637 Td +(Mapping)Tj +ET +1 0.6 0.0784314 rg +3.75 w +0 J q 1 0 0 1 0 0 cm -299.789 397.805 m 299.789 392.586 304.02 388.355 309.238 388.355 c 314.457 - 388.355 318.688 392.586 318.688 397.805 c 318.688 403.023 314.457 407.254 - 309.238 407.254 c 304.02 407.254 299.789 403.023 299.789 397.805 c h -299.789 397.805 m S Q +412.566 344.215 m 412.566 373.395 l S Q +0 g +428.574 310.129 m 427.578 310.129 l 427.578 305.336 l 427.578 305.305 427.578 + 305.273 427.57 305.246 c 427.57 305.055 427.508 304.867 427.379 304.719 + c 419.398 295.602 l 419.398 295.602 419.398 295.602 419.391 295.594 c 419.344 + 295.543 419.289 295.496 419.23 295.461 c 419.211 295.449 419.195 295.438 + 419.176 295.426 c 419.125 295.398 419.07 295.375 419.016 295.359 c 419 +295.355 418.988 295.348 418.973 295.348 c 418.914 295.336 418.852 295.324 + 418.785 295.324 c 399.176 295.324 l 398.281 295.324 397.551 296.051 397.551 + 296.945 c 397.551 310.125 l 396.559 310.125 l 395.277 310.125 394.238 311.164 + 394.238 312.445 c 394.238 324.508 l 394.238 325.789 395.277 326.828 396.559 + 326.828 c 397.551 326.828 l 397.551 335.086 l 397.551 335.98 398.281 336.711 + 399.176 336.711 c 425.957 336.711 l 426.852 336.711 427.578 335.98 427.578 + 335.086 c 427.578 326.828 l 428.57 326.828 l 429.852 326.828 430.891 325.789 + 430.891 324.508 c 430.891 312.445 l 430.891 311.164 429.852 310.125 428.57 + 310.125 c h +399.176 296.949 m 417.977 296.949 l 417.977 305.254 l 417.977 305.703 418.34 + 306.066 418.789 306.066 c 425.957 306.066 l 425.957 310.129 l 399.176 310.129 + l h +425.957 334.652 m 399.176 334.652 l 399.176 326.832 l 425.957 326.832 l + h +425.957 334.652 m f +428.574 310.129 m 396.559 310.129 l 395.277 310.129 394.242 311.168 394.242 + 312.449 c 394.242 324.512 l 394.242 325.793 395.277 326.832 396.559 326.832 + c 428.574 326.832 l 429.855 326.832 430.895 325.793 430.895 324.512 c 430.895 + 312.449 l 430.895 311.168 429.855 310.129 428.574 310.129 c h +428.574 310.129 m f 1 g -299.789 397.805 m 299.789 392.586 304.02 388.355 309.238 388.355 c 314.457 - 388.355 318.688 392.586 318.688 397.805 c 318.688 403.023 314.457 407.254 - 309.238 407.254 c 304.02 407.254 299.789 403.023 299.789 397.805 c h -299.789 397.805 m f +BT +10.942725 0 0 -10.942725 399.048157 322.512062 Tm +/f-0-0 1 Tf +(fasta)Tj +ET +399.176 296.93 m 417.977 296.93 l 417.977 305.234 l 417.977 305.684 418.34 + 306.047 418.789 306.047 c 425.957 306.047 l 425.957 310.113 l 399.176 310.113 + l h +425.957 334.633 m 399.176 334.633 l 399.176 326.812 l 425.957 326.812 l + h +425.957 334.633 m f +0 g +BT +10.281975 0 0 -10.281975 391.921143 292.130379 Tm +/f-0-0 1 Tf +(Genome)Tj +ET +9.4488 w +1 J +q 1 0 0 1 0 0 cm +403.117 364.738 m 403.117 369.957 407.348 374.188 412.566 374.188 c 417.785 + 374.188 422.016 369.957 422.016 364.738 c 422.016 359.52 417.785 355.289 + 412.566 355.289 c 407.348 355.289 403.117 359.52 403.117 364.738 c h +403.117 364.738 m S Q +1 g +403.117 364.738 m 403.117 369.957 407.348 374.188 412.566 374.188 c 417.785 + 374.188 422.016 369.957 422.016 364.738 c 422.016 359.52 417.785 355.289 + 412.566 355.289 c 407.348 355.289 403.117 359.52 403.117 364.738 c h +403.117 364.738 m f +0.141176 0.690196 0.392157 rg +BT +12 0 0 -12 432.919373 442.506912 Tm +/f-1-0 1 Tf +(uLTRA align)Tj +ET +7.499993 w +2 J +1 j +q -1 0 0 1 0 0 cm +-620 386.059 m -620 399.141 -609.398 409.742 -596.316 409.742 c S Q +0.494118 0.698039 0.866667 rg +q -1 0 0 1 0 0 cm +-627.5 386.059 m -627.5 403.281 -613.539 417.242 -596.316 417.242 c S Q 0.141176 0.690196 0.392157 rg -7.5 w 0 J +0 j +q -1 0 0 1 0 0 cm +-620 382.309 m -620 322.309 l S Q +0.494118 0.698039 0.866667 rg +q -1 0 0 1 0 0 cm +-627.5 382.309 m -627.5 322.309 l S Q +0.141176 0.690196 0.392157 rg +q -1 0 0 1 0 0 cm +-623.75 202.309 m -623.75 142.309 l S Q +0.494118 0.698039 0.866667 rg +q -1 0 0 1 0 0 cm +-631.25 202.309 m -631.25 142.309 l S Q +0.141176 0.690196 0.392157 rg +q -1 0 0 1 0 0 cm +-623.75 262.309 m -623.75 202.309 l S Q +0.494118 0.698039 0.866667 rg +q -1 0 0 1 0 0 cm +-631.25 262.309 m -631.25 202.309 l S Q +0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -580.047 146.652 m 580.047 295.191 l S Q +623.75 322.309 m 623.75 262.309 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -587.496 146.652 m 587.496 295.191 l S Q +631.25 320.996 m 631.25 260.996 l S Q +0 g +9.4488 w +1 J +q 1 0 0 1 0 0 cm +623.75 312.859 m 618.531 312.859 614.301 317.09 614.301 322.309 c 614.301 + 327.527 618.531 331.758 623.75 331.758 c 628.969 331.758 633.199 327.527 + 633.199 322.309 c 633.199 317.09 628.969 312.859 623.75 312.859 c h +623.75 312.859 m S Q +1 g +623.75 312.859 m 618.531 312.859 614.301 317.09 614.301 322.309 c 614.301 + 327.527 618.531 331.758 623.75 331.758 c 628.969 331.758 633.199 327.527 + 633.199 322.309 c 633.199 317.09 628.969 312.859 623.75 312.859 c h +623.75 312.859 m f 0.141176 0.690196 0.392157 rg 7.499993 w +0 J q 1 0 0 1 0 0 cm -548.211 253.547 m 573.105 278.445 l S Q +591.965 257.895 m 616.859 282.793 l S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -553.469 248.246 m 578.363 273.141 l S Q +597.223 252.594 m 622.117 277.488 l S Q 0.141176 0.690196 0.392157 rg 2 J 1 j q 1 0 0 1 0 0 cm -580.043 295.191 m 580.043 288.91 577.547 282.887 573.105 278.445 c S Q +623.797 299.539 m 623.797 293.258 621.301 287.234 616.859 282.793 c S Q 0.494118 0.698039 0.866667 rg q 1 0 0 1 0 0 cm -587.496 295.191 m 587.496 286.922 584.211 278.988 578.363 273.141 c S Q +631.25 299.539 m 631.25 291.27 627.965 283.336 622.117 277.488 c S Q q 1 0 0 1 0 0 cm -546.531 231.5 m 546.531 237.781 549.027 243.805 553.469 248.246 c S Q +590.285 235.848 m 590.285 242.129 592.781 248.152 597.223 252.594 c S Q 0.141176 0.690196 0.392157 rg q 1 0 0 1 0 0 cm -539.031 231.5 m 539.031 239.77 542.316 247.699 548.164 253.547 c S Q +582.785 235.848 m 582.785 244.117 586.07 252.047 591.918 257.895 c S Q +1 0.6 0.0784314 rg +3.75 w 0 J 0 j q 1 0 0 1 0 0 cm -579.977 325.191 m 579.977 295.191 l S Q -0.494118 0.698039 0.866667 rg +616.316 166.629 m 616.316 151 l S Q q 1 0 0 1 0 0 cm -587.496 325.191 m 587.496 295.191 l S Q -0.141176 0.690196 0.392157 rg +586.617 202.34 m 611.555 177.398 l S Q +2 J +1 j q 1 0 0 1 0 0 cm -576.836 146.652 m 576.836 116.652 l S Q -0.494118 0.698039 0.866667 rg +575.285 229.691 m 575.285 219.434 579.359 209.594 586.617 202.34 c S Q q 1 0 0 1 0 0 cm -584.336 146.652 m 584.336 116.652 l S Q +611.512 177.441 m 614.547 174.406 616.25 170.293 616.25 166 c S Q 0 g 9.4488 w 1 J +0 j q 1 0 0 1 0 0 cm -579.977 334.641 m 574.758 334.641 570.527 330.41 570.527 325.191 c 570.527 - 319.973 574.758 315.742 579.977 315.742 c 585.195 315.742 589.426 319.973 - 589.426 325.191 c 589.426 330.41 585.195 334.641 579.977 334.641 c h -579.977 334.641 m S Q +582.785 242.219 m 577.566 242.219 573.336 237.988 573.336 232.77 c 573.336 + 227.551 577.566 223.32 582.785 223.32 c 588.004 223.32 592.234 227.551 +592.234 232.77 c 592.234 237.988 588.004 242.219 582.785 242.219 c h +582.785 242.219 m S Q 1 g -579.977 334.641 m 574.758 334.641 570.527 330.41 570.527 325.191 c 570.527 - 319.973 574.758 315.742 579.977 315.742 c 585.195 315.742 589.426 319.973 - 589.426 325.191 c 589.426 330.41 585.195 334.641 579.977 334.641 c h -579.977 334.641 m f -1 0.6 0.0784314 rg -7.499993 w -0 J +582.785 242.219 m 577.566 242.219 573.336 237.988 573.336 232.77 c 573.336 + 227.551 577.566 223.32 582.785 223.32 c 588.004 223.32 592.234 227.551 +592.234 232.77 c 592.234 237.988 588.004 242.219 582.785 242.219 c h +582.785 242.219 m f +0 g q 1 0 0 1 0 0 cm -572.562 162.281 m 572.562 146.652 l S Q +623.75 132.859 m 618.531 132.859 614.301 137.09 614.301 142.309 c 614.301 + 147.527 618.531 151.758 623.75 151.758 c 628.969 151.758 633.199 147.527 + 633.199 142.309 c 633.199 137.09 628.969 132.859 623.75 132.859 c h +623.75 132.859 m S Q +1 g +623.75 132.859 m 618.531 132.859 614.301 137.09 614.301 142.309 c 614.301 + 147.527 618.531 151.758 623.75 151.758 c 628.969 151.758 633.199 147.527 + 633.199 142.309 c 633.199 137.09 628.969 132.859 623.75 132.859 c h +623.75 132.859 m f 0 g BT -12 0 0 -12 38.380291 202.898003 Tm +12 0 0 -12 222.260123 140.010156 Tm /f-0-0 1 Tf (Primers Removal)Tj ET 0.141176 0.690196 0.392157 rg BT -12 0 0 -12 106.780289 216.180016 Tm +12 0 0 -12 221.826529 153.292169 Tm /f-1-0 1 Tf (LIMA)Tj --5.952441 -4.874147 Td -(isoseq3 refine)Tj --1.154297 -5.117752 Td -(bamtools convert)Tj ET -0 g -1 J -q 1 0 0 1 0 0 cm -569.379 81.441 m 591.789 81.441 l S Q 1 0.6 0.0784314 rg +3.75 w 2 J 1 j q 1 0 0 1 0 0 cm -220.629 193.73 m 220.629 206.809 210.023 217.414 196.945 217.414 c S Q +66.602 298.621 m 66.602 311.699 77.203 322.305 90.285 322.305 c S Q q 1 0 0 1 0 0 cm -165.762 241.098 m 165.762 228.02 176.363 217.414 189.445 217.414 c S Q -0 J -0 j +66.602 238.621 m 66.602 251.699 77.203 262.305 90.285 262.305 c S Q q 1 0 0 1 0 0 cm -542.863 197.992 m 567.801 173.051 l S Q -2 J -1 j +66.602 105.988 m 66.602 92.91 77.203 82.305 90.285 82.305 c S Q q 1 0 0 1 0 0 cm -531.531 225.344 m 531.531 215.086 535.605 205.246 542.863 197.992 c S Q +66.602 165.988 m 66.602 152.91 77.203 142.305 90.285 142.305 c S Q q 1 0 0 1 0 0 cm -567.758 173.094 m 570.793 170.059 572.496 165.945 572.496 161.652 c S Q +144.164 165.988 m 144.164 152.91 154.766 142.305 167.848 142.305 c S Q 0.141176 0.690196 0.392157 rg -0 J -0 j -q 1 0 0 1 0 0 cm -539.031 225.344 m 539.031 231.5 l S Q -1 0.6 0.0784314 rg -q 1 0 0 1 0 0 cm -531.531 225.344 m 531.531 231.5 l S Q -0.494118 0.698039 0.866667 rg -q 1 0 0 1 0 0 cm -546.531 225.344 m 546.531 231.5 l S Q -0 g -9.4488 w -1 J -q 1 0 0 1 0 0 cm -539.031 237.871 m 533.812 237.871 529.582 233.641 529.582 228.422 c 529.582 - 223.203 533.812 218.973 539.031 218.973 c 544.25 218.973 548.48 223.203 - 548.48 228.422 c 548.48 233.641 544.25 237.871 539.031 237.871 c h -539.031 237.871 m S Q -1 g -539.031 237.871 m 533.812 237.871 529.582 233.641 529.582 228.422 c 529.582 - 223.203 533.812 218.973 539.031 218.973 c 544.25 218.973 548.48 223.203 - 548.48 228.422 c 548.48 233.641 544.25 237.871 539.031 237.871 c h -539.031 237.871 m f -0 g -q 1 0 0 1 0 0 cm -580.605 156.102 m 575.391 156.102 571.16 151.871 571.16 146.652 c 571.16 - 141.434 575.391 137.203 580.605 137.203 c 585.824 137.203 590.055 141.434 - 590.055 146.652 c 590.055 151.871 585.824 156.102 580.605 156.102 c h -580.605 156.102 m S Q -1 g -580.605 156.102 m 575.391 156.102 571.16 151.871 571.16 146.652 c 571.16 - 141.434 575.391 137.203 580.605 137.203 c 585.824 137.203 590.055 141.434 - 590.055 146.652 c 590.055 151.871 585.824 156.102 580.605 156.102 c h -580.605 156.102 m f +BT +12 0 0 -12 222.594109 93.110046 Tm +/f-1-0 1 Tf +(CCS)Tj +ET 0 g -q 1 0 0 1 0 0 cm -438.895 397.625 m 438.895 402.844 434.664 407.074 429.445 407.074 c 424.227 - 407.074 419.996 402.844 419.996 397.625 c 419.996 392.406 424.227 388.176 - 429.445 388.176 c 434.664 388.176 438.895 392.406 438.895 397.625 c h -438.895 397.625 m S Q -1 g -438.895 397.625 m 438.895 402.844 434.664 407.074 429.445 407.074 c 424.227 - 407.074 419.996 402.844 419.996 397.625 c 419.996 392.406 424.227 388.176 - 429.445 388.176 c 434.664 388.176 438.895 392.406 438.895 397.625 c h -438.895 397.625 m f +BT +12 0 0 -12 222.570648 79.758636 Tm +/f-0-0 1 Tf +(Compute CCS)Tj +ET +0.141176 0.690196 0.392157 rg +BT +12 0 0 -12 222.371447 211.488894 Tm +/f-1-0 1 Tf +(isoseq3 refine)Tj +ET 0 g BT -12 0 0 -12 404.782974 423.508987 Tm +12 0 0 -12 222.570666 199.323184 Tm /f-0-0 1 Tf -(Mapping)Tj +(Concatemer Removal)Tj ET 0.141176 0.690196 0.392157 rg BT -12 0 0 -12 389.808975 436.791 Tm +12 0 0 -12 222.242543 272.726265 Tm /f-1-0 1 Tf -(uLTRA align)Tj --4.092281 -2.063641 Td -(Minimap2)Tj +(bamtools convert)Tj ET 0 g BT -12 0 0 -12 344.782997 475.574982 Tm +12 0 0 -12 222.570668 260.142433 Tm /f-0-0 1 Tf -(Mapping)Tj +[(Convert BAM to F)55(AST)74(A)]TJ ET 1 0.6 0.0784314 rg -7.207478 w 0 J +0 j q 1 0 0 1 0 0 cm -369.445 515.648 m 369.445 486.469 l S Q +144.164 177.672 m 144.164 166.938 l S Q 0 g -385.453 537.949 m 384.457 537.949 l 384.457 533.156 l 384.457 533.125 384.453 - 533.094 384.449 533.066 c 384.449 532.875 384.387 532.688 384.258 532.539 - c 376.277 523.422 l 376.277 523.422 376.273 523.422 376.27 523.418 c 376.223 - 523.367 376.168 523.32 376.109 523.285 c 376.09 523.273 376.074 523.262 - 376.055 523.25 c 376.004 523.223 375.949 523.199 375.895 523.184 c 375.879 - 523.18 375.867 523.172 375.852 523.172 c 375.793 523.16 375.73 523.148 -375.664 523.148 c 356.055 523.148 l 355.16 523.148 354.43 523.875 354.43 - 524.77 c 354.43 537.949 l 353.438 537.949 l 352.156 537.949 351.117 538.988 - 351.117 540.27 c 351.117 552.332 l 351.117 553.613 352.156 554.652 353.438 - 554.652 c 354.43 554.652 l 354.43 562.91 l 354.43 563.805 355.16 564.535 - 356.055 564.535 c 382.836 564.535 l 383.73 564.535 384.457 563.805 384.457 - 562.91 c 384.457 554.652 l 385.449 554.652 l 386.73 554.652 387.77 553.613 - 387.77 552.332 c 387.77 540.27 l 387.77 538.988 386.73 537.949 385.449 -537.949 c h -356.055 524.77 m 374.855 524.77 l 374.855 533.074 l 374.855 533.523 375.219 - 533.887 375.668 533.887 c 382.836 533.887 l 382.836 537.949 l 356.055 537.949 +82.609 196.414 m 81.617 196.414 l 81.617 191.617 l 81.617 191.59 81.613 + 191.559 81.609 191.527 c 81.609 191.34 81.547 191.152 81.418 191.004 c +73.438 181.887 l 73.434 181.883 73.434 181.883 73.43 181.883 c 73.383 181.828 + 73.328 181.785 73.27 181.746 c 73.25 181.734 73.234 181.727 73.215 181.715 + c 73.164 181.688 73.109 181.664 73.055 181.648 c 73.039 181.641 73.027 +181.637 73.012 181.633 c 72.953 181.617 72.891 181.609 72.824 181.609 c +53.215 181.609 l 52.32 181.609 51.594 182.34 51.594 183.234 c 51.594 196.414 + l 50.598 196.414 l 49.316 196.414 48.277 197.453 48.277 198.734 c 48.277 + 210.797 l 48.277 212.078 49.316 213.117 50.598 213.117 c 51.594 213.117 + l 51.594 221.375 l 51.594 222.27 52.32 222.996 53.215 222.996 c 79.996 +222.996 l 80.891 222.996 81.617 222.27 81.617 221.375 c 81.617 213.117 l + 82.613 213.117 l 83.891 213.117 84.93 212.078 84.93 210.797 c 84.93 198.734 + l 84.93 197.453 83.891 196.414 82.613 196.414 c h +53.215 183.234 m 72.016 183.234 l 72.016 191.539 l 72.016 191.984 72.379 + 192.348 72.824 192.348 c 79.992 192.348 l 79.992 196.414 l 53.215 196.414 l h -382.836 562.473 m 356.055 562.473 l 356.055 554.652 l 382.836 554.652 l - h -382.836 562.473 m f -385.453 537.949 m 353.438 537.949 l 352.156 537.949 351.121 538.988 351.121 - 540.27 c 351.121 552.332 l 351.121 553.613 352.156 554.652 353.438 554.652 - c 385.453 554.652 l 386.734 554.652 387.773 553.613 387.773 552.332 c 387.773 - 540.27 l 387.773 538.988 386.734 537.949 385.453 537.949 c h -385.453 537.949 m f +79.992 220.934 m 53.215 220.934 l 53.215 213.117 l 79.992 213.117 l h +79.992 220.934 m f +82.609 196.414 m 50.598 196.414 l 49.316 196.414 48.277 197.453 48.277 +198.734 c 48.277 210.797 l 48.277 212.078 49.316 213.117 50.598 213.117 +c 82.609 213.117 l 83.891 213.117 84.93 212.078 84.93 210.797 c 84.93 198.734 + l 84.93 197.453 83.891 196.414 82.609 196.414 c h +82.609 196.414 m f 1 g BT -10.942725 0 0 -10.942725 355.925995 550.331589 Tm +10.942725 0 0 -10.942725 57.713433 207.653322 Tm +/f-0-0 1 Tf +(csv)Tj +ET +53.215 183.215 m 72.016 183.215 l 72.016 191.52 l 72.016 191.969 72.379 + 192.332 72.824 192.332 c 79.992 192.332 l 79.992 196.398 l 53.215 196.398 + l h +79.996 220.918 m 53.215 220.918 l 53.215 213.098 l 79.992 213.098 l 79.992 + 220.918 l h +79.996 220.918 m f +1 0.6 0.0784314 rg +2 J +1 j +q 1 0 0 1 0 0 cm +144.164 178.621 m 144.164 191.699 154.766 202.305 167.848 202.305 c S Q +0 g +BT +0 -10.281975 -10.281975 0 121.985058 191.582394 Tm +/f-0-0 1 Tf +(Primers)Tj +ET +160.172 166.41 m 159.176 166.41 l 159.176 161.613 l 159.176 161.586 159.172 + 161.555 159.168 161.523 c 159.168 161.332 159.105 161.148 158.977 161 c + 150.996 151.883 l 150.996 151.883 150.992 151.883 150.988 151.883 c 150.941 + 151.832 150.887 151.785 150.828 151.746 c 150.812 151.734 150.793 151.727 + 150.773 151.715 c 150.723 151.688 150.668 151.664 150.613 151.648 c 150.598 + 151.648 150.586 151.637 150.57 151.637 c 150.512 151.621 150.449 151.609 + 150.383 151.609 c 130.773 151.609 l 129.879 151.609 129.152 152.34 129.152 + 153.234 c 129.152 166.414 l 128.156 166.414 l 126.875 166.414 125.836 167.453 + 125.836 168.734 c 125.836 180.797 l 125.836 182.078 126.875 183.117 128.156 + 183.117 c 129.152 183.117 l 129.152 191.375 l 129.152 192.27 129.879 192.996 + 130.773 192.996 c 157.555 192.996 l 158.449 192.996 159.176 192.27 159.176 + 191.375 c 159.176 183.117 l 160.172 183.117 l 161.449 183.117 162.488 182.078 + 162.488 180.797 c 162.488 168.734 l 162.488 167.453 161.449 166.414 160.172 + 166.414 c h +130.773 153.23 m 149.574 153.23 l 149.574 161.535 l 149.574 161.98 149.938 + 162.344 150.387 162.344 c 157.555 162.344 l 157.555 166.41 l 130.773 166.41 + l h +157.555 190.93 m 130.773 190.93 l 130.773 183.113 l 157.555 183.113 l h +157.555 190.93 m f +160.172 166.41 m 128.156 166.41 l 126.875 166.41 125.84 167.449 125.84 +168.73 c 125.84 180.793 l 125.84 182.074 126.875 183.113 128.156 183.113 + c 160.172 183.113 l 161.453 183.113 162.492 182.074 162.492 180.793 c 162.492 + 168.73 l 162.492 167.449 161.453 166.41 160.172 166.41 c h +160.172 166.41 m f +1 g +BT +10.942725 0 0 -10.942725 130.644464 178.79145 Tm /f-0-0 1 Tf (fasta)Tj ET -356.055 524.75 m 374.855 524.75 l 374.855 533.055 l 374.855 533.504 375.219 - 533.867 375.668 533.867 c 382.836 533.867 l 382.836 537.934 l 356.055 537.934 +130.773 153.211 m 149.574 153.211 l 149.574 161.516 l 149.574 161.965 149.938 + 162.328 150.387 162.328 c 157.555 162.328 l 157.555 166.395 l 130.773 166.395 l h -382.836 562.453 m 356.055 562.453 l 356.055 554.633 l 382.836 554.633 l +157.555 190.914 m 130.773 190.914 l 130.773 183.094 l 157.555 183.094 l h -382.836 562.453 m f +157.555 190.914 m f 0 g +717.453 208.762 m 716.457 208.762 l 716.457 203.965 l 716.457 203.938 716.449 + 203.906 716.449 203.875 c 716.449 203.684 716.387 203.5 716.258 203.352 + c 708.277 194.234 l 708.277 194.227 708.277 194.227 708.277 194.227 c 708.227 + 194.172 708.172 194.129 708.113 194.09 c 708.098 194.078 708.078 194.066 + 708.062 194.059 c 708.012 194.031 707.957 194.008 707.902 193.992 c 707.887 + 193.984 707.867 193.98 707.855 193.977 c 707.793 193.961 707.734 193.953 + 707.672 193.953 c 688.059 193.953 l 687.16 193.953 686.438 194.68 686.438 + 195.578 c 686.438 208.758 l 685.441 208.758 l 684.16 208.758 683.121 209.797 + 683.121 211.078 c 683.121 223.141 l 683.121 224.422 684.16 225.461 685.441 + 225.461 c 686.438 225.461 l 686.438 233.719 l 686.438 234.613 687.16 235.34 + 688.059 235.34 c 714.84 235.34 l 715.734 235.34 716.461 234.613 716.461 + 233.719 c 716.461 225.461 l 717.453 225.461 l 718.738 225.461 719.777 224.422 + 719.777 223.141 c 719.777 211.078 l 719.777 209.797 718.738 208.758 717.453 + 208.758 c h +688.055 195.582 m 706.855 195.582 l 706.855 203.883 l 706.855 204.332 707.219 + 204.695 707.668 204.695 c 714.836 204.695 l 714.836 208.762 l 688.055 208.762 + l h +714.836 233.281 m 688.055 233.281 l 688.055 225.465 l 714.836 225.465 l + h +714.836 233.281 m f +717.453 208.762 m 685.438 208.762 l 684.156 208.762 683.117 209.801 683.117 + 211.082 c 683.117 223.145 l 683.117 224.426 684.156 225.465 685.438 225.465 + c 717.453 225.465 l 718.734 225.465 719.773 224.426 719.773 223.145 c 719.773 + 211.082 l 719.773 209.801 718.734 208.762 717.453 208.762 c h +717.453 208.762 m f +1 g BT -10.281975 0 0 -10.281975 348.798981 574.812103 Tm +10.942725 0 0 -10.942725 691.283458 221.115264 Tm /f-0-0 1 Tf -(Genome)Tj +(bed)Tj ET -9.4488 w +688.055 195.562 m 706.855 195.562 l 706.855 203.867 l 706.855 204.316 707.219 + 204.68 707.668 204.68 c 714.836 204.68 l 714.836 208.742 l 688.055 208.742 + l h +714.836 233.266 m 688.055 233.266 l 688.055 225.445 l 714.836 225.445 l + h +714.836 233.266 m f +0 g +BT +10.281975 0 0 -10.281975 654.467143 246.539581 Tm +/f-0-0 1 Tf +(Isoseq annotations)Tj +ET +0.494118 0.698039 0.866667 rg +7.499993 w +q 0 1 -1 0 0 0 cm +169.742 -697.695 m 156.66 -697.695 146.059 -687.094 146.059 -674.012 c S Q +0.141176 0.690196 0.392157 rg +q 0 1 -1 0 0 0 cm +169.742 -705.195 m 152.52 -705.195 138.559 -691.234 138.559 -674.012 c S Q +7.5 w +0 J +0 j +q 1 0 0 0.163383 0 0 cm +705.195 1040.787 m 705.195 1095.299 l S Q +0.494118 0.698039 0.866667 rg +q 1 0 0 0.163383 0 0 cm +697.695 1040.787 m 697.695 1095.299 l S Q +0 g +7.499993 w 1 J q 1 0 0 1 0 0 cm -359.996 495.125 m 359.996 489.906 364.227 485.676 369.445 485.676 c 374.664 - 485.676 378.895 489.906 378.895 495.125 c 378.895 500.344 374.664 504.574 - 369.445 504.574 c 364.227 504.574 359.996 500.344 359.996 495.125 c h -359.996 495.125 m S Q -1 g -359.996 495.125 m 359.996 489.906 364.227 485.676 369.445 485.676 c 374.664 - 485.676 378.895 489.906 378.895 495.125 c 378.895 500.344 374.664 504.574 - 369.445 504.574 c 364.227 504.574 359.996 500.344 359.996 495.125 c h -359.996 495.125 m f +712.652 182.703 m 690.242 182.703 l S Q +0.133333 0.682353 0.388235 rg +376.941 62.695 m 376.941 63.543 l 376.922 63.547 376.906 63.551 376.887 + 63.555 c 376.742 63.438 376.598 63.32 376.457 63.199 c 375.504 62.402 374.5 + 61.688 373.387 61.133 c 373.195 61.035 373.008 60.922 372.793 60.879 c +372.777 60.844 372.742 60.84 372.711 60.824 c 372.293 60.652 371.863 60.512 + 371.422 60.41 c 370.461 60.188 369.496 60.168 368.527 60.359 c 367.285 +60.609 366.172 61.16 365.129 61.863 c 364.094 62.562 363.164 63.383 362.289 + 64.27 c 362.129 64.43 362.125 64.43 362.031 64.227 c 361.562 63.258 361.051 + 62.316 360.41 61.449 c 359.922 60.789 359.375 60.184 358.668 59.75 c 357.953 + 59.309 357.188 59.148 356.363 59.348 c 355.348 59.594 354.535 60.184 353.766 + 60.855 c 353.297 61.215 352.879 61.633 352.441 62.031 c 352.055 62.391 +351.66 62.75 351.258 63.09 c 351.184 63.152 351.145 63.152 351.078 63.082 + c 350.684 62.672 350.262 62.293 349.754 62.02 c 349.027 61.629 348.273 +61.582 347.492 61.836 c 346.84 62.047 346.262 62.406 345.684 62.766 c 345.453 + 62.906 345.242 63.07 344.996 63.184 c 344.996 63.129 l 345.027 63.086 345.016 + 63.035 345.02 62.992 c 345.055 61.945 345.145 60.906 345.305 59.871 c 345.531 + 58.445 345.891 57.062 346.523 55.758 c 347 54.785 347.621 53.914 348.426 + 53.188 c 349.484 52.23 350.734 51.625 352.098 51.234 c 353.57 50.809 355.086 + 50.633 356.613 50.551 c 357.219 50.516 357.824 50.504 358.43 50.48 c 358.723 + 50.602 359.035 50.672 359.336 50.77 c 359.781 50.906 360.223 51.043 360.664 + 51.176 c 360.891 51.258 361.113 51.344 361.34 51.426 c 362.215 51.738 363.051 + 52.133 363.789 52.707 c 363.98 52.855 364.168 53.012 364.355 53.172 c 364.316 + 53.035 364.266 52.902 364.215 52.773 c 363.895 51.914 363.398 51.191 362.594 + 50.707 c 362.262 50.508 361.91 50.348 361.574 50.156 c 361.605 50.152 361.641 + 50.148 361.672 50.145 c 362.738 49.969 363.809 49.863 364.887 49.82 c 365.812 + 49.781 366.742 49.797 367.664 49.895 c 368.746 50.004 369.801 50.219 370.824 + 50.598 c 372.332 51.152 373.621 52.027 374.617 53.301 c 375.488 54.414 +376.043 55.676 376.398 57.035 c 376.75 58.383 376.902 59.758 376.941 61.145 + c 376.941 61.66 376.941 62.18 376.941 62.695 c f +0.92549 0.862745 0.52549 rg +376.941 61.145 m 376.949 61.145 376.957 61.145 376.965 61.141 c 376.965 + 62.703 l 376.957 62.699 376.949 62.699 376.941 62.699 c 376.941 62.18 376.941 + 61.664 376.941 61.145 c f +0.627451 0.568627 0.560784 rg +368.363 38.855 m 368.363 38.863 368.363 38.871 368.363 38.879 c 368.012 + 38.879 367.664 38.883 367.312 38.883 c 367.312 38.875 367.316 38.867 367.316 + 38.863 c 367.316 38.859 367.312 38.855 367.312 38.855 c h +368.363 38.855 m f +0.133333 0.682353 0.388235 rg +369.047 83.105 m 369.641 82.867 370.203 82.574 370.754 82.25 c 371.406 +81.859 372.031 81.426 372.637 80.969 c 373.152 80.586 373.652 80.184 374.141 + 79.77 c 374.422 79.527 374.711 79.297 374.992 79.059 c 375.051 79.008 375.051 + 79.031 375.066 79.09 c 375.168 79.477 375.242 79.867 375.316 80.258 c 375.426 + 80.793 375.508 81.328 375.566 81.871 c 375.637 82.492 375.66 83.121 375.625 + 83.746 c 375.578 84.527 375.438 85.297 375.164 86.031 c 375 86.477 374.785 + 86.898 374.531 87.297 c 374.207 87.809 373.816 88.273 373.367 88.68 c 372.82 + 89.176 372.215 89.594 371.566 89.949 c 370.688 90.434 369.758 90.789 368.801 + 91.082 c 367.887 91.359 366.957 91.562 366.016 91.723 c 365.762 91.766 +365.504 91.812 365.246 91.805 c 364.695 91.789 364.168 91.668 363.66 91.469 + c 362.883 91.168 362.191 90.695 361.438 90.348 c 361.023 90.156 360.598 + 90.016 360.141 89.984 c 359.551 89.945 359.051 90.148 358.629 90.547 c +358.312 90.844 358.016 91.164 357.703 91.465 c 357.18 91.977 356.566 92.324 + 355.836 92.445 c 355.352 92.523 354.867 92.5 354.387 92.43 c 353.715 92.336 + 353.055 92.18 352.41 91.973 c 351.469 91.672 350.594 91.234 349.805 90.633 + c 349.062 90.062 348.457 89.363 347.977 88.555 c 347.496 87.738 347.195 + 86.859 346.992 85.941 c 346.902 85.539 346.848 85.129 346.809 84.719 c +346.75 84.141 346.715 83.566 346.727 82.984 c 346.75 82.172 346.812 81.363 + 346.938 80.535 c 347.031 80.621 347.121 80.695 347.207 80.773 c 347.73 +81.254 348.297 81.676 348.91 82.035 c 349.602 82.438 350.332 82.758 351.109 + 82.965 c 351.633 83.102 352.168 83.188 352.711 83.234 c 353.156 83.27 353.605 + 83.277 354.055 83.25 c 354.578 83.219 355.105 83.18 355.617 83.039 c 355.684 + 83.031 355.75 83.027 355.816 83.016 c 356.285 82.918 356.75 82.805 357.215 + 82.668 c 357.746 82.516 358.27 82.34 358.789 82.148 c 359.293 81.961 359.793 + 81.758 360.289 81.543 c 360.434 81.477 360.52 81.504 360.637 81.594 c 361.461 + 82.23 362.34 82.773 363.316 83.16 c 364.387 83.582 365.488 83.785 366.645 + 83.688 c 367.48 83.621 368.273 83.414 369.047 83.105 c f +0.92549 0.862745 0.52549 rg +369.047 83.105 m 368.273 83.414 367.48 83.621 366.645 83.688 c 365.488 +83.785 364.387 83.582 363.316 83.16 c 362.34 82.773 361.461 82.23 360.637 + 81.594 c 360.52 81.504 360.434 81.477 360.289 81.543 c 359.793 81.758 359.293 + 81.961 358.789 82.148 c 358.27 82.34 357.746 82.516 357.215 82.668 c 356.75 + 82.805 356.285 82.918 355.816 83.016 c 355.75 83.027 355.684 83.031 355.617 + 83.039 c 355.781 82.852 355.941 82.66 356.105 82.473 c 356.766 81.711 357.23 + 80.844 357.5 79.871 c 357.875 78.547 358.266 77.227 358.574 75.883 c 358.801 + 74.895 359.004 73.902 359.137 72.895 c 359.234 72.176 359.297 71.453 359.34 + 70.727 c 359.379 70.059 359.367 69.395 359.324 68.73 c 359.199 66.719 358.758 + 64.777 357.945 62.934 c 357.457 61.832 356.617 61.074 355.422 60.766 c +354.906 60.629 354.395 60.672 353.887 60.832 c 353.848 60.844 353.809 60.867 + 353.766 60.855 c 354.531 60.184 355.348 59.594 356.359 59.348 c 357.188 + 59.148 357.953 59.309 358.668 59.75 c 359.375 60.184 359.922 60.789 360.41 + 61.453 c 361.051 62.316 361.562 63.258 362.027 64.227 c 362.125 64.43 362.129 + 64.43 362.285 64.27 c 363.16 63.383 364.094 62.562 365.129 61.863 c 366.168 + 61.16 367.281 60.613 368.527 60.363 c 369.492 60.168 370.457 60.188 371.418 + 60.41 c 371.863 60.512 372.293 60.652 372.711 60.828 c 372.742 60.84 372.777 + 60.844 372.793 60.879 c 371.559 60.902 370.488 61.375 369.516 62.102 c +369.047 62.449 368.629 62.855 368.309 63.344 c 368.039 63.75 367.824 64.188 + 367.613 64.629 c 367.188 65.523 366.836 66.453 366.586 67.414 c 366.375 + 68.238 366.238 69.074 366.168 69.922 c 366.113 70.578 366.102 71.234 366.125 + 71.891 c 366.16 72.695 366.234 73.5 366.336 74.301 c 366.512 75.645 366.75 + 76.973 366.965 78.309 c 367.086 79.051 367.188 79.793 367.305 80.531 c +367.477 81.609 368.07 82.414 368.945 83.031 c 368.977 83.055 369.012 83.078 + 369.047 83.105 c f +0.247059 0.168627 0.160784 rg +367.309 38.883 m 367.66 38.883 368.012 38.879 368.363 38.879 c 369.215 +38.918 370.051 39.062 370.859 39.34 c 371.484 39.555 371.625 39.965 371.246 + 40.508 c 370.98 40.895 370.605 41.172 370.223 41.434 c 369.719 41.77 369.18 + 42.039 368.613 42.254 c 368.02 42.477 367.453 42.258 367.094 41.668 c 366.977 + 41.484 366.891 41.285 366.832 41.074 c 366.812 41.012 366.789 40.984 366.719 + 40.973 c 365.398 40.738 364.234 41.043 363.258 41.98 c 362.465 42.742 361.992 + 43.695 361.66 44.73 c 361.363 45.66 361.219 46.621 361.172 47.598 c 361.129 + 48.465 361.188 49.324 361.32 50.184 c 361.348 50.328 361.383 50.477 361.398 + 50.625 c 361.418 50.805 361.363 50.965 361.207 51.078 c 361.039 51.195 +360.852 51.176 360.664 51.18 c 360.219 51.043 359.777 50.906 359.336 50.773 + c 359.332 50.668 359.328 50.562 359.328 50.457 c 359.336 50 359.336 49.539 + 359.359 49.082 c 359.461 47.27 359.734 45.488 360.438 43.797 c 360.961 +42.539 361.699 41.438 362.758 40.562 c 363.629 39.844 364.621 39.375 365.715 + 39.109 c 366.238 38.984 366.77 38.906 367.309 38.883 c f +0.219608 0.431373 0.207843 rg +360.664 51.176 m 360.852 51.172 361.039 51.195 361.207 51.074 c 361.363 + 50.965 361.418 50.805 361.398 50.621 c 361.383 50.473 361.348 50.328 361.32 + 50.18 c 361.406 50.172 361.488 50.164 361.574 50.156 c 361.91 50.348 362.262 + 50.508 362.594 50.707 c 363.398 51.191 363.891 51.914 364.215 52.773 c +364.266 52.902 364.316 53.035 364.352 53.172 c 364.164 53.012 363.98 52.855 + 363.789 52.707 c 363.051 52.133 362.215 51.738 361.34 51.426 c 361.113 +51.344 360.891 51.258 360.664 51.176 c f +359.328 50.457 m 359.332 50.562 359.332 50.668 359.336 50.77 c 359.035 +50.672 358.723 50.602 358.426 50.48 c 358.727 50.473 359.027 50.465 359.328 + 50.457 c f +0.133333 0.682353 0.388235 rg +391.746 58.152 m 394.527 57.527 397.012 57.215 399.199 57.215 c 402.918 + 57.215 405.715 57.945 407.59 59.402 c 409.469 60.863 410.406 63.262 410.406 + 66.598 c 410.406 84.316 l 402.641 84.316 l 402.641 68.16 l 402.641 65.137 + 400.938 63.625 397.531 63.625 c 396.766 63.625 395.984 63.711 395.188 63.887 + c 394.387 64.059 393.762 64.27 393.312 64.512 c 393.312 84.316 l 385.547 + 84.316 l 385.547 60.184 l 386.898 59.457 388.969 58.777 391.746 58.152 +c f +419.266 63.887 m 415.41 63.887 l 415.41 57.945 l 419.316 57.945 l 419.316 + 57.32 l 419.352 53.359 420.266 50.605 422.055 49.059 c 423.844 47.512 426.285 + 46.738 429.375 46.738 c 429.934 46.738 430.539 46.793 431.199 46.895 c +431.859 47 432.398 47.121 432.816 47.262 c 432.816 54.09 l 432.434 53.707 + 432.051 53.418 431.672 53.227 c 431.289 53.039 430.801 52.941 430.211 52.941 + c 429.238 52.941 428.473 53.203 427.918 53.723 c 427.363 54.246 427.082 + 55.129 427.082 56.383 c 427.082 57.945 l 432.816 57.945 l 432.816 63.887 + l 427.031 63.887 l 427.031 84.316 l 419.266 84.316 l h +419.266 63.887 m f +0.133333 0.686275 0.384314 rg +438.496 65.656 15.898 5.371 re f +0 g +467.371 83.484 m 465.285 82.477 463.625 80.957 462.391 78.922 c 461.16 +76.891 460.543 74.414 460.543 71.496 c 460.543 66.805 461.793 63.254 464.293 + 60.836 c 466.797 58.422 470.133 57.215 474.301 57.215 c 475.762 57.215 +477.238 57.363 478.73 57.656 c 480.227 57.953 481.547 58.363 482.691 58.883 + c 482.691 65.555 l 481.266 64.93 480 64.453 478.887 64.121 c 477.777 63.793 + 476.664 63.625 475.551 63.625 c 473.258 63.625 471.469 64.191 470.184 65.32 + c 468.898 66.449 468.254 68.211 468.254 70.609 c 468.254 73.285 468.855 + 75.266 470.055 76.551 c 471.254 77.836 473.207 78.48 475.918 78.48 c 477.969 + 78.48 480.242 77.785 482.746 76.395 c 482.746 83.016 l 481.492 83.676 480.199 + 84.168 478.863 84.5 c 477.523 84.828 476.023 84.996 474.355 84.996 c 471.781 + 84.996 469.453 84.492 467.371 83.484 c f +504.375 76.891 m 505.348 75.555 505.836 73.598 505.836 71.027 c 505.836 + 68.211 505.355 66.207 504.402 65.008 c 503.445 63.809 501.996 63.207 500.051 + 63.207 c 498.035 63.207 496.582 63.809 495.699 65.008 c 494.812 66.207 +494.367 68.211 494.367 71.027 c 494.367 73.703 494.828 75.684 495.75 76.969 + c 496.672 78.254 498.102 78.898 500.051 78.898 c 501.961 78.898 503.402 + 78.227 504.375 76.891 c 490.043 81.555 m 487.82 79.191 486.707 75.684 486.707 + 71.027 c 486.707 66.164 487.809 62.617 490.016 60.395 c 492.223 58.172 +495.566 57.059 500.051 57.059 c 504.531 57.059 507.902 58.195 510.16 60.473 + c 512.418 62.75 513.547 66.266 513.547 71.027 c 513.547 75.613 512.383 +79.105 510.055 81.504 c 507.727 83.898 504.391 85.098 500.051 85.098 c 495.602 + 85.098 492.266 83.918 490.043 81.555 c f +518.914 60.707 m 519.438 60.258 520.348 59.754 521.652 59.195 c 522.953 + 58.641 524.414 58.164 526.031 57.762 c 527.645 57.363 529.199 57.164 530.695 + 57.164 c 533.578 57.164 535.574 57.598 536.688 58.465 c 536.688 64.148 +l 535.297 63.836 533.301 63.68 530.695 63.68 c 529.062 63.68 527.723 63.766 + 526.68 63.938 c 526.68 84.316 l 518.914 84.316 l h +518.914 60.707 m f +546.695 68.211 m 556.441 68.211 l 556.199 66.336 555.703 65 554.957 64.199 + c 554.207 63.402 553.105 63 551.648 63 c 548.867 63 547.215 64.738 546.695 + 68.211 c 564.156 73.164 m 546.746 73.164 l 547.406 76.812 549.855 78.637 + 554.098 78.637 c 555.383 78.637 556.641 78.453 557.875 78.09 c 559.109 +77.723 560.418 77.246 561.809 76.656 c 561.809 83.328 l 558.961 84.508 555.766 + 85.098 552.219 85.098 c 549.543 85.098 547.199 84.551 545.184 83.457 c +543.168 82.363 541.605 80.793 540.492 78.742 c 539.379 76.691 538.824 74.277 + 538.824 71.496 c 538.824 66.91 539.965 63.359 542.238 60.84 c 544.516 58.32 + 547.754 57.059 551.961 57.059 c 560.195 57.059 564.258 62.426 564.156 73.164 + c f q -290 131 204 88 re W n -[ 204.239983 0 0 -88.080002 289.999992 219.080017 ] concat -/cairo_ascii85_file currentfile /ASCII85Decode filter def -/DeviceRGB setcolorspace -<< - /ImageType 1 - /Width 851 - /Height 367 - /Interpolate false - /BitsPerComponent 8 - /Decode [ 0 1 0 1 0 1 ] - /DataSource cairo_ascii85_file /FlateDecode filter - /ImageMatrix [ 851 0 0 -367 0 367 ] +444.57 65.676 m 439.23 71.035 l 454.379 71.035 l 454.379 65.676 l h +444.57 65.676 m W n +[9.40698 7.34946 -7.34946 9.40698 443.399668 65.694486] concat +/CairoFunction +<< /FunctionType 3 + /Domain [ 0 1 ] + /Functions [ + << /FunctionType 2 + /Domain [ 0 1 ] + /C0 [ 0.0470588 0.329412 0.164706 ] + /C1 [ 0.0470588 0.329412 0.164706 ] + /N 1 + >> + << /FunctionType 2 + /Domain [ 0 1 ] + /C0 [ 0.0470588 0.329412 0.164706 ] + /C1 [ 0.145098 0.686275 0.392157 ] + /N 1 + >> + << /FunctionType 2 + /Domain [ 0 1 ] + /C0 [ 0.145098 0.686275 0.392157 ] + /C1 [ 0.145098 0.686275 0.392157 ] + /N 1 + >> + << /FunctionType 2 + /Domain [ 0 1 ] + /C0 [ 0.145098 0.686275 0.392157 ] + /C1 [ 0.145098 0.686275 0.392157 ] + /N 1 + >> + ] + /Bounds [ 0.21472 0.57995 0.84663 ] + /Encode [ 1 1 4 { pop 0 1 } for ] >> -cairo_image - Gb"-VF^.o!s$-"fI\6)3NBmmRf\PA^X00-ZlUm&eh+cRRNJa8`W*l?oU*.lA1eP[41#q^2\ - 1Xi#gmGW.n9TQ0@ip*s^te[pGMp3thL!QDp'h!%zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz - zzzzzzzzzzzzzzzz!!%Or,*=9DOSq$kOWPVc'c'8B>VnZ$4h[YeK^7%d!!!"L.A9QT*>.7L - o7lA8/]P,/bT&WjikU"mo]S3E7p"-Yp$"JR`6^pda0/gTk_/d2Q_#6D(33\9z:m7?k\F&!!!!K='/S/ai$a=T@?BJgSf"\GHP9 - JcKcb_KGD7#OI\OYm-%'FqiT5bTmn/NH[!$c"TSN&!7])9a0q*F;W"!!UO6C_Wp6'lfj:b) - @IV=F_-LhW`C*/;Z>9L@!!&\QcK.\`L@131[q=lf[,g:_^;$J>AFKB&j@;\*4nptI8(T>i- - 9c?SbH,(O!!!"l+YklbD!rG,[r+d'1S$U3P0pd+U!V9=jnOE*f?Tor%h=mkSH&Wi!5O7Y,[ - ,,b?[fO]49pf$0W_ke!!!!q.m87CraV<"q81&&Mj]4T;C'BA2Ob9UdK - `^W6[JQu:$Z(&0XE3:\m!!!"tfpU;I%I3mus7bCrBasA+ell.1A47l)+/]N!!#:`9qF2(;Xdn!B#\u8gl(8arR% - t+O-(GeQS7C1+ohTCJ/Z(IpT@AGqN@bj-B/r?q>##92>70"5E>MOI9pp_1Ge.(,(R6KUF7K - L/)K=0Vjl'eO,(=5%Cib#s2G9#/*hU:Du4Y44Rh5'aN#n>5/-8Y.>?HO,$^!1!;Mn;YnCX>jkkB&0Y(NF6UB/][M!&CJ]t'H:+ - 9/O.TsfS>GLoh.T'b@tGJuH06_U`OlV7E[E/`-+X/W$o$@\$W4lj1h\_qMsY$Qh?\&lREl\ - Y[WTq(+iQNSD*G;e8^=7Mdi`JMmZ8B]+ObJ?He6!qgLg.&fM4<1r%kW0PL$GLK8)ZTkumG# - 7.;X,2ZA8k+3$.i2#Kc:iR`D=.X!-V*di8hN4./S - #+SYt&SX,\3d@jiM9#9ueV+Y&p/MA`I3hb0%@sRP_dCI/Hn`'ra0qA[P47:)%)>%U+psuRR - +oT'/i!06YJZ\<.8u]!mL\=kRR9WfF0?tS$4L.J1QOop-]U\HiV1Q-96lj/,HM9eh#m!W,d=-o2nLYrC;:o - :%aAB:EpP_.flIJ^OW>)o+7I-=)i,Ag\X*d:kmf`epgqd_Y_oqBc/G4olZh8[i1gYSV$]Mj - 8''Ap/HDe0G.nJhs@3uSWSZuO4ro+`@m*tNK;Bb399lE"W*"8Y/ccZ:nFq>!/V56([5gtgd - 7V*5>G[@!`F2]0&lDX:m\LPG:l(mA@-HU - ?JBY@41$LKINppu*'Cu;^C:9k+.fQ\CU'2+n\Q - !XYV!%U[5Mk25D06(r;]UY!bB0o,s#)fGD'q^,>7:=1cQ'99m+A"[7s4*if<3rnY+:>$mGE - CnT)kh&L2@jckMcQ7@p/;rHA3V@d-:EC4$#$%l#Yfh=ub+q#sde2'0kbCQGR8LQN2g+\%Y"NA^:aC@T*45G"V>^uaLi9M`cO%U!RK - uWN!*p")CL_;0qpL(i#K@9W4`J4-?K1%Z - Bh/4hcI!")hog;:J,9a;gNP@>Rfp8B6ceWiqP9$8Olbo!Q:j60'oG% - .J4,gd(d(mZ'RLtSJjg=?hnYEQ:D>^dPMsR8ZM-)7t9a=.>*u])7k$^0#JXB'cO'dPDbi-_ - L&H[-ic>,$a\#0^E`LS!(__b41f:k:6^@f`=(k>Y+!);P/=>nY*DL(l(2%,M1=5S7XZm@*4 - ]WkGIp<'1s")qQ_,Jj`kLS]f)i27A=/k90D?Xb!C.ZKmHR\DWNUa)2AmAM>ZXWu<6cHY$(XB8R[e'"3W41qk5NX! - (T7_%CbMWdu.[#Tb^oBY?t=/2@)C\A"iI@h:;<[]@.Q'R;\jM-;0I(p*(Fg+##K04@ApkH)/Fq`*2S*ItFGr+F5$D<!cQ, - ah-"IA;1I)A_&pC!,d5\njS>374J!l37r:X2._?,Z#-%t0j0?#nX>)Tmc]ud6!Wl*!,Ari] - #sLC5EZs[hOTdJF#IIp\Dd_nFiVlS7jt4JIXV&,()Cpr2.Zu1:W['@0KEo2=(C97Vn([Y!# - 15WU)>Vd(d3]@AD$A0qQrS?j;Shk7+1B5!.b!gbKK5)UH>=1GM;0nf2YcC2D)#s$P%6?J<7cA(d.#sg\r;I3c0NgDukA"NJXE\q8!!$Qfm[ZG(;I=3FSWo?QY,eGDo_mH(Ge*; - ?8^P`W<1"WV7fYePEI"OS>uo=%.`4QEk@!57_<8BO!!)S'bTET/"i"nY[r>V.A`86ZpKPCKT'aKe9p_RpM>sF[#j+jN]8/01r4I7It-M@:\6Jh+Y?WqL+#ljt9'-7q?U3SQ:;dY0'^VB@1ijrmI5%U&+"C" - Cbo6rn=\f#GX^WuMG!0G:((b^W[DrI1\>^$5L5jiIC\qSSo^2[Z'E*Y4>-c93ToR5SG:5+m - =*5J[0:^ED^ShLS%R("%8i$YM'WGPi';@7mIn(m$8C-!-D3Q?FQ!/5?O#//gD;OZ/F'N^-i - 1nuHH0g@fR0/Y6BCUbK9-n?o(.lK4G+[V8Yre:8Gj;SG!Mn-!tE]2nE9NKe3n<4O==]l%;$ - %+p$4=i$3.+$;d0/,(&1*Rnp0(/&WYF1fHH$O[?f1826DJi-AN5*-BLWAGU=7$J<4LfU]md - 8c;Y$\YU`U`,fb=ks?>.&Y)`ne7M*n\7-b\8"$Hi(;/hPBW$Cs-tg;Ba-,:/"=i$Oue&p3u - #cl0@PCs58I'K*0dkYIqM3If)_H3]Yu0Bk\bOGi2UN'U!ZGBLp59B@!a7fc@H.hR@^Teh*B - CXBoaY@^9b1at9)AOTS5TrQ=6F0:kBU#EDd/Fk&$)D0(S4lKd94B7>:nf2Yb8?BipZI3"LX - _.meTAW?S#=+,-DcuC`JcAq)aJ,l'rKdA"gP>M!-dJ$naURhBCQb>U>e'%$;-T_Pqg=XYmA - OgC>[SG#a,@o!S#20Ok\dh2HSP6W+XsDmYlH,'c0?h[gc5d=:\.ebn08#m"Pfn3A`(kur1( - &K57Xr09_0%-j(34"_:/:M3oB,t]ZfFe@F8E8;K*QP`e5<9CL5L#0AkGc9eur/iCm"H-c'i - CGWOC7&maRqYO7(irL(F0.al<9rpYE?.rQXZ[,SSjsfDu4=mPj[A=Wi7C - *W:rBM;^^gVRo[+rRj;:lS3#p-nmtj&(=t^EUSt,IjBac(=-@f&N/^;deEbPn'2Ps2;WC5H - opm)jk"V,p[:qdKi./@ZAs;%AG%Pi<[*38;-n$56e(45eRAhW\6gF0JWi>^D"4su(X3m\3D - VMbAdEs[,2HFF$9*s8jrVH/[o^4kklkn>Se+#.UZ7P^R+844Ooi:E5,u*"-OCrJSrqaH/%F - ,&^Q,-7'bK8[NOtYDl";o66/W.^H6B:*b?q5Y6PN/8%l/B'?SEl[RH#CX]k%_hU1#b24o#Q - S,7g!aP-u\t^['K_`d=?UsptNkKP91r4k[HqD)YABdIa4u]a$Q>Fe"[7BMknj\K`(JXX>oc - *Us^$Do6$Q&FXG:Tn=7IM4!Ff!_-*%Ain"s7SPUR_O]$[EZ(.>S='f4FG4$3H2hGQ?WhJY. - a2jNM1ad!VnY1^RcCa_$p!(b??r!*m,e#Jl;5LCCgG\Zdc*b60OWP;aq - qb1:niS@aA9($>rVh6BO:9IJql2-gj2R*&ktua_K]M=Z^Nfa*e&Dj1HhM:*TKXkr9he&fg= - 3+RY?`@pE26IAZoL--;X1Qj2Xfs5Kq&S42RB=".rD:t_/IQ8Pm=t24nuDIjlbGq54?)K[sO - n%VZ*`q,QY@74Q]Xi2KU[b)Z?2l!s4^8c-Ld*&k%o>d^LTZH#.3XZqMIlatoWqiV.$+cDLa - HEI`-CkaEfK8d2Fr[5[L'nV"irn)J*cOk?@W+qbeUiF8-LP^3Om)bMerRnh'[r(=q?sg,g4PYoVRUs4P - ![5@77#^J+@=M,79V%gY]O\KK)eMn_^-rL%!C4ks(r0@5t3^%1K6CqmS3%>!X2P2mg>\#2E - eZ[$9%jP=OA]CA+P+tINsF@!c5p1deZP=Pg@$'9s`j8/GRA,[mkFXsfL;I+^u_?DPE/ia!4 - 4K.W0kI5EHr2*1,bHb&2>-Au1Ci(g@'GO*5CQ]nIf>HXROeG)<[V]R(nHQc.f"Z.\ltdI*I - ?Va]IG<=R3ngm=>YRY4rOTE'VH0[Bp[0&uMkA7`.Kp%^EEtFr9>$=lFi@/,IVDU@ATf/=V+ - 4Yqp_N*kk,FIJIVP9uo=Sb[=$[)`gs&e?/7fmr8:XZbYZ1RPIVT2+JZ`U2%p+d=\5MeSW^1 - MQg,^(5Ioj1q<*cd@85A1A!q()W5bL^q_U@ADGhXXm7;n3KYfA9/Hg>.ZnVT+J(V(IM3#J+ - [S<(p+B<=X%Tn8D]c$0%nAuXB'/>F`hTZ]#E5tO=F`b6V:Wg0 - Rk.q-.>gE/7E>Zk*F;I1ENah&)LM-B9eroSWdHP'l03QolKUQD`N3'YYap_O&jZRIN%qVaq - 'f$YW(6Fp!,L#SGi2q&)%sADYYU,3[MrFCSWi`qI@l9pWra2^"G1/iJLYG#+@/6eW4,^VqQ - :-Qao:,:l4,3\AKJMj.>XPj]H\/c^!h#pM4g]?ZPMt^?/2WCZbRan5D;b?GHJLoI/Cb=FY/ - slMWVV`XK3rF7$,8))Y(Zkk^V*E:b4 - .jeWc]5E72#@US(87Ga6f#tbhXaaVf2mBn5M44sn!gHJK?6bhPhf0EaGMb!i1$W7I;e34gc - 2?t08FSC/Q/@)q*^`5o',MV8"7XCm'$&HaoAa?m7FIA$2c<]0`+c/PNa_P`HfeS=FB&fH^a - K1nK::_rGN%X0q+WKoK@eu_C-rdgq.4.jC9?EcrdgoOckko+r9?iWO1o)oBtDJc+K+f85E$ - j3H_>lG7H7qrR@2;^BaN%b=QRnfY=%@5P7NqKdh.WoVdoC0EVhKr7pB,cDHk34E8aJGJI]_ - B*<69hYF^F1S%'9;Nqu[)0[5__7J&fIfd@[S"Kl>SX2o-e@0#B0OYUiCu4W:%2\3@Cqb1kY - FH>C.>YH*O0Qf$o.8%B'U@g0'8\)I',9V:Mgdk^nJ:Xte`iF'\JQoDA^/26J=jgAVO.VF,G - .TLOV6QqQ1)B[hqoIEV*C-uMA_A(`>(U+&KDcIEl;qBc`02ek.r]5/<&l,(:%i`p?uYU+T< - WB1XjdhJs..KPr@@4DtgE*S/5P;F_KCXa2`u.j2G88Ad55o;I:."rcP'oVhP/X=I])KKrau - 2gW@F9LYM+FNlL0:>#]t5/\=u,3o%E;9o+Hk\Z(Xr@P#tXHfQiHDfO*AO/BTVNR-O^g?Z4h - 1cjR./N1I$LMrb]frL7$c8R+21F)<]62!fWC#r+lB,Ba%$?tgu\l*onXmhFbVR)uD.kG)N] - r^5+!KT/.geFS*]qeUHceWi0T,m;^JDd=:Sp5SHn?b/>TDmO]#/>BNhGIRkJ?-+n`JW*l;R - R&`n_h69DI'knhQMfr?LV12Ae!pgs4Xif2#[A;Z$097u/K>\9*B(@I5I,YN^0p\e9(1^WL7D=XgE`5ZgSInAM - J'pbgn?ZT:;h:pT69tk>j`:)0+/S*Bre3BHrfGtX5k'te="[jGL[bk>2C?6n3%.=0"$]q&V - C!X+*Rd0`GB)K1?Q2!FP\.oKM*rk[0B^"7W`n",SRjVMOG&LLM['b45cG-H%isZ@C.=^,I) - L<6lmgnGkPH7Yhr^/&*gp=[#O6SPs"XM>r)=3YeM!+8N+L<6E]5A^]$bT4&RcFW?'hTnG/h - q6f5LIMJ(q"U?R!H6Kr^)YiZ#pXcPXJo%\shOPCoU^_65C - @[<#LePXXb2*.jfQ4*UB,k9nVk)XZILR$cO47sE8EVqQ=_g<'8[QBmgH*B]/L^AQ]`#/@9E - 2KN2GokfrMLqI!'=9==uGB]ra4AW:p;Gn.Zgbdb!U7DY7>HI$sSX-#&i-D.In(fJ6sj1eO%:?*g!cP*rlujgjs"KeEUt&q5> - 08@[ONnrspq'(XIbCb@Zs,Iat:IVD[AR8K8CSuo2@_j>a6naUAO&Fmuj8Aa:KMi0`dbZYVu7gTQ;c3.`VRr9(Y:C`Lp0P/ZXc;0di1`F2Kg=3*lQd*16[ - ]s7]Hke^;mG+t;o2;QrK@X;QT,&4ZVl?@bWF1"]8u[URErrA1dQ*e8mLsu@XeYFOQ^^kt/L - -7mj5'2F6hr6e5:=S=_2UCfH&EZ_pSZYF1[,Tj?FFF?5 - I+I?X-X=5u)cn(taAdMVQ[omTtWgo,51#1@bdf"*mN=/09Bd_^T6[]8Ipm&+$P(.#S.FP$24)dG&_LcY^c\KM%eB=:J/%*MPc'9mF_Y1(YNWpMoQcJ5c(jr. - Zp8#-pWOV(_S!u,?4,642[jk_afB-tFD/Tt<8%F_r^)d`>94?YcU>OoVT=U,i%@C; - u*o(fl(SHiE@L>6VKMV0hFa_&@M?3IKSjD:MH]A*%s3VU?QR8K16@Pj7V`\W\-T@=u:GCql - L_*qQ/\EYGQr;QYkm!&+peC0a55uBXLdYi/:8rJR[-,m` - aK$rZFik35-o_3(Y=8C1oI^JM>E*Y=/3n%m*eNCVA9>1XKa1g:*l04 - 3Z3s+\pN&lS(mnF=1+rDaQs&E!WDks=MB1_^3u>$?$c:mrS>)0rr2o5_*R-)`l,e@-74 - mL7L%Hb&H.BL/USn]tqJtI\0 - Y+sD:Q^67ucQdMFP_^`Hoh-eLgktV?o443__AZ'_"S5lX%u3-M\;Spe]Hf+jG!0`_qZH;m= - AS8)&^Va/RreXd\q_^i(!i2]ff1@P5jS&j%4PB?W?\]jAQ@8ZV#,h\:MYY(?@j*pclf=EkI - caios%66;7o3EZemtA?@*!N5(lgfa;V[2aP)V0*G6"l0jMjMP+P6PlWF-_Dkf - f\t.6IO8Z>gs[ZQIN4B^RB/QZlsYr7hk],fSd>Xi`5aT=-c!A?NI8OTbIIh7HZ;$cSfhqO;\3@BtYib=E7Nnr04oO - Yq-Go_/jC8MNKkQM\YAYGc[kW(h;mBIbT=&VuBAn0^_X5"4qZY/u(G-``>'eh)H![e&HJ// - JQ%RDd*.21=aQr,b=4[qq^4+0#`hBk#&&#`#d-%j6cco\QcffT3aV3eaJes'TCC8ra<0enp$X,+U\mj3l0(-HTRGZH<)I - HqZ416e7eA*]k/oobK$['__>eb8e.,8h1r(C3[>e"_t7e?g3"Pn3Z/=VYK-dVGs2=2Br:N. - 8lX36-r@5u4sIfu91W8?@\8"@&[UVmJT]G]!_K2!r?')Wt]\/aV>=Au?u^3r`kcF1NdEn#! - IjLXOUW9b$tV1[3N8F?m0tK:8t]gg^4Yj\a*1WsSFL(=kWNAo - kdlB?cqs(hN:>9H+@E[e-$r$@AXGg15Bi`d`,E4MBd9em - q7J-F:<@RFeR__B)0*p`>rm2Pc-9h50HVA - Yk4@bP=MKmE7MRQNGr$Mf96)7KO)3@QE5?oK`>BNWZW0RsnoAeuG4/2*.bRTT;lba1j"FE? - G$FVk/(QI#m]8t#g>c'RDr`MF&^0%'jgd.VgZrP"`FVJ9IKj$Le>D0EF4ODS5,HB&T2T*,E - U)kk1q.7aL#&#[oPD+GG>lDn:!6FAo2UEHX<"%@@@5d2&K9CoC@3(D[PKLop+@r>s=qWb!@W1 - $rL=q9U2EfD'N8Je@0'!n&Kk5,Em81:Z^8'f/bjsji,oA2\o0_fMA^MRl>4=4L((3jM^3YN - @aqsjbjUEMdc'Z?!X7*hYqqM):mB<@g@R8_DQLj$\%^1c"1!/]=7$WK7fUO.aeGV`p% - /3nF>,^/NLfcHaqP0Y?H.H()2Y:OdD8?N&(inE\Q(=#EqFEpLVu%h*@jP2&TBTa+1r^3IJ5 - kE?Gi)A47i()8@p'c.\\mG47'WG3n4dF$>mQ:,2*qmL@/Pf1`BQ;r4lj[JDCY>0Ln&C`*em - 7CXD6$bnEMfL6t#m:T*%YN[)P`W1PXt@Ic%^,S`YOrp<.eRq!,#3RBROkJ#qNgem[UNY9ZI - GeXEVR;0p?aAW[*O&MmbpaKa/3O6e9>Lo=mDKWH#3TNrnfN(>L9F#_Y?>5`df)al&R?W2@" - SUL:nNgE.ISXi#q2f%5h.?'m_uk/GU%r/,7*&`O/ZXZrHJ/rr#s&C=7bA9M.?ki]-6MrNKi - &,"fhA/i/Vr0m-N'q?n3Cr5r&T1G:Ari[M:'*!X0.bZGkj6i&T!b?OJrqMLn)oc9GG:4:T? - 8UWf6kigjPkeE2Pnn9E/XHh%%0j@ - L#QPf2uGLD>MsL8qUo/pSb&)`IK\iIdAPWQXig?IP:Z3J27Ac9ER*alL$\O56c4G.j*+mL3I$qNd*h - 07%Jf3FD.57V.i#hV;6OD)[gq8Qftprc$Vr-pdIY?W%';R3K*-:o;$RXPe#V^Ftu`$]6s;<`]!,\,A0qMNi;9eh*BQUlmbk0>i]Cn;F_GO$4mAc0)ZcO - \OC,+!2SZB/.(3_cbln/6]c()8cqj[Bl'3Kpt#Ncd+gd]HpEIqogG>qPBDp^'gLDr[f"OeGqH3Od(6Ve - qu0K1#CUU]o:cor>[3d:T#L\8ZC(;jb+`#pB/&]1'2ME'VKOUbpc]_>ISd8P - gUA'NPr0Qe5Y#nQ-H:lPfah"TRTfN158cT)r-PnA!%gR66sDnI^L&F?]>aTpm%bkkuFUpIg - :'H.3$WBoM=aV4h*r"!?Jee&*VBKStK"?TL7mQq1+L28,LG-hn?crl=1J)cCR&@n1;"blPA - &q.>o$,LJOB5)sPYN?u(+O@>31-:6g3JMA?%)bb$8ZoYk6SVUU:FBCkRM;,C*9Y>664AR)` - aT%t=C#=5XONEa(ApgqCt+SaK)#_"X/]\l:XTCqt/;d\4.%]/Ur3m&N2qp0eQo$fUMUqW/, - `,deO+8Ae3^FOF(1SA6lk)Dg`GF*!tlSAruq\[X(GNdsNeorQI6m<5n3R*"f%I;XCoLZX[A - hmWjQ*^kXs-.nPMA?%99k9^IjfgUW:uC0fTA:OLi';/OHMb-f1,;u/6Oc9%rc4LJ"O:.)Q5 - Qr?6pduG=.:B.eO[N.+%^l]gqu0`lUO96,*s4 - Rl/CAq94nUN9IT2pDs0^OM3m%4NAIAf)HGbLml!<>(%DkH.40=gTZP15D0RD5>aXAs*6m(DDR"Yho&^O!g[m=GNn2uA7]Unna - .\@$8#N^T3E>hGFRAZUH+%cNmH0PPVg2o0n%hmBB1!=*IPb>kAQ)saRD=+8)Q(hWamB_Sho - _hrA[l'9Eqg<5I-[ - d^b5A1d((5YM7)IrB=I[MO$X1mOSJ2D#i+6b[i)_.WR)eZ9Pc)WYdsjThr6*O`06Y,XE//i?W]8AG5[rS)s>plRX]1tJf@o1gtK4+ - mZ*"qG:p8[]uY3>!geWErK"`$# - bNR.O-B\HTSQIf8QNoB-Mm_2pqb91gJC4et?Z00_\9=3hr994&[Idl+,Vg.P:?;/3*\P&Ip - /KDP&n]jkjDn>k!3e?gXiFM9cci(&6Lr#kfTY'U.H,cAJ^2I5i?n>clkm*G/87VNJq)'^;[ - iP!)TN>dP,Kh8[C='$2mLLAV&4eY\#q*%Z?i)``O_!lrXgpRm:O0Q*Za.5>Ujp.9>r- - 0lkb!cbjT+]hmQOb'oj4pL1,eeZY5.' - kI3iI_[W0h`74s*+lnlbO^$4 - R;UhGf>?L!Q>SQ$eLI(&Y#ec)e:?n)#dfC1YM'q/T(h@HlZB\1YC4tLmD'[R%ldLXJM3UIF&n&6;9'-!Kr$\[ZokTcViZ66][B$ZJ:?bB2@KjO)i#q0 - u=E!sgGohH'"*m8B<*,92%lC6ZqjZ1S1*C]`;/&MTH$Y\LQ+++KEV:p*NT@Z$+>!kJ2+$er - JV=Ko1H_q*[Wg&8Y5;),eC<"!\iL7HGO+Bc.?ui9c>86CFmmm=5leY*n>d.QT+&6?\M?CSP.#5n(9Y8I3>5mIL0`9eBh9Q#?F@+L^>#W - iQ)nr@Du6uFbkG#1#5+TQHR?(fVd.uF- - 2HMe#0NmDXH/SF(/UQbf]q]orB>Km0A%oiblfq<;P#pUo?]I - CuL#SZJWgZ&R.kRGBSt;1Xge((@DP+bDAP*;nd\8:+cf"PiJ\CtKV8\j-G6juG_66>X"Tu-7s3:<)#PB?mFcf,P%J<@.dbnpaQJ[%c_$[D)6'S`%iWfeXd9J*$tuNf7.Q - qXB\#!s<)2UZWdV/cD_`Ef;;SV=X9o-'\F'o!"bL*@&H$'NV3r3Zk>mi`c)n+L"G1Huas/S - $io7UYrk++9^(J8<8N=,`Vl'bMrT_q>7m]ND_nPKi^5\Ce1c`Kcp^tQ-*Fnig8`&k#f<&OoC2T/)7,A - QsNZK54a(XSsc$k,.%NEQ<'1>_rP.$Z'V*;V@nUd$#6]DFo6aIZSg\b!nM7:Y,_Is.F;NYq - aVebFGpXnaRYQ_kH7L4IK`6(d!^GZNY[95:uSiLZJkN=578;,cgSBmi+Y?\eXAnp&7Dr6<#_')Oq=A7]b@=Q$)E"JN[WO+6iPS4'>eb0YQ)3T!j2]K:4`g - >`)+t?q%I;UtrHlZI8JA^Zl.i(36V1UG;Xb&%%K5s7%$NSoi.-_%0>toO=23Q2J\]aPK64Y - D_ZhZ0?#RZ#H7K7OB^d6imG&ku2^`l`:)O#oVMuOtg=_UE*YKG4)]S\9b86?0aJY<,?b_a+ - *=re?iUPROp*+dcP&D[3,14#eNSp.mS(j]b2bH6EEuTW*A;%(A>^j&=BT)MMA&=BK)T@*HN - 7RUU/j=27)>85\RpJMG76l/1r+^oC-Y")SXI%eSQ1[%_fMG3!a3<%tobq#6X,S&[L?uCE7u - gidHI^9bp%bq,%j/BHdk45#$g,d1]#]JVc.1?uhB>qTi('LX.hb\/fG`>E7m;7+B\$-]6bQ - cpennUTnhaRN.(>ich,t&5GOO=\[*bI.\s'5:I(QeCM#rak!e;12)oTpjF[)kblk'3Tjs0D\FLWVgX@9 - 2u!un[MLs]q,A:`_/IO>UFC&EHjjGtd97k\0C;l?F0UhPFn4f(P+@snf^\9;IK]e&a_N$tg - AUi53)2FNrd+ik2KXb)bBeYh#mA!]iJO8o]mfX3ohcdY3i,^_I`.]*X#Mc%@;FZ&!L"6r'K - Z"$Inc?Jq&uE\Qj5jZQS0e);2;(BjU:1.7C?GeAh46T9>$=`(C=2kfoi(oZm_tsIO1?Xd\G - $m`)d"S"ht1U_,j,5CP^./1<[jEI'3D9\XWN?d84Hk3t'7UpsfYdNt[fp(7_!L,s%l#%t;X - BaW9-Fj1KCZNT$>IMB;\IK7d-'PW:r8OuMO>Dt0QUPd\)Nh-*j&FY34OCB+ZijJ4KPF,+[' - 'O*4pl2&&\I.J>lH#f_"V\&AmgT8P,@Ejl/73<81e3"u,h7,E"?!$Q$N@MR'ARspjH)aZ%. - KmL)+o$&/A:qu;-ZX[UXSJ)Q4noW_%j#[r3UJ_Li./JQ4GF)BTn=G,k-PT\#=A"$0_eKcPg - iC+8RPp+>J%I)\Ine7r8BU*hq!h-f"q'j,to+`/BeR(piKk4Pdu<_Oi+X:&$n7]ZZG-ds$l.s@FG^S0jsF3nVKl4Kp"8&aAadt7S.'ZXDX[Sf%-V.Wn_$*\I0=^:psfYdO"8> - oa[67AjSYfV_^UjOn0:Vc=Bbi#Q;(@Jq87su%$,3V#_'^hN>jiA*"k/a_/JY*c'1+FGKt$5 - G&f0U2WE-!Qc0pRGco&94PBBMcF^1Q32dKBd@N4P\^f?Z&WakYWQbYFe^.e=aONK*1__>!%>.80hBGDuo - ,,7?YY9psGJBOP]>aFhtn%#86b0F+S?hjLH+eICf4dr?Jq$i0&q(G(-[m'8 - Cp3X!AJH$XrbYDbI35Uf/S&]%-"'JCK:aB?++2,lo=K/4_YL1;b#9eGi:j?iDNHL!R:o#]m - Hg7iX;o^C&cBA.9l2h4bTE>sQPpg,i+I,r,c,@?,:aJVSFsABg\pqKV.Z"_pt+8K/NMWL9_ - 'Lm04@Qg^D%'6'+u=X#OFYFDVO&EfCa>nhQlLjSjp-N,Lm#l><,,^+gdpH:903>_anjHi]BB64u.hhJgSi.[$7S\RXY4t9d&J5V-#7f\ - ilrj-5PsOp:-=3Oo^O=ipSG,@5`o?>)[3kY\)&X=@VG?7NkZ$GQ#JYkBJpr.E:tjK[ldshG - _mKe2(K>T:E>%1,jZ+3A;qT%OqoGbW3nW;Ls6NdFfBnr,pL<%8M1'Lid_d9urmJ8'a#r&3a - 4Wl(hE^o9;Uq6,?H#rokEh^KQTeW'hes#ignH>#RLAoQfmND8Ip,n+^Z:3?77sApqk/AXhs - VK\A@n_&329MqDthj>E];TMM>d.QT0*ZqB,_d-Ede(ljHRe^('k&+# - DB0F+l/obHb/_2"?YpkaBN8gQ6WJ+_Xm*iCAUWh2\gj\0[50QlLYu5Y"@)^%g;^"Y"\C^g< - */Ld<'inQe_+qRf%RLZIJD0[Q,E>`/IR$hNZL2Yc'lr52VPucie6id2K[:a$aWmS-HrU?3D - VVN)J'4Oq*#+99A;IqFE:d>SMZ[ESXl+TI%X:7?02&`2$OANk@E6FiJ%cBg*TVV2#-#I5H' - 1C\+^u>7r`u)/T2)Is(u0DIa!Ed;-6r1F2rHL9+EbU:Q(-hA)=hieB6]>4FQd25ek%'+15G - p^#8YYmFt)>l:\i+Xd0md,7Nmb[5PQ.oi0@0j1&bJh6j?2=F!W4Zf.P&p'O7:>,r-HOON-C - .t1;PThp!oqK7'#n^4L6CR\8#=R=c%a,f:l\N4#5hJ!oe]2hdG%=U]O?J^83qccmbohO5C5 - s=bY',l9R1,PZ2TiEUEZG&P=Rm!,UQPO.nNP7kNedX"n>d.QT7"f,cEaa_jD#![5m - -sj]QbSU1R%K\OlTnkl6M4N>ic)'jVD&YDj'C3>I?HcQ2CL4J'P,u9c>nMl6-(>/_/B`c^a - 7bl9_ld;,L2jaqRl(;/4n-huAlsG%PU^3[KI)@rdI^a;OJ4i'"5e4T%]QTqI&0Eh9V23;ZQ - kiq^1Q%K+j_HKJF7nDcNb?^YLtcA!@1Qa?H8WL;(Xm>!%\MBRuWm&n[DfI@)S6K6ni>IPqS - (f/F=1,t8V;rP*_;dEXuMi2:E\142:Pa$gOf"HG(P\!B.BlimCNFANS;XN2IZJ[ZhfMEok2 - Yd6[M\jZ3]2"+Yr;=c49f:F"AU+j1)bKKs-;D'^CE"?;:TsOV]6@-+ip<'hf\Ln^;H1rn%a - LsDYI#]_EtD]9H1hur\B($/U7pJ$i?887?@6O"!q['l3PXd+q?]X`*dg=aH`Yk_> - ';1`A5[J<7L%CGL--MAAo!IX@QDF'"!;B]C3?jdf - UN@s]<=rLa::3Tr$M9'T:)(=::hh6B+t_VGe!^-&lC*'9dV0K*gMUbRmAm;-oW<1IPKnrZ\ - o\QC^Q=MM'=-+S0YJVUGc&4._ldsVEBoO%1[q>;JB4n-le5U>_Q(4@<'&]dT/,T - &.Xfe\@4=%:If!J*5:5]l?+RpmA3a25?8kDU2B-8fZ/iP^jp1;]R;Gn,=nG1#mj-(ic,f,b - 2Ut;D>6VS#4nmQ1mMA8(Q?OmVV,+fQOWV5>*o9:^B5'.&\6_*Fn"g=!:S]CYQY/VgWcZ$S@ - !MHSD-n'n2NV.blL7Ap$mG'uocLemNqK(HE&]9@sldLX-*n#B.kYAi53dB#i$013pS%HP]m - -p]9%efT[5!C6[E8?.='GhRL:-Et#oYg90-H8N)9pn>nqsE.H;,^IlDVhI_;A5nHN>a[Qhk - 8ipN>jchg8$G0GfhV,CMRYXl.'SITAp\?>.AM>*YN&%6::A8n9K[+M2@(m?bO$kjmo:.)p! - B3GL)klg,oi7+`,Q=W=h41jDtS%00,K^R&[-aZrC+BV5)kW@gA1#k00F1EPqW/Vet5Fh>I3 - KP*2!LLE1Q],O[@eo;12I\\`4n[Fi$G`tD,.jlS2!!&s\YHKUU=_M - !=X2W)uEa?))3?7&"A;W'pBV^:X!q($@VZ?btTK6\^VN`_-/N5QK\n&bnPFL"J`N0hNl9\D - +N0dR6XH*,[!!!"B`Q#nqRWYi+UP?Ls^0FaAOEUEVW3$m7Gco&]T'T"lQdOSb!!!!aO84>/ - PV2])s6D>@93,";(\M`O?2Gu@,AD=skDn2"H(5KJ!!!"JaNhrngo2Npi90Or`c]f=lpgV?n - Uu?$go!#QRY(XeeTg&BUF`R>z;KC=5N`,-]12*=Ic\!JRbW_Q#*B/@;K&tZ)=9RG5&[FO", - QIfEYYHS\l4"h).JVTM?KA\4KdS:oTDX)OPd2CWacP\#`,ddOs4>@h8s^<=cJksf??iA?I> - r.F!!$D\VhYMReCUsR]?Et(d:5I?IYN)N5BaB*UB/JH_`Y@YpGo_Ee()EUNXbU4W`:tDK#N - SAH-SlA(SbE"[p4f:;N)!3!!!"VA'XFDP_.f,4aX[k\b>f%O?(e5>+GQD87a(;F`po-Q2`t - MV!uDOnk'9sV$+!uE3YCd$.J\4A3`cK3>mj,[eEhHX.0eR#m:5.TL_7rriFVZOlWK;lap*!)aFC*?>b4*#]G68L*,\SXm - `BagG/E8\s*L8&IHtQ4M6%r1Y0fB1!_Y%`qJ-Hs8m>ELZmmqRWjD5836m/8f#R:RhV0%GEf - o)t'uuDsn?P,9D;-O2NVUzBuheRFAMg*65N4#AKu9>LZMPX!m@ai):.lZNmC@nZ)u6Egh0s - rNeb0,&@h**RI0u4Cr5!k^3kg`:!P7@XSM#[!!!"L%?WYXY4/&%^H4U:dDjati^`@R2hKlb - D-B\h_`bH]7X>h[@9`d4!.\5rV^+JP42F)Ej,#JA*WA"KI'h_tJ)b(,RoaWLD@*Jh!<<*"z - zzzzzzzzzzzzzzzzzzzzz!!!!D7un_YhS"8c]))-f4(QEo`5G'HqZ-Zs!!"lY[;+7l@uSas - F57?,!!!"t_7FdT(oG"O%2pAa!<<*"a?Kel!!!"L3Wd,.!!!"lN^3(9!!!"t,7sbQ!!!#a# - R!?l!!%O1!l5BI!!&[P5k"jU!!&rB&GuM.!!)9i"?ukd!.[*3_%-MG!2,?;n,iXj!2q+Rqu - ?]s!:#A?X&^q`IfK<&rt,).!!!#[hr2J.]6[5Kq]`8&JV4s]Y\@=M]F)KjI8^eZ6gfoY?"[2E!I;mbE - *XiWVnAWMuk%(LE[)oQ5,>5B>i+U.(":p?eo[WS*q1"0)a.-n-UQDV\Jl:N,@;Q'X+/,%o5 - RJc`*%7R:p0DH'RLM7]*-?ad2CfX,@VWMq=,VBk8dj%I*m]6jgZHhZr=5H(Q\2/1L7?G1YLFnu(:n,LIu^M2/olK[ZqgU_Lk6Jg/^kKbNjl0$Bb-bmsff, - n]+n!n)&nRKLi^G'%6LAh)f#[!#"/@3 - cWZQ?b][G?CNllp@e2,O]'n=pf0mWaeM@ek09BnU8#M*VlE88&a=4A@%cjJ>:Hi_]Y(mXY? - jr?*m$3SFd(n%iPUFT=]kn5#BSEQO\#->nRE3oRl5-+[9CVT;m\MJL"@-Mg6)C.G/Zq1nBCcYe"m-O([kK]4G0(#6j - +$Z@`lFabl=n_:B_hY!VNKS&..O*Vnrqs;X4'3415tTt3:S1DTROq`7bU2fG=0GqM]dEd[j - B#_s+N)B9,f#4(,1[-Ko]X],@Dg_Y,=k.";fg^%D=R/dXS8Qc(GB*R(bn@CrMgPV4jT&n`!!gHWh.k?XGrZ4g$h=dcQ5k(Spe5kNUHnWBPOKY&<(,]m]cY - 9"h:FVb`p3:S,d=a"+!^Uh"%J-&;62!O*b;*GKU\I#Wi@Q#*NDl,5(1;b_V"/B:J+8Qc-4DAmc( - uf]Qh8%n"QSPqtKR*FeAYcA8E#C=;=#l5A&+VY5;D/JHH-(,pgZ@LB%<&"QmO=nDM-ageZV - 4D]`25ldF]Tj-j71cmm - "N),k0K[GFglh>H5m0s$q`?Gi/cd - 'grXZu8*@NPIFr;;eEQ+?;f24ZgQB(Pn>^ - Yde@c`Y?p>%/!XTcr5el*3,p.orM\DR@Dg`'Yg:M990Ri0,sa`EaR.tE!!"dl9(8UhnjQtq - +o-,drii_e@IQ'12?eQ0"os1*i\pS&3,sPP5O#7Z')XjS4T>)is)HisqAM8.ki:\j]DD_d1GRI:@ISX?oV - qbI4g1!2OqLtt),H_[NU,FT-,!lE!!!]:oADQHi';V)0-_^:FmIUprCLWBmGM&N>g1`=Cb- - J\AdlB@'-BDc-st7q4u!@m\[f7krb12mB$Hc5]>$S_g=gT'%i18AFePM&bkD;AJE#QBpmjQ - pQE@pb("KKp^M2/olK[XQ)B((T.ZGB+rr)TKBtOrCi-5.rFgh1cNOsE'db=kYL5)cGo=t>( - Y@5>'c'pXF5I)kEZlngAH<8sj"MY$D%^=eI,pal.$)g@T*kcmmlJ/pkbEaa5*Bc]3*Q+ia^ - O5jO5a/ZVn+,S`9QgR>J>-Npr!!QH5U6&\6mqXl*+Dq_S?_SYhZ"$:<>[\jIQ?7oI*[#g$*"KDlB]$P;M2;O!=aPF>77K`n,pak(+\.jEkJ)HBQDE! - CHhU:(1eCVE;o7.^*W4!*M8]]9gU(\$DV[?42n,0AR*IJ?VV$qXRHM)#"])hstdBO>^BFFqgnZ60:LRh^?"KNC%sCXTL<]_!!(LY>Qm> - m*Z8_GZK7Q7Ds2=++X)C^V.rIKdL1N1B?t2HYB&[CNI1Qr/Z#T4kN?3dHs&s0LTMIcm%h2t - Q7Z=\I(SH671KmZ9p[)CBbH_2<)flDEI,GS0endn2We9i#q$o@K$pNeSXlhGNeCH7=@&_6` - 881SRJ6P*>$>*f(G@,OSpXp;8P/aB_Ql]X+s51K_o#'df<&9/V+VU?2bi.4/?UQ7!2+:u#J - ^9:qpPh"7Rfkks+]FGJ"L0D1GU^\Sik]2A&hq`S4<"+Mi2*2hV>hnqe2Un848k&BbDq-1iD - *9d_kRMk'm:*1#-H#(+hj>6Kn+@LR=HrX]r8LBP@>?qXfBs_1Mt1p59bNH8N=C_k'&?b&FT - oD/J[IZo"f;,lrt\2(!<-'0#pXIf7'9ueL7;W\sP6bR - \ZDhq[J][U[>f2`J4KY:h-qM447MIJ\2"7F6(CSAtrYN`l?0X1Uj3WAaS3Zr'&J)5k"j - UI3p67BfcLVkF[7dY65dX'-hZKlKdcFD;1po@7E`U$P*b\(.D9,>UcHgaso2Zbi&5N,.dD9 - Mi3MhdnEY<;h^0\g7:hpqgF3",Z - Z$X81UFHq1f!iro^6,\"MkTKoGg*jq>0r&)uQ_9Wqa%kf<&8T`.6XXIm5)"_;*gNX'`HZ:I - "g=kig)=b1kZTqK.Hu?,(iZs&d!hKuK#j2^GhVlI77pF6)iL_kKVngM"7kc9'%c`g#JirS- - 6/p:&8?+sJ6+-"LOsE;JMRj@!X[o]Cgsd_sMZ:t.\>2)R88/g9ujJ=b4]n1-.Fk>0cXqsCj - -)O$3,*QPPCn)3j&e'*]*OC(Gfg9bQ-^K:=,n!DZHAN#!Y]6E]Z3s]+,()BqOg - ?='.Z"q2>fn_uudk8up;badp:iku/fboJlhN74*HL(,*s[B%"?qWjZs+SYtfT$p:#]6a-"Z - V`Jqgc3tk`@56]eud/Rk`S>8G-S`lGOM,UK*/GidF$>SRlbTI!4+6i'br$<&==jr1)Emr#m - h3o)He3jsG3EbO)Z_.ck[`/#$(AEQ[uPgDC/C,%Cri+s^:_9%lg - RH&*rB6X+<>q'Us\^gR^k>&jS*^*D11h9^m?id/@CMW7j[r72ibl.G53P21L4$2'Fek0XIa - D]$`5s_4P=2Q\?!!"!"$%>2fGGmJ^3ptb3:ZqJ"q>6De\@C&?f.57X]"0qKEDGC>PSP#M8n - j2*1=aC*+4&_N.o_,&-m/mV2A3:X&Q^=$c9U0,CR`Q#p;S.]B!OWiQIfs@(k/9+^fOQB`s.&FTQlDoF - 7qqi>3)jM?^c$oHH#>7]_:)1%=Z!t>PHM)#JJ%kpYCFQC4s2Jd7\]uj>9"ZG^qu?^VF;"LT - >?`ILR`&pI7nufSFA_i4qsXF]/g5_&?A2FX;;puTQ&q(MV'/_5RW[ZPjV8jZ?VjRlm?tu7? - _HPsJHKAnPa\&`l&WbQ8bk/((+ri?[Vura56(Zn+i1@m\QR[1US=JBNG:@ljN+/jQ_p[Y$[ - fBTZe`6;1]&_N+d]A2p:%dk]D(a*mn.;M,5hm&]YJ@LBoJ"0`f;&Y)]O.jfJ0N%r8QA8B+M - ?';l>BDgY:&C2(LC9nbi4S%1Nch - %GgmRlhd?F^,098KO1:-D/X?j]ZOs-d*PVKF.q;Sn,i[KcrKSII/3>`!GhX&a6:7YdY4UdTI2e8F*RAS#Glkon"GM)usNh7K$&OL?QF\@K.%?+Mj;,D3<9ma - M+1f>$asEr*T@iPU#u*N#g8akbdDdu']e>uaminAEY)i!07tUT<$4> - LtF/Qem_9>!m[^NVgmbAE)R:!OTs#tL5YE+a*`75c?<7SV?p9A&DL'9`(?%q]9eTe`U - q,t:J,GFshR-N9=t9l-!!"!*JmVGTPDlB>WiDH$.Yoj&lI;"F:ND1E,UA&lJPi13$/_hd.g - duSoqa*08Y7NXgg*5\',)#dp8+U^ZH%q+Z]C0.Y3QWP-RVE*i?]crk2tfr-5;osgO\8f!5P - AIi((4lftqH,+9M^u'e<>+:1$:Q6(HLh4?O=h0;eHk9.t:2kih7*i5#N[bqX\L(!+P?.O?B - 0hOrENf2F$JFTpc9AnGd1r5+-qbXZUu:'6g`_%-NrK-1#=I!fH0571T/qUMc/Xc)<0mpAph - +et-LJ,i?V?=$rTD/Jj`:a5&=M>$Z:'"@^8.4ZpTZ*E8p-rs;HP`2r5ZL75@_fadZnTnJ&k - hN^iL5(GQ-<@6PV2fEG8`UrEDR>i]0lPr.aBtJKD^4 - #l!4Y@%7r2fn+TXch><=gL*4p&E,SNfK.mp%:)/:/"@BZn'r/ - n%UNho9=Ct-ZA[,o#W8J$g1=3M2mU^EOJDhi!07td8,?9aihm!nF5B.7'-(If1YR[G^)3G/ - SA^/75kurBP:e6mDtD7A`(kl^OQ:A_1ObMMj9Ee+gL3QF`gZnY59a+L(,(Y(S7+cbM;Aoac - [t@cB_c[p]1A6n:TW^dA)Bu5>kEYZZu"L:1j\b1Gb6/&0,b`1)h/O7CO#GGOM,uUEc[ldMH - ljd?Q4`r;HRS*=uo6W)4'I5*XK4$I#*5T"=?nGTVA+OljOF>F;\#0rKldi*b5NMe36D!!"# - ;.eot_4F#6-gRHY<;&1]b+L06C=0CU@6m7a(KYT>/k/NB"b[oJ'DqXh@PT)jer:>BCEoUf) - I3tf:Xf\_LAT5`+JHN%NP5taioQmRI\@@q%YqTV'"TH!r4[SW?!8nD$r.I;,f$Md*S=H\P+ - 'U-EQ'IV+l#8sU!jaK@$IYC5-Y\3,,>hT$#=]^j2q;L3T[kYYqZ.or`JD?/R@ - mlb:W[VXV@]N=Lfm8pGqfsYa%BP=?&M[OUF?uF)(_V - ^p.R"?ukdNb9R2WAQRl?G1ZM6K#.\bJoJY_sFoJNfK,tmT<>i9MA,>%0Zk;-o>V%YPe=rR, - ]<;-EK.[3.4H_Ao#i[8.O_dY)T=]cF*h\;C7$OMg=k7q]5"]@f<8O'1h[G - uDoTf:QS2]HU2N2hdtpELeu`.D6:,?f3'GmOq<+B:nj?Yj@3IGTPJrFr.mIj%779NtX/<(4 - c-=MM4,2Yu!5S-k#/@>)$D*fZ*>9+HlKZNkV+6:N*U:$7mHs<=l(=B3R7[n5Y$JZ,*E.9P5 - n,4NJ,AWB'LM0Qm$Ldp@r?0j?=)K(#O'ZHY(T.n/M4/3]@I5)-.)+0pH/?sT/gs^GfLBn!! - #"X2hI[UUIU@nVZd;1F"6J;c[Yr#Pc!>alRc^9OcbbuN6/G@e!M-`$k-+0@p5k7Y26j=2fo - "]D@-^XUbp>gfLt(Mqe`0b81_p)?HPCSBA6C3h<$u!W2PLo817u(*JCZ$0`D>KT:=3Ye - u$g"]j:.a[`X^W8#.tcmbBfGc$=S[e^i;$4ZK1_S(c-3NF2AVq=DRK%)EGSJ3ulsqt]EI[; - C-4RPfj2+',,1Y2\I#32NTF>kd:Kj2^TUm``-+mHsAt\Ke,%)I\*j%Lrt+2)Q"NXKSgWl`I - Ym?m\E05QJPU.8Ol*FNu21bf4R]KS5#7h<(S9e^`3UEt2b>+]YG:V$X4/_%-NrK-1"R4?R- - W^X1>(qV0ZTfXeXT-0eCMaiWM+VBYP203P`")8E_9$Ps/L]qV7\q<+C5pLipL\^DF6BP;@* - E\]R4:J",ToV]IM55U:GR`&FDAG,6 - *+WY:lpcV3'04r]!#mNh&[!"e/]29F8PZJfsNq:EcNqA1^a\L)`MY* - DfNdU)9`l.U,Uns2/]07V?-_??iIpGPe"RPJ - fb!V3I^I=GB\Q/k`N=@FpicFFbYQ.hgG%DV+Ulj91hh9PkJAFQD7VHZ*nDt.V=TROcbb]Q? - <-*qsPtkMspGaC*kg6$heu]T)s5qUtb:Loge[<-*?@%MI)&^X6J'$!]DT.JJ"U, - '*Sii,i#aFN[$O\n3hG!J+C%I^Z_(R)\7;U(fi(?U6jE9VWl-j'L@Eb?M&c;Voch3pgVaBq - BNAo_8b0#lk.I?@!rVQNk7\-'>[+]2YJh(D$Ats)N%M"sdD7XlUCOpe>c@a@K%2$4YecJo'u7,NfHk-9;D$VW - 2OBGD!^kK,lP'GV5:&dL5lPQ4$NW8dfg*p:kn3l"YkX:AS!1LG-U_/S"%lnRZf*p8m)URWh - trCPEYtDr='/DpoPe9!J$d%#=&&-'c?ku`f;(OET9O2;=ZoIlg*kDHgN[c>q30mc-j&bnF1 - CG]3SQD>DIlbCu2i#kg?/I]RKeKa,3VNDr*#r/5/i8O,].lp%9&?=mSc#lFXa4!FfMI12Ya - PSND%1Fdoe>CY,_7H@#._qtT34[;B*g/8:)l64JA1S*=gE])Z.LY=& - c;Voch6&NVa;mW?uthq6-;2c/n*7tN/S1fNLZ`mA3=WTABj250fCquZEg3@0QcO*6% - ]@J%sr'`i\GDn8RMD?_STd)PURP0CrjoIV@Y9>#Msh%m\Q_Tf\>-g.Ibid;qb8BKRB9Q9Dm - ^<@BA4)K?@'ZHr`W(!rtJ3,ku*HXH\U\i7F7)\N*s76:+"J@U]r`'2qh..1Lb#h08noa$1% - U55b**?[qXg-hHNI(V!a(?14q&]ddMk(G/f9WXl]3iJ/Mt-sYW/^Olb%*]Iull`\)&rql/& - gU8[c/WC8(h`Di>FD0!l4mU_'%h/s_(&=HeHp0jQFu*4&>S47kGb^J - <`mf;4:Si!07.%`(qnn%SZop:tS%\lIAi:f'ZJUs?)-ed;.B$Hd@lQYDO1$_-mR0\7]EH/8l<2m%'k&8St2adh - aQBi;;C\m9,Jfb!V3I^H:2/8A7D:eW0n1upZc-O^KNbr?=V8*WhDF),qK).1]65d@^gG71cZaAKd<0G),s:sb/R,[I\h*XgquB".+o$0p)&_, - We>1#B?at'KhbFE$n%JI!>$?TDfl)M8W-e8%\om=>5X9k&9C/&Z_69X*GJ@e_ShG[;!9cFl - n/FB.Ul6CRB$[&#lB>HY)?f$n!P>>2WY3%8)q30-6W6o^"kH5\YJ8=pEH6(\FQeh%)LKuhg - `.CXDdm1MlZ0U9./7q,DI@*mCTHdt["dKD!.%CA_/JSdV1LnP"dh#S7U]`!'#XT>?[VBt^` - =g_k0072=jF0?9he@Ba,ehpAcH=PA/#n!=]&$>[RL_OS2oWmkGRXWru]DB$3e2)c@sF*]qa - m+[=dBB!.%CA_6:#Em[J./#n7>$2`DQGOY29INt6A#M1O3MZEc54-:WcE:REipaH7^i#N\[f6XeYkc,9?XJD]DBFkSd#B''Z-h*SFq/Re_8`GS=JB$hduRe9Hs64 - J3KadB522(q&jg"EI%'3Ja*YXBiflcuAX@dB - Ts]kK]Wn<7X#$hS"8[c'gL^YOXV]`/)pme>T;ocANh?!J$al.4H,mCm_cD\V2SHAnH.MiD0 - `US5<0ao_[PGhTsN/q2J]:2`E\,-D!GO?I>B2Un]I&NZC3Y:7XFbi'?D(*]\9%o&\%D$1rY - r'Wig=d?mi>;XQJ/',)$d?f+SI2Gp"4irV)OC21o8b^AH12u6q<@qm2A0Q?'lNHB%g1dS*B - 'bqHf[VYL(nI]*`Qn`*ZDr7_oJf,RLc$:`@560&OoGLb2Q52jp9VlfM%_jl%9L1aNi(sZ) - =14PXb68o95?#B$Qo\B4o7.XY^8H1M(279m$V@fJ@nF - Q70Lko0JIXPC'>&ePeN-0eqlga#Us8Mc-l/8^M]9Z2hMFOUE]#V\!psUO@*rph_BQ%gmYHP]^k>#/_g#^DD$OR6dT0N@ZJ,Ll^5JO.qLb9A&jlKKB$?7&G - uM.!!)WoJfasm!.^Y+n,iXj!72AbIK0?J!."^_%fcS05YiNt!<<*"kQqAVz4b;Mr!!!"l-P - 61U!!!#k"G.]q!!%P@5k"jU!!(@Z#^uaR!!%'g,AnSD - @6ZEhcI4kniMY3R83zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#kcMmp!BqI!~> +def + << /ShadingType 2 + /ColorSpace /DeviceRGB + /Coords [ 0 0 1 0 ] + /Extend [ true true ] + /Function CairoFunction + >> +shfill Q -0 g -BT -12 0 0 -12 55.384197 142.64661 Tm -/f-0-0 1 Tf -(Compute CCS)Tj --3.472168 -9.988122 Td -(Concatemer Removal)Tj --0.85498 -5.082911 Td -[(Convert BAM to F)55(AST)74(A)]TJ -ET +616.59 85.379 m 613.277 85.402 608.934 84.492 607.973 83.41 c 607.973 80.48 + 607.93 80.992 607.93 76.844 c 609.527 78.207 611.988 79.156 612.969 79.68 + c 614.434 79.766 614.773 80.41 620.371 79.516 c 621.281 77.582 620.641 +76.734 619.922 75.836 c 619.004 75.406 616.996 74.645 615.82 74.516 c 612.941 + 74.195 611.934 74.195 609.305 71.422 c 608.16 69.965 607.922 67.641 607.883 + 66.398 c 607.879 64.766 608.512 62.727 609.184 61.441 c 611.141 59.277 +615.023 57.82 619.191 57.82 c 620.652 57.82 622.129 57.969 623.621 58.262 + c 625.117 58.559 626.438 58.965 627.582 59.488 c 627.582 66.16 l 624.289 + 62.891 620.637 62.633 617.195 63.578 c 615.656 64.402 615.75 66.605 617.68 + 67.93 c 619.535 68.766 621.18 68.961 622.086 69.223 c 623.812 69.578 626.047 + 70.332 627.477 72.102 c 628.141 72.918 628.527 73.84 628.742 74.656 c 628.805 + 74.891 628.898 76.164 628.723 77.648 c 628.586 78.82 628.484 83.652 620.965 + 85.07 c f +674.203 85.57 m 670.891 85.59 666.547 84.68 665.582 83.598 c 665.582 80.672 + 665.539 81.18 665.539 77.031 c 667.141 78.395 669.602 79.348 670.582 79.871 + c 672.047 79.957 672.387 80.602 677.984 79.703 c 678.895 77.773 678.254 + 76.922 677.531 76.023 c 676.613 75.594 674.609 74.832 673.434 74.703 c +670.551 74.383 669.543 74.383 666.918 71.613 c 665.77 70.156 665.531 67.832 + 665.496 66.586 c 665.488 64.953 666.125 62.914 666.797 61.629 c 668.754 + 59.465 672.637 58.008 676.805 58.008 c 678.262 58.008 679.738 58.156 681.234 + 58.453 c 682.727 58.746 684.051 59.156 685.195 59.676 c 685.195 66.348 +l 681.902 63.078 678.25 62.82 674.809 63.766 c 673.27 64.59 673.363 66.793 + 675.293 68.117 c 677.145 68.953 678.789 69.148 679.699 69.41 c 681.426 +69.766 683.656 70.52 685.09 72.289 c 685.754 73.105 686.137 74.031 686.355 + 74.844 c 686.418 75.078 686.508 76.355 686.336 77.836 c 686.199 79.012 +686.098 83.84 678.578 85.262 c f +651.375 77.441 m 652.348 76.105 652.836 74.152 652.836 71.578 c 652.836 + 68.766 652.355 66.758 651.402 65.559 c 650.445 64.359 648.996 63.762 647.051 + 63.762 c 645.035 63.762 643.582 64.359 642.699 65.559 c 641.812 66.758 +641.367 68.766 641.367 71.578 c 641.367 74.254 641.828 76.234 642.75 77.52 + c 643.672 78.805 645.102 79.449 647.051 79.449 c 648.961 79.449 650.402 + 78.781 651.375 77.441 c 637.043 82.105 m 634.82 79.746 633.707 76.234 633.707 + 71.578 c 633.707 66.715 634.809 63.172 637.016 60.945 c 639.223 58.723 +642.566 57.609 647.051 57.609 c 651.531 57.609 654.902 58.75 657.16 61.023 + c 659.418 63.301 660.547 66.82 660.547 71.578 c 660.547 76.164 659.383 +79.656 657.055 82.055 c 654.727 84.453 651.391 85.652 647.051 85.652 c 642.602 + 85.652 639.266 84.469 637.043 82.105 c f +747.738 63.242 m 747.414 62.418 746.699 60.934 745.25 59.844 c 743.797 +58.754 741.793 57.965 740.82 57.762 c 739.852 57.562 736.211 57.562 734.715 + 57.562 c 731.832 57.562 724.121 58.023 721.852 65.074 c 721.852 65.074 +721.266 68.184 721.148 69.977 c 721.027 71.773 721.059 73.949 721.445 75.766 + c 721.832 77.586 722.352 79.48 723.387 80.875 c 724.418 82.266 725.27 83.254 + 726.5 83.953 c 727.727 84.652 729.023 85.113 730.211 85.309 c 731.398 85.504 + 732.902 85.516 734.051 85.496 c 735.199 85.473 736.648 85.203 737.656 84.973 + c 738.664 84.746 740.082 83.922 740.082 83.922 c 740.051 78.266 l 740.051 + 78.266 738.949 78.957 737.738 79.18 c 736.527 79.402 734.973 79.785 733.043 + 79.148 c 731.117 78.516 730.102 77.113 729.441 75.746 c 728.781 74.383 +729.074 72.23 729.117 68.77 c 729.164 65.312 733.434 63.906 736.039 63.906 + c 737.672 63.906 739.766 64.367 739.973 66.473 c 740.176 68.578 739.973 + 95.07 739.973 95.07 c 747.738 95.07 l h +747.738 63.242 m f +698.992 68.168 m 708.738 68.168 l 708.496 66.293 708 64.957 707.254 64.156 + c 706.508 63.355 705.402 62.957 703.945 62.957 c 701.164 62.957 699.516 + 64.695 698.992 68.168 c 716.453 73.121 m 699.047 73.121 l 699.707 76.77 + 702.156 78.594 706.395 78.594 c 707.68 78.594 708.938 78.41 710.172 78.047 + c 711.406 77.68 712.719 77.203 714.109 76.613 c 714.109 83.281 l 711.258 + 84.465 708.062 85.055 704.52 85.055 c 701.844 85.055 699.496 84.508 697.48 + 83.414 c 695.465 82.32 693.902 80.746 692.793 78.695 c 691.68 76.648 691.125 + 74.23 691.125 71.453 c 691.125 66.867 692.262 63.312 694.539 60.793 c 696.812 + 58.273 700.055 57.016 704.258 57.016 c 712.492 57.016 716.559 62.383 716.453 + 73.121 c f +593.711 58.531 8.027 26.277 re f +593.711 48.285 8.027 6.242 re f +585.09 47.898 m 591.113 47.898 l 570.18 94.258 l 564.633 94.258 l h +585.09 47.898 m f Q Q showpage %%Trailer diff --git a/docs/images/Isoseq_pipeline_metro.png b/docs/images/Isoseq_pipeline_metro.png index 7ddcf64..194e98f 100644 Binary files a/docs/images/Isoseq_pipeline_metro.png and b/docs/images/Isoseq_pipeline_metro.png differ diff --git a/docs/images/Isoseq_pipeline_metro.svg b/docs/images/Isoseq_pipeline_metro.svg index a6ad91c..92cbc11 100644 --- a/docs/images/Isoseq_pipeline_metro.svg +++ b/docs/images/Isoseq_pipeline_metro.svg @@ -5,11 +5,11 @@ version="1.1" id="svg2" xml:space="preserve" - width="988" - height="772" - viewBox="0 0 988 772" + width="1043.5732" + height="815.56598" + viewBox="0 0 1043.5732 815.56598" sodipodi:docname="Isoseq_pipeline_metro.svg" - inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + inkscape:version="1.4.2 (ebf0e94, 2025-05-08)" inkscape:export-filename="Isoseq_pipeline_metro.png" inkscape:export-xdpi="300" inkscape:export-ydpi="300" @@ -26,14 +26,14 @@ inkscape:pageopacity="0" inkscape:pagecheckerboard="1" showgrid="false" - inkscape:zoom="0.68237637" - inkscape:cx="220.55277" - inkscape:cy="433.04548" + inkscape:zoom="2.5795985" + inkscape:cx="661.34322" + inkscape:cy="344.43344" inkscape:current-layer="svg2" inkscape:showpageshadow="0" inkscape:deskcolor="#505050" inkscape:window-width="1920" - inkscape:window-height="1052" + inkscape:window-height="1112" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" />EntrypointisoseqEntrypointmapGene models cleaningTAMA collapseList files sampleTAMA filelistMerging annotationsTAMA mergeSamplesheetRemoving polyA tailsTAMA polyAcleanupMinimap2gtfReferenceAnnotationIndexinguLTRA indexSortgnu/sortfastaGenomePrimersfastaGene models cleanningTAMA collapseList files sampleTAMA filelistMerging annotationsTAMA mergebedIsoseqAnnotationsRemoving polyA tailsTAMA polyAcleanupCCScsvSamplesheetbampbibampbicsvSamplesheetfa.gzfa.gzUnzip readsgunzipPrimers RemovalLIMAisoseq3 refinebamtools convertMappinguLTRA alignMinimap2MappingfastaGenomeCompute CCSConcatemer RemovalConvert BAM to FASTA + id="path486-0" />uLTRA alignPrimers RemovalLIMACCSCompute CCSisoseq3 refineConcatemer Removalbamtools convertConvert BAM to FASTAcsvPrimersfastabedIsoseq annotations diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e4..0000000 Binary files a/docs/images/mqc_fastqc_adapter.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_counts.png b/docs/images/mqc_fastqc_counts.png deleted file mode 100755 index cb39ebb..0000000 Binary files a/docs/images/mqc_fastqc_counts.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf..0000000 Binary files a/docs/images/mqc_fastqc_quality.png and /dev/null differ diff --git a/docs/images/nf-core-isoseq_logo_dark.png b/docs/images/nf-core-isoseq_logo_dark.png index 5b19384..589441d 100644 Binary files a/docs/images/nf-core-isoseq_logo_dark.png and b/docs/images/nf-core-isoseq_logo_dark.png differ diff --git a/docs/images/nf-core-isoseq_logo_light.png b/docs/images/nf-core-isoseq_logo_light.png index fe45ef7..7a55ecb 100644 Binary files a/docs/images/nf-core-isoseq_logo_light.png and b/docs/images/nf-core-isoseq_logo_light.png differ diff --git a/docs/output.md b/docs/output.md index 22e28ee..1b262f8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -18,7 +18,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [GUNZIP](#gunzip) - Decompress FLNC fastas (uLTRA path only) - [ULTRA or MINIMAP2](#ultra-minimap2) - Map FLNCs on genome - [BIOPERL](#bioperl) - Remove spurious alignments (uLTRA path only, [Issue #11](https://github.com/ksahlin/ultra/issues/11)) -- [SAMTOOLS SORT](#samtools-sort) - Sort alignment and convert sam file into bam file - [TAMA FILE LIST](#tama-file-list) - Prepare list file for TAMA collapse - [TAMA COLLAPSE](#tama-collapse) - Clean gene models - [TAMA MERGE](#tama-merge) - Merge all annotations into one for each sample with TAMA merge @@ -126,36 +125,12 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [`MINIMAP2`](https://github.com/lh3/minimap2) or [`uLTRA`](https://github.com/ksahlin/ultra) aligns reads ont the genome. -### BIOPERL - -
-Output files - -- `06.3_PERL_BIOPERL/` - - `.chunk_filtered.sam`: The aligned reads with spurious alignments removed. - -
- -[BIOPERL](https://bioperl.org/) Some CIGAR string sometimes with a gap (N). This can happen when using GFF file converted to GTF file. See [Issue #11](https://github.com/ksahlin/ultra/issues/11) from uLTRA repo. - -### SAMTOOLS SORT - -
-Output files - -- `07_SAMTOOLS_SORT/` - - `.chunk_sorted.bam`: The sorted aligned reads. - -
- -[SAMTOOLS SORT](http://www.htslib.org/doc/samtools-sort.html) sort the aligned reads and convert the sam file in bam file. - ### TAMA COLLAPSE
Output files -- `08_GSTAMA_COLLAPSE/` +- `07_GSTAMA_COLLAPSE/` - `.chunk_collapsed.bed`: This is a bed12 format file containing the final collapsed version of your transcriptome - `.chunk_local_density_error.txt`: This file contains the log of filtering for local density error around the splice junctions - `.chunk_polya.txt`: This file contains the reads with potential poly A truncation @@ -175,8 +150,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d
Output files -- `09_GSTAMA_FILELIST/` +- `08_GSTAMA_FILELIST/` - `.tsv`: A tsv listing bed files to merge with TAMA merge + - `all_samples.tsv`: A tsv listing bed files from all samples to merge with TAMA merge
@@ -187,7 +163,7 @@ TAMA FILELIST is a home script for generating input file list for TAMA merge.
Output files -- `10_GSTAMA_MERGE/` +- `09_GSTAMA_MERGE/` - `.bed`: This is the main merged annotation file. - `_gene_report.txt`: This contains a report of the genes from the merged file. - `_merge.txt`: This contains a bed12 format file which shows the coordinates of each input transcript matched to the merged transcript ID. @@ -195,7 +171,7 @@ TAMA FILELIST is a home script for generating input file list for TAMA merge.
-[TAMA MERGE](https://github.com/GenomeRIK/tama/wiki/Tama-Merge) TAMA Merge is a tool that allows you to merge multiple transcriptomes while maintaining source information. +[TAMA MERGE](https://github.com/GenomeRIK/tama/wiki/Tama-Merge) TAMA Merge is a tool that allows you to merge multiple transcriptomes while maintaining source information. When there are two or more samples, output files corresponding to `all_samples` are also stored if `--tama_merge_all` parameter is set. ### MultiQC @@ -226,4 +202,4 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ
-[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +[Nextflow](https://docs.seqera.io/platform-cloud/reports/overview) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/docs/usage.md b/docs/usage.md index 6b92974..0df9083 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -9,9 +9,15 @@ This pipeline has been designed to analyse several samples or sequencing runs at the same time. It reads all samples from a samplesheet file and parallelizes computation for each of them. -Depending on your on data, you might not need to run the isoseq preprocessing. -This step can be skipped by setting the `--entrypoint` parameter to `map` and starting the analysis from the mapping step. -By default, the entrypoint is set to `isoseq` and the full pipeline is run. +Depending on your data, you might not need to run the full Iso-Seq preprocessing. +Every row of the samplesheet carries a `start_from` value declaring where that sample +enters the pipeline, so a single run can mix raw subreads with data that has already +been through CCS, LIMA or refine: + +- `ccs` — raw subreads; runs the full pipeline (CCS, LIMA, refine, mapping) +- `lima` — CCS consensuses; skips CCS generation +- `refine` — Full Length reads produced by LIMA; skips CCS and LIMA +- `mapping` — long reads in FASTA; skips Iso-Seq preprocessing entirely ### Samplesheet input @@ -24,32 +30,47 @@ Use `--input` parameter to specify its location. The samplesheet is a comma-separated file with 4 columns, and a header row as shown in the examples below. -| Column | Description | -| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. Spaces in sample names are automatically converted to underscores (`_`). | -| `bam` | Full path to isoseq subreads in `bam` format. | -| `pbi` | Full path to Pacbio index generated with [pbindex](https://github.com/pacificbiosciences/pbbam/). File's name must be compose of bam file name with the `.pbi` extension. | -| `reads` | Set of long reads to analyse in fasta format. The file must be gziped (.fa.gz). | +| Column | Description | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Sample name. Spaces in sample names are automatically converted to underscores (`_`). | +| `seq_data` | The path to the sequence file. A BAM file for subreads, Consensus Circular Sequences or Full Length sequences. A fasta file for long reads. | +| `pbi` | In case `seq_data` is a subreads BAM, the path to Pacbio index generated with [pbindex](https://github.com/pacificbiosciences/pbbam/). File's name must be composed of the bam file name with the `.pbi` extension. In the other cases, `none` | +| `start_from` | The value depends on the seq_data file. `ccs` for subreads, `lima` for ccs sequences, `refine` for Full Length data and `mapping` for long reads. | + +```csv +sample,seq_data,pbi,start_from +sample1,sample1.subreads.bam,sample1.subreads.bam.pbi,ccs +sample2,sample2.ccs.bam,none,lima +sample3,sample3.fl.primer_5p--primer_3p.bam,none,refine +sample4,sample4.long_reads.fa.gz,none,mapping +``` -Starting from `pbccs` (`isoseq` entrypoint), the columns `sample`, `bam`, `pbi` are mandatory. -The `reads` column must be set to `None`. +If multiple cells have been run for the same sample, the sample ID can be used several times in the samplesheet. Each dataset will be analysed in parallel and then merged with TAMA. -```console -sample,bam,pbi,reads -sample1,sample1.subreads.bam,sample1.subreads.bam.pbi,None -sample2,sample2.subreads.bam,sample2.subreads.bam.pbi,None +```csv +sample,seq_data,pbi,start_from +sample1,sample1_cell1.subreads.bam,sample1_cell1.subreads.bam.pbi,ccs +sample1,sample1_cell2.subreads.bam,sample1_cell2.subreads.bam.pbi,ccs +sample2,sample1.subreads.bam,sample2.subreads.bam.pbi,ccs ``` -If the `map` entrypoint is used, the `reads` column must be filled with a gzipped fasta file with long reads and `sample` must be set. -The `bam` and `pbi` columns have to be set to `None`. +Some example samplesheets can be found on the [github repository](https://github.com/nf-core/isoseq/tree/master/assets). -```console -sample,bam,pbi,reads -sample1,None,None,sample1.fa.gz -sample2,None,None,sample2.fa.gz -``` +### Migrating from version 2.0.0 -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +Version 3.0.0 redefines the samplesheet, so samplesheets written for 2.0.0 will not validate. + +| Version 2.0.0 | Version 3.0.0 | +| ------------------------------------------- | --------------------------------------- | +| `sample,bam,pbi,reads` | `sample,seq_data,pbi,start_from` | +| separate `bam` and `reads` columns | one `seq_data` column holding either | +| `None` placeholder | `none`, lower case, for an absent `pbi` | +| `--entrypoint isoseq` or `--entrypoint map` | a `start_from` value on every row | + +Two parameter changes also affect existing command lines: + +- `--chunk` has been split into `--chunk_ccs` and `--chunk_mapping`, controlling chunking of CCS generation and of mapping independently. +- `--max_cpus`, `--max_memory` and `--max_time` have been removed by the nf-core template. Set limits with the `resourceLimits` directive in a custom config instead. ### Primer file @@ -70,6 +91,10 @@ Use the --primers option to specify its location. --primers '[path to primers file]' ``` +The primer file is only used by `LIMA` and `isoseq refine`, so it is required whenever at +least one samplesheet row uses `start_from` `ccs`, `lima` or `refine`. If every row uses +`mapping`, neither step runs and `--primers` can be omitted. + ### Reference genome and annotation The reference genome sequence is mandatory and must be in `FASTA` format. @@ -88,14 +113,6 @@ Two aligners are available. The `uLTRA` aligner helps to detect small exons with --aligner '[ultra,minimap2]' ``` -### Entrypoint - -The mapping and the alignment analysis are agnostic to the kind long reads used. If your sequencing company provides pre-computed HiFi reads or you want to use nanopore sequences, you can skip the isoseq preprocessing and start the analysis from the mapping step. - -```console ---entrypoint 'map' -``` - ## Running the pipeline The typical command for running the pipeline is as follows: @@ -119,9 +136,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -:::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -::: +> [!WARNING] +> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/running/run-pipelines#configuring-pipelines), other infrastructural tweaks (such as output directories), or module arguments (args). The above pipeline run specified with a params file in yaml format: @@ -129,9 +145,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/isoseq -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -150,23 +166,21 @@ nextflow pull nf-core/isoseq ### Reproducibility -It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +It is a good idea to specify the pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/isoseq releases page](https://github.com/nf-core/isoseq/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. -To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. +To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -:::tip -If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. -::: +> [!TIP] +> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. ## Core Nextflow arguments -:::note -These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). -::: +> [!NOTE] +> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen) ### `-profile` @@ -174,16 +188,15 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +> [!IMPORTANT] +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer environment. - `test` - A profile with a complete configuration for automated testing @@ -197,11 +210,11 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `shifter` - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + - A generic configuration profile to be used with [Charliecloud](https://charliecloud.io/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `wave` - - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). + - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow `24.03.0-edge` or later). - `conda` - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. @@ -219,21 +232,21 @@ Specify the path to a specific config file (this is a core Nextflow command). Se ### Resource requests -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the pipeline steps, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher resources request (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. -To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. +To change the resource requests, please see the [max resources](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#set-max-resources) and [customise process resources](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#customize-process-resources) section of the nf-core website. ### Custom Containers -In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases, you may wish to change the container or conda environment used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However, in some cases the pipeline specified version maybe out of date. -To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. +To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#update-tool-versions) section of the nf-core website. ### Custom Tool Arguments A pipeline might not always support every possible argument or option of a particular tool used in pipeline. Fortunately, nf-core pipelines provide some freedom to users to insert additional parameters that the pipeline does not include by default. -To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. +To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/running/configuration/nextflow-for-your-system#modifying-tool-arguments) section of the nf-core website. ### nf-core/configs @@ -243,14 +256,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/main.nf b/main.nf old mode 100644 new mode 100755 index 92e8963..a32c602 --- a/main.nf +++ b/main.nf @@ -9,8 +9,6 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GENOME PARAMETER VALUES @@ -53,12 +51,14 @@ workflow NFCORE_ISOSEQ { // WORKFLOW: Run pipeline // ISOSEQ ( - samplesheet + samplesheet, + params.multiqc_config, + params.multiqc_logo, + params.multiqc_methods_description, + params.outdir, ) - emit: multiqc_report = ISOSEQ.out.multiqc_report // channel: /path/to/multiqc_report.html - } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -69,20 +69,22 @@ workflow NFCORE_ISOSEQ { workflow { main: - // // SUBWORKFLOW: Run initialisation tasks // PIPELINE_INITIALISATION ( params.version, - params.help, params.validate_params, params.monochrome_logs, args, params.outdir, - params.input + params.input, + params.help, + params.help_full, + params.show_hidden ) + // // WORKFLOW: Run main workflow // @@ -99,7 +101,6 @@ workflow { params.plaintext_email, params.outdir, params.monochrome_logs, - params.hook_url, NFCORE_ISOSEQ.out.multiqc_report ) } diff --git a/modules.json b/modules.json index 8d4d526..cbd5ced 100644 --- a/modules.json +++ b/modules.json @@ -7,72 +7,67 @@ "nf-core": { "bamtools/convert": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] - }, - "custom/dumpsoftwareversions": { - "branch": "master", - "git_sha": "82024cf6325d2ee194e7f056d841ecad2f6856e9", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "gnu/sort": { "branch": "master", - "git_sha": "a3cc42943548378b726610f45bb5a79ab3f0b633", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "gstama/collapse": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "ecace0debef350b6636ea603824ae16c1bb29a54", "installed_by": ["modules"] }, "gstama/merge": { "branch": "master", - "git_sha": "3528e946c9f19501d78cf0901d0b57e13e2f6860", + "git_sha": "ecace0debef350b6636ea603824ae16c1bb29a54", "installed_by": ["modules"] }, "gstama/polyacleanup": { "branch": "master", - "git_sha": "8684e27e1061f855822ecc77d5099bc08f858784", + "git_sha": "82450e2e06bc03df52e8adbe8886de25adb402ee", "installed_by": ["modules"] }, "gunzip": { "branch": "master", - "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", + "git_sha": "0902eac3012baaf4f9ab6513c8c55acc9353c96c", "installed_by": ["modules"] }, "isoseq/refine": { "branch": "master", - "git_sha": "8da47884cbd6c7a8d849f8cf53340511ab00df51", + "git_sha": "17bf175c37d61ae3ba8b1e0bd972f3f880327497", "installed_by": ["modules"] }, "lima": { "branch": "master", - "git_sha": "b20be35facfc5acdc1259f132ed79339d79e989f", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "minimap2/align": { "branch": "master", - "git_sha": "a33ef9475558c6b8da08c5f522ddaca1ec810306", + "git_sha": "135d883a43b1a2324b4112cd270cf22e20835533", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "fe9614c5d1d9820dae56a5e30a07ba336db45835", + "git_sha": "98403d15b0e50edae1f3fec5eae5e24982f1fade", "installed_by": ["modules"] }, "pbccs": { "branch": "master", - "git_sha": "8da47884cbd6c7a8d849f8cf53340511ab00df51", + "git_sha": "14fc45a90d03d4820e3f08fce68970b4499bba22", "installed_by": ["modules"] }, "ultra/align": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "69993a757b03f6fbc50b06b226c00b5083543574", "installed_by": ["modules"] }, "ultra/index": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "69993a757b03f6fbc50b06b226c00b5083543574", "installed_by": ["modules"] } } @@ -81,17 +76,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", + "git_sha": "a3fb7351b1fdb2b1de282b765816bbea190e86a8", "installed_by": ["subworkflows"] }, - "utils_nfvalidation_plugin": { + "utils_nfschema_plugin": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "a7b27fd25bfa8dcc07d299e88bd790585901a436", "installed_by": ["subworkflows"] } } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf deleted file mode 100644 index 787fe1b..0000000 --- a/modules/local/samplesheet_check.nf +++ /dev/null @@ -1,31 +0,0 @@ -process SAMPLESHEET_CHECK { - tag "$samplesheet" - label 'process_single' - - conda "conda-forge::python=3.8.3" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.8.3' : - 'biocontainers/python:3.8.3' }" - - input: - path samplesheet - - output: - path '*.csv' , emit: csv - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: // This script is bundled with the pipeline, in nf-core/isoseq/bin/ - """ - check_samplesheet.py \\ - $samplesheet \\ - samplesheet.valid.csv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS - """ -} diff --git a/modules/nf-core/bamtools/convert/environment.yml b/modules/nf-core/bamtools/convert/environment.yml index 1407c34..5ee3360 100644 --- a/modules/nf-core/bamtools/convert/environment.yml +++ b/modules/nf-core/bamtools/convert/environment.yml @@ -1,7 +1,7 @@ -name: bamtools_convert +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bamtools=2.5.2 diff --git a/modules/nf-core/bamtools/convert/main.nf b/modules/nf-core/bamtools/convert/main.nf index 71c3774..2fee0b7 100644 --- a/modules/nf-core/bamtools/convert/main.nf +++ b/modules/nf-core/bamtools/convert/main.nf @@ -3,38 +3,44 @@ process BAMTOOLS_CONVERT { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bamtools:2.5.2--hdcf5f25_2' : - 'biocontainers/bamtools:2.5.2--hdcf5f25_2' }" + 'quay.io/biocontainers/bamtools:2.5.2--hdcf5f25_2' }" input: tuple val(meta), path(bam) output: tuple val(meta), path("*.{bed,fasta,fastq,json,pileup,sam,yaml}"), emit: data - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('bamtools'), eval("bamtools --version | sed '2!d;s/bamtools //g'"), emit: versions_bamtools, topic: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def test = args ==~ /-format (bed|fasta|fastq|json|pileup|sam|yaml)/ - if ( test == false ) error "-format option must be provided in args. Possible values: bed fasta fastq json pileup sam yaml" - m = args =~ /-format ([a-z]+)/ - ext = m[0][1] + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + format_cmd = args ==~ /-format (bed|fasta|fastq|json|pileup|sam|yaml)/ + matched_format = args =~ /-format ([a-z]+)/ + extension = matched_format[0][1] + if ( format_cmd == false ) error "-format option must be provided in args. Possible values: bed fasta fastq json pileup sam yaml" """ bamtools \\ convert \\ $args \\ -in $bam \\ - -out ${prefix}.${ext} + -out ${prefix}.${extension} + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + format_cmd = args ==~ /-format (bed|fasta|fastq|json|pileup|sam|yaml)/ + matched_format = args =~ /-format ([a-z]+)/ + extension = matched_format[0][1] + if ( format_cmd == false ) error "-format option must be provided in args. Possible values: bed fasta fastq json pileup sam yaml" - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bamtools: \$( bamtools --version | grep -e 'bamtools' | sed 's/^.*bamtools //' ) - END_VERSIONS + """ + touch ${prefix}.${extension} """ } diff --git a/modules/nf-core/bamtools/convert/meta.yml b/modules/nf-core/bamtools/convert/meta.yml index 3cc8ae6..992f0ef 100644 --- a/modules/nf-core/bamtools/convert/meta.yml +++ b/modules/nf-core/bamtools/convert/meta.yml @@ -1,5 +1,6 @@ name: bamtools_convert -description: BamTools provides both a programmer's API and an end-user's toolkit for handling BAM files. +description: BamTools provides both a programmer's API and an end-user's toolkit for + handling BAM files. keywords: - bamtools - bamtools/convert @@ -19,31 +20,55 @@ tools: documentation: https://github.com/pezmaster31/bamtools/wiki tool_dev_url: http://github.com/pezmaster31/bamtools licence: ["MIT"] + identifier: biotools:bamtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.bam" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.bam" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - out: - type: file - description: The data in the asked format (bed, fasta, fastq, json, pileup, sam, yaml) - pattern: "*.{bed,fasta,fastq,json,pileup,sam,yaml}" + data: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{bed,fasta,fastq,json,pileup,sam,yaml}": + type: file + description: Output file + pattern: "*.{bed,fasta,fastq,json,pileup,sam,yaml}" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ + - edam: http://edamontology.org/format_3464 # JSON + - edam: http://edamontology.org/format_3750 # YAML + versions_bamtools: + - - "${task.process}": + type: string + description: The name of the process + - bamtools: + type: string + description: The name of the tool + - "bamtools --version | sed '2!d;s/bamtools //g'": + type: eval + description: The expression to obtain the version of the tool authors: - "@sguizard" maintainers: - "@sguizard" +topics: + versions: + - - "${task.process}": + type: string + description: The name of the process + - bamtools: + type: string + description: The name of the tool + - "bamtools --version | sed '2!d;s/bamtools //g'": + type: eval + description: The expression to obtain the version of the tool diff --git a/modules/nf-core/bamtools/convert/tests/main.nf.test b/modules/nf-core/bamtools/convert/tests/main.nf.test new file mode 100644 index 0000000..385288e --- /dev/null +++ b/modules/nf-core/bamtools/convert/tests/main.nf.test @@ -0,0 +1,233 @@ +nextflow_process { + + name "Test Process BAMTOOLS_CONVERT" + config "./nextflow.config" + script "../main.nf" + process "BAMTOOLS_CONVERT" + + tag "modules" + tag "modules_nfcore" + tag "bamtools" + tag "bamtools/convert" + + test("test_bamtools_convert_ext_error") { + when { + params { + module_args = "-format vcf" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.failed }, + { assert process.errorReport.contains("-format option must be provided in args. Possible values: bed fasta fastq json pileup sam yaml") } + ) + } + } + test("test_bamtools_convert_noext_error") { + when { + params { + module_args = "" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.failed }, + { assert process.errorReport.contains("-format option must be provided in args. Possible values: bed fasta fastq json pileup sam yaml") } + ) + } + } + test("test_bamtools_convert_bed") { + when { + params { + module_args = "-format bed" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("test_bamtools_convert_fasta") { + when { + params { + module_args = "-format fasta" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("test_bamtools_convert_fastq") { + when { + params { + module_args = "-format fastq" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("test_bamtools_convert_json") { + + + when { + params { + module_args = "-format json" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("test_bamtools_convert_pileup") { + + + when { + params { + module_args = "-format pileup" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("test_bamtools_convert_sam") { + + + when { + params { + module_args = "-format sam" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + test("test_bamtools_convert_yaml") { + when { + params { + module_args = "-format yaml" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_bamtools_convert_yaml - stub") { + when { + params { + module_args = "-format yaml" + } + process { + """ + input[0] = [ + [id:'test', single_end:false], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists:true) + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out, + process.out.versions.collect{path(it).yaml} + ).match() } + ) + } + } +} diff --git a/modules/nf-core/bamtools/convert/tests/main.nf.test.snap b/modules/nf-core/bamtools/convert/tests/main.nf.test.snap new file mode 100644 index 0000000..23f8062 --- /dev/null +++ b/modules/nf-core/bamtools/convert/tests/main.nf.test.snap @@ -0,0 +1,349 @@ +{ + "test_bamtools_convert_bed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,4e34cc15bf31e700f5f3a9f8fffb6c81" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,4e34cc15bf31e700f5f3a9f8fffb6c81" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + } + ], + "timestamp": "2026-03-11T18:52:31.973880179", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_bamtools_convert_pileup": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pileup:md5,e5a3cb4a3e1bf980a575fafce6a2826f" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.pileup:md5,e5a3cb4a3e1bf980a575fafce6a2826f" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + } + ], + "timestamp": "2026-03-11T18:53:23.017380988", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_bamtools_convert_yaml": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.yaml:md5,68b56f198da036fef33e150eb773dc3b" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.yaml:md5,68b56f198da036fef33e150eb773dc3b" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + } + ], + "timestamp": "2026-03-11T18:53:50.989109105", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_bamtools_convert_yaml - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.yaml:md5,68b56f198da036fef33e150eb773dc3b" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.yaml:md5,68b56f198da036fef33e150eb773dc3b" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + }, + [ + + ] + ], + "timestamp": "2026-03-11T18:54:05.904431089", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_bamtools_convert_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,52aeacf78571862b7e97c7d44ac8f827" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fasta:md5,52aeacf78571862b7e97c7d44ac8f827" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + } + ], + "timestamp": "2026-03-11T18:52:44.670839319", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_bamtools_convert_fastq": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastq:md5,e591c48daad2c56638e5d6f21f1f71c5" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastq:md5,e591c48daad2c56638e5d6f21f1f71c5" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + } + ], + "timestamp": "2026-03-11T18:52:56.91010697", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_bamtools_convert_json": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.json:md5,9c44279e6da864f30b52a79a14dcb2bd" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.json:md5,9c44279e6da864f30b52a79a14dcb2bd" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + } + ], + "timestamp": "2026-03-11T18:53:09.39949925", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test_bamtools_convert_sam": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sam:md5,6f559e53e1ea7ff3dc919c8c4695de96" + ] + ], + "1": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ], + "data": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sam:md5,6f559e53e1ea7ff3dc919c8c4695de96" + ] + ], + "versions_bamtools": [ + [ + "BAMTOOLS_CONVERT", + "bamtools", + "2.5.2" + ] + ] + } + ], + "timestamp": "2026-03-11T18:53:35.676586302", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/bamtools/convert/tests/nextflow.config b/modules/nf-core/bamtools/convert/tests/nextflow.config new file mode 100644 index 0000000..aff333e --- /dev/null +++ b/modules/nf-core/bamtools/convert/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: "BAMTOOLS_CONVERT" { + ext.args = params.module_args + } +} diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml deleted file mode 100644 index b48ced2..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: custom_dumpsoftwareversions -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::multiqc=1.20 diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf deleted file mode 100644 index 105f926..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ /dev/null @@ -1,24 +0,0 @@ -process CUSTOM_DUMPSOFTWAREVERSIONS { - label 'process_single' - - // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.20--pyhdfd78af_0' : - 'biocontainers/multiqc:1.20--pyhdfd78af_0' }" - - input: - path versions - - output: - path "software_versions.yml" , emit: yml - path "software_versions_mqc.yml", emit: mqc_yml - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - template 'dumpsoftwareversions.py' -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml deleted file mode 100644 index 5f15a5f..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ /dev/null @@ -1,37 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -name: custom_dumpsoftwareversions -description: Custom module used to dump software versions within the nf-core pipeline template -keywords: - - custom - - dump - - version -tools: - - custom: - description: Custom module used to dump software versions within the nf-core pipeline template - homepage: https://github.com/nf-core/tools - documentation: https://github.com/nf-core/tools - licence: ["MIT"] -input: - - versions: - type: file - description: YML file containing software versions - pattern: "*.yml" -output: - - yml: - type: file - description: Standard YML file containing software versions - pattern: "software_versions.yml" - - mqc_yml: - type: file - description: MultiQC custom content YML file containing software versions - pattern: "software_versions_mqc.yml" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@grst" -maintainers: - - "@drpatelh" - - "@grst" diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py deleted file mode 100644 index 9a493ac..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python - - -"""Provide functions to merge multiple versions.yml files.""" - -import yaml -import platform -from textwrap import dedent - - -def _make_versions_html(versions): - """Generate a tabular HTML output of all versions for MultiQC.""" - html = [ - dedent( - """\\ - - - - - - - - - - """ - ) - ] - for process, tmp_versions in sorted(versions.items()): - html.append("") - for i, (tool, version) in enumerate(sorted(tmp_versions.items())): - html.append( - dedent( - f"""\\ - - - - - - """ - ) - ) - html.append("") - html.append("
Process Name Software Version
{process if (i == 0) else ''}{tool}{version}
") - return "\\n".join(html) - - -def main(): - """Load all version files and generate merged output.""" - versions_this_module = {} - versions_this_module["${task.process}"] = { - "python": platform.python_version(), - "yaml": yaml.__version__, - } - - with open("$versions") as f: - versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module - - # aggregate versions by the module name (derived from fully-qualified process name) - versions_by_module = {} - for process, process_versions in versions_by_process.items(): - module = process.split(":")[-1] - try: - if versions_by_module[module] != process_versions: - raise AssertionError( - "We assume that software versions are the same between all modules. " - "If you see this error-message it means you discovered an edge-case " - "and should open an issue in nf-core/tools. " - ) - except KeyError: - versions_by_module[module] = process_versions - - versions_by_module["Workflow"] = { - "Nextflow": "$workflow.nextflow.version", - "$workflow.manifest.name": "$workflow.manifest.version", - } - - versions_mqc = { - "id": "software_versions", - "section_name": "${workflow.manifest.name} Software Versions", - "section_href": "https://github.com/${workflow.manifest.name}", - "plot_type": "html", - "description": "are collected at run time from the software output.", - "data": _make_versions_html(versions_by_module), - } - - with open("software_versions.yml", "w") as f: - yaml.dump(versions_by_module, f, default_flow_style=False) - with open("software_versions_mqc.yml", "w") as f: - yaml.dump(versions_mqc, f, default_flow_style=False) - - with open("versions.yml", "w") as f: - yaml.dump(versions_this_module, f, default_flow_style=False) - - -if __name__ == "__main__": - main() diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test deleted file mode 100644 index b1e1630..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test +++ /dev/null @@ -1,43 +0,0 @@ -nextflow_process { - - name "Test Process CUSTOM_DUMPSOFTWAREVERSIONS" - script "../main.nf" - process "CUSTOM_DUMPSOFTWAREVERSIONS" - tag "modules" - tag "modules_nfcore" - tag "custom" - tag "dumpsoftwareversions" - tag "custom/dumpsoftwareversions" - - test("Should run without failures") { - when { - process { - """ - def tool1_version = ''' - TOOL1: - tool1: 0.11.9 - '''.stripIndent() - - def tool2_version = ''' - TOOL2: - tool2: 1.9 - '''.stripIndent() - - input[0] = Channel.of(tool1_version, tool2_version).collectFile() - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - process.out.versions, - file(process.out.mqc_yml[0]).readLines()[0..10], - file(process.out.yml[0]).readLines()[0..7] - ).match() - } - ) - } - } -} diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap deleted file mode 100644 index 5f59a93..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap +++ /dev/null @@ -1,33 +0,0 @@ -{ - "Should run without failures": { - "content": [ - [ - "versions.yml:md5,76d454d92244589d32455833f7c1ba6d" - ], - [ - "data: \"\\n\\n \\n \\n \\n \\n \\n \\n \\n\\", - " \\n\\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n \\n \\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\", - " \\ \\n\\n\\n\\n\\n\\n \\n\\", - " \\ \\n \\n\\n\\n\\n\\", - " \\n\\n \\n \\n\\" - ], - [ - "CUSTOM_DUMPSOFTWAREVERSIONS:", - " python: 3.11.7", - " yaml: 5.4.1", - "TOOL1:", - " tool1: 0.11.9", - "TOOL2:", - " tool2: '1.9'", - "Workflow:" - ] - ], - "timestamp": "2024-01-09T23:01:18.710682" - } -} \ No newline at end of file diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml b/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml deleted file mode 100644 index 405aa24..0000000 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -custom/dumpsoftwareversions: - - modules/nf-core/custom/dumpsoftwareversions/** diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml deleted file mode 100644 index 1787b38..0000000 --- a/modules/nf-core/fastqc/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: fastqc -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test deleted file mode 100644 index 70edae4..0000000 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ /dev/null @@ -1,212 +0,0 @@ -nextflow_process { - - name "Test Process FASTQC" - script "../main.nf" - process "FASTQC" - - tag "modules" - tag "modules_nfcore" - tag "fastqc" - - test("sarscov2 single-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
Mon 2 Oct 2023
test.gz
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } - ) - } - } - - test("sarscov2 paired-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } - ) - } - } - - test("sarscov2 interleaved [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } - ) - } - } - - test("sarscov2 paired-end [bam]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } - ) - } - } - - test("sarscov2 multiple [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - { assert path(process.out.html[0][1][2]).text.contains("") }, - { assert path(process.out.html[0][1][3]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } - ) - } - } - - test("sarscov2 custom_prefix") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'mysample', single_end:true ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } - ) - } - } - - test("sarscov2 single-end [fastq] - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } - ) - } - } - -} diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap deleted file mode 100644 index 86f7c31..0000000 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ /dev/null @@ -1,88 +0,0 @@ -{ - "fastqc_versions_interleaved": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:40:07.293713" - }, - "fastqc_stub": { - "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:31:01.425198" - }, - "fastqc_versions_multiple": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:40:55.797907" - }, - "fastqc_versions_bam": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:40:26.795862" - }, - "fastqc_versions_single": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:39:27.043675" - }, - "fastqc_versions_paired": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:39:47.584191" - }, - "fastqc_versions_custom_prefix": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:41:14.576531" - } -} \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml deleted file mode 100644 index 7834294..0000000 --- a/modules/nf-core/fastqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastqc: - - modules/nf-core/fastqc/** diff --git a/modules/nf-core/gnu/sort/environment.yml b/modules/nf-core/gnu/sort/environment.yml index eb9b77e..0c4cd94 100644 --- a/modules/nf-core/gnu/sort/environment.yml +++ b/modules/nf-core/gnu/sort/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: gnu_sort channels: - conda-forge - bioconda - - defaults dependencies: - - conda-forge::coreutils=9.3 + - conda-forge::coreutils=9.5 diff --git a/modules/nf-core/gnu/sort/main.nf b/modules/nf-core/gnu/sort/main.nf index e116766..142ef14 100644 --- a/modules/nf-core/gnu/sort/main.nf +++ b/modules/nf-core/gnu/sort/main.nf @@ -3,16 +3,16 @@ process GNU_SORT { label "process_low" conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/coreutils:9.3': - 'biocontainers/coreutils:9.3' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/coreutils:9.5': + 'quay.io/biocontainers/coreutils:9.5' }" input: - tuple val(meta), path(input) + tuple val(meta), path(input), val(suffix) output: - tuple val(meta), file( "${output_file}" ) , emit: sorted - path "versions.yml" , emit: versions + tuple val(meta), path( "${output_file}" ) , emit: sorted + tuple val("${task.process}"), val('coreutils'), eval("sort --version |& sed '1!d ; s/sort (GNU coreutils) //'"), emit: versions_coreutils, topic: versions when: task.ext.when == null || task.ext.when @@ -20,32 +20,17 @@ process GNU_SORT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - suffix = task.ext.suffix ?: "${input.extension}" output_file = "${prefix}.${suffix}" - def VERSION = "9.3" // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. if ("$input" == "$output_file") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ sort ${args} ${input} > ${output_file} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - coreutils: $VERSION - END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - suffix = task.ext.suffix ?: "${input.extension}" output_file = "${prefix}.${suffix}" - def VERSION = "9.3" - if ("$input" == "$output_file") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ touch ${output_file} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - coreutils: $VERSION - END_VERSIONS """ } diff --git a/modules/nf-core/gnu/sort/meta.yml b/modules/nf-core/gnu/sort/meta.yml index 9d96175..0f07bde 100644 --- a/modules/nf-core/gnu/sort/meta.yml +++ b/modules/nf-core/gnu/sort/meta.yml @@ -3,38 +3,69 @@ description: | Writes a sorted concatenation of file/s keywords: - GNU + - coreutils - sort - merge compare tools: - - sort: - description: "Writes a sorted concatenation of file/s" - homepage: "https://github.com/vgl-hub/gfastats" - documentation: "https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html" + - gnu: + description: "The GNU Core Utilities are the basic file, shell and text manipulation + utilities of the GNU operating system. These are the core utilities which are + expected to exist on every operating system." + homepage: "https://www.gnu.org/software/coreutils/" + documentation: "https://www.gnu.org/software/coreutils/manual/html_node/index.html" + tool_dev_url: "https://git.savannah.gnu.org/cgit/coreutils.git" + doi: "10.5281/zenodo.581670" licence: ["GPL"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: Draft assembly file - pattern: "*.{txt,bed,interval,genome,bins}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Draft assembly file + pattern: "*.{txt,bed,interval,genome,bins}" + ontologies: [] + - suffix: + type: string + description: Output suffix output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - sorted: - type: file - description: The sorted txt file generated by sort - pattern: "*.{txt,bed,interval,genome,bins}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + sorted: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "${output_file}" + - "${output_file}": + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "${output_file}" + versions_coreutils: + - - ${task.process}: + type: string + description: The process the versions were collected from + - coreutils: + type: string + description: The tool name + - "sort --version |& sed '1!d ; s/sort (GNU coreutils) //'": + type: string + description: The command used to generate the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - coreutils: + type: string + description: The tool name + - "sort --version |& sed '1!d ; s/sort (GNU coreutils) //'": + type: string + description: The command used to generate the version of the tool authors: - "@DLBPointon" maintainers: diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test b/modules/nf-core/gnu/sort/tests/main.nf.test index e403018..738a1f9 100644 --- a/modules/nf-core/gnu/sort/tests/main.nf.test +++ b/modules/nf-core/gnu/sort/tests/main.nf.test @@ -10,16 +10,18 @@ nextflow_process { tag "gnu/sort" test("unsorted_genome_sort") { - config "./sort_simple_bed.config" when { + params { + gnu_sort_args = "-k1,1 -k2,2n" + } process { """ input[0] = [ - [id:'genome_test'], - file(params.test_data['generic']['unsorted_data']['unsorted_text']['genome_file'], - checkIfExists: true) - ] + [id:'genome_test'], + file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.genome', checkIfExists: true), + "genome.sorted" + ] """ } } @@ -27,26 +29,25 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot( - file(process.out.sorted[0][1]).name - ).match("genome_sort") - } + { assert snapshot(process.out).match() } ) } } test("unsorted_intervals_sort") { - config "./sort_simple_bed.config" + when { + params { + gnu_sort_args = "-k1,1 -k2,2n" + } process { """ input[0] = [ - [id:'test'], - file(params.test_data['generic']['unsorted_data']['unsorted_text']['intervals'], - checkIfExists: true) - ] + [id:'test'], + file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.bed', checkIfExists: true), + "bed.sorted" + ] """ } } @@ -54,27 +55,25 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot( - file(process.out.sorted[0][1]).name - ).match("interval_sort") - } + { assert snapshot(process.out).match() } ) } } test("unsorted_csv_sort") { - config "./sort_complex.config" when { + params { + gnu_sort_args = "-t ';' -g -k 1,1 -k 2,2" + } process { """ input[0] = [ - [id:'test'], - file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'], - checkIfExists: true) - ] + [id:'test'], + file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.csv', checkIfExists: true), + "csv.sorted" + ] """ } } @@ -82,28 +81,27 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, - { assert snapshot( - file(process.out.sorted[0][1]).name - ).match("csv_sort") - } + { assert snapshot(process.out).match() } ) } } test("unsorted_csv_sort_stub") { - config "./sort_complex.config" + options "-stub" when { + params { + gnu_sort_args = "-t ';' -g -k 1,1 -k 2,2" + } process { """ input[0] = [ - [id:'test'], - file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'], - checkIfExists: true) - ] + [id:'test'], + file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.csv', checkIfExists: true), + "csv.sorted" + ] """ } } @@ -111,7 +109,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test.snap b/modules/nf-core/gnu/sort/tests/main.nf.test.snap index 63891bc..1929dd2 100644 --- a/modules/nf-core/gnu/sort/tests/main.nf.test.snap +++ b/modules/nf-core/gnu/sort/tests/main.nf.test.snap @@ -7,40 +7,38 @@ { "id": "test" }, - "test.csv.sorted:md5,0b52d1b4c4a0c6e972c6f94aafd75a1d" + "test.csv.sorted:md5,797450743dae151378fa5b7a9b5f38cc" ] ], "1": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ], "sorted": [ [ { "id": "test" }, - "test.csv.sorted:md5,0b52d1b4c4a0c6e972c6f94aafd75a1d" + "test.csv.sorted:md5,797450743dae151378fa5b7a9b5f38cc" ] ], - "versions": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + "versions_coreutils": [ + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-14T11:13:44.714632791" - }, - "interval_sort": { - "content": [ - "test.bed.sorted" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.4" }, - "timestamp": "2024-06-14T11:13:37.962807086" + "timestamp": "2026-03-27T16:25:51.135939" }, "unsorted_csv_sort_stub": { "content": [ @@ -54,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ], "sorted": [ [ @@ -64,26 +66,20 @@ "test.csv.sorted:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + "versions_coreutils": [ + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2024-06-14T11:13:51.456258705" - }, - "csv_sort": { - "content": [ - "test.csv.sorted" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-14T11:13:44.725431761" + "timestamp": "2026-01-23T15:48:45.534463019" }, "unsorted_genome_sort": { "content": [ @@ -93,40 +89,38 @@ { "id": "genome_test" }, - "genome_test.bed.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048" + "genome_test.genome.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048" ] ], "1": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ], "sorted": [ [ { "id": "genome_test" }, - "genome_test.bed.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048" + "genome_test.genome.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048" ] ], - "versions": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + "versions_coreutils": [ + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "25.10.4" }, - "timestamp": "2024-06-14T11:13:31.041778719" - }, - "genome_sort": { - "content": [ - "genome_test.bed.sorted" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-14T11:13:31.060201722" + "timestamp": "2026-03-27T16:25:43.198666" }, "unsorted_intervals_sort": { "content": [ @@ -140,7 +134,11 @@ ] ], "1": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ], "sorted": [ [ @@ -150,15 +148,19 @@ "test.bed.sorted:md5,abbce903ef263d38b2f71856387799ab" ] ], - "versions": [ - "versions.yml:md5,dd412503ec9dd665203e083ea44326cb" + "versions_coreutils": [ + [ + "GNU_SORT", + "coreutils", + "9.5" + ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.3", + "nextflow": "25.04.8" }, - "timestamp": "2024-06-14T11:13:37.951397547" + "timestamp": "2026-01-23T15:48:11.626509684" } } \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/nextflow.config b/modules/nf-core/gnu/sort/tests/nextflow.config new file mode 100644 index 0000000..2d6d3ed --- /dev/null +++ b/modules/nf-core/gnu/sort/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GNU_SORT { + ext.args = params.gnu_sort_args + } +} diff --git a/modules/nf-core/gnu/sort/tests/sort_complex.config b/modules/nf-core/gnu/sort/tests/sort_complex.config deleted file mode 100644 index 103eaaf..0000000 --- a/modules/nf-core/gnu/sort/tests/sort_complex.config +++ /dev/null @@ -1,6 +0,0 @@ -process { - withName: GNU_SORT { - ext.args = { "-t ';' -g -k 1,1 -k 2,2" } - ext.suffix = { "csv.sorted" } - } -} \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/sort_simple_bed.config b/modules/nf-core/gnu/sort/tests/sort_simple_bed.config deleted file mode 100644 index d7d52e0..0000000 --- a/modules/nf-core/gnu/sort/tests/sort_simple_bed.config +++ /dev/null @@ -1,6 +0,0 @@ -process { - withName: GNU_SORT { - ext.args = { "-k1,1 -k2,2n" } - ext.suffix = { "bed.sorted" } - } -} \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/sort_simple_genome.config b/modules/nf-core/gnu/sort/tests/sort_simple_genome.config deleted file mode 100644 index 4dcec38..0000000 --- a/modules/nf-core/gnu/sort/tests/sort_simple_genome.config +++ /dev/null @@ -1,6 +0,0 @@ -process { - withName: GNU_SORT { - ext.args = { "-k1,1 -k2,2n" } - ext.suffix = { "genome.sorted" } - } -} \ No newline at end of file diff --git a/modules/nf-core/gnu/sort/tests/tags.yml b/modules/nf-core/gnu/sort/tests/tags.yml deleted file mode 100644 index ac40e37..0000000 --- a/modules/nf-core/gnu/sort/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gnu/sort: - - "modules/nf-core/gnu/sort/**" diff --git a/modules/nf-core/gstama/collapse/environment.yml b/modules/nf-core/gstama/collapse/environment.yml index 644bc6c..46813d0 100644 --- a/modules/nf-core/gstama/collapse/environment.yml +++ b/modules/nf-core/gstama/collapse/environment.yml @@ -1,7 +1,7 @@ -name: GSTAMA_COLLAPSE +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gs-tama=1.0.3 diff --git a/modules/nf-core/gstama/collapse/main.nf b/modules/nf-core/gstama/collapse/main.nf index ec3f955..a3e5592 100644 --- a/modules/nf-core/gstama/collapse/main.nf +++ b/modules/nf-core/gstama/collapse/main.nf @@ -3,9 +3,9 @@ process GSTAMA_COLLAPSE { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gs-tama:1.0.3--hdfd78af_0' : - 'biocontainers/gs-tama:1.0.3--hdfd78af_0' }" + 'quay.io/biocontainers/gs-tama:1.0.3--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -19,10 +19,9 @@ process GSTAMA_COLLAPSE { tuple val(meta), path("*_read.txt") , emit: read tuple val(meta), path("*_strand_check.txt") , emit: strand_check tuple val(meta), path("*_trans_report.txt") , emit: trans_report - path "versions.yml" , emit: versions - tuple val(meta), path("*_varcov.txt") , emit: varcov , optional: true tuple val(meta), path("*_variants.txt") , emit: variants, optional: true + tuple val("${task.process}"), val('gstama'), eval("tama_collapse.py -version | sed -n 's/tc_version_date_//p'"), emit: versions_gstama, topic: versions when: task.ext.when == null || task.ext.when @@ -32,14 +31,18 @@ process GSTAMA_COLLAPSE { def prefix = task.ext.prefix ?: "${meta.id}" """ tama_collapse.py \\ - -s $bam \\ - -f $fasta \\ + -s ${bam} \\ + -f ${fasta} \\ -p ${prefix} \\ - $args + ${args} + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gstama: \$( tama_collapse.py -version | grep 'tc_version_date_'|sed 's/tc_version_date_//g' ) - END_VERSIONS + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + touch ${prefix}_{collapsed,trans_read}.bed + touch ${prefix}_{local_density_error,polya,read}.txt + touch ${prefix}_{strand_check,trans_report,varcov,variants}.txt """ } diff --git a/modules/nf-core/gstama/collapse/meta.yml b/modules/nf-core/gstama/collapse/meta.yml index 209ba75..ce21b6c 100644 --- a/modules/nf-core/gstama/collapse/meta.yml +++ b/modules/nf-core/gstama/collapse/meta.yml @@ -1,4 +1,4 @@ -name: GSTAMA_COLLAPSE +name: gstama_collapse description: Collapse redundant transcript models in Iso-Seq data. keywords: - tama_collapse.py @@ -15,67 +15,166 @@ tools: documentation: https://github.com/GenomeRIK/tama/wiki tool_dev_url: https://github.com/sguizard/gs-tama doi: 10.1186/s12864-020-07123-7 - licence: GNU GPL3 + licence: + - "GNU GPL3" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - bam: - type: file - description: A sorted BAM or sam file of aligned reads - pattern: "*.{bam,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - bam: + type: file + description: A sorted BAM or sam file of aligned reads + pattern: "*.{bam,sam}" + ontologies: [] - fasta: type: file description: A fasta file of the genome used for the mapping pattern: "*.{fasta,fa}" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bed: - type: file - description: a bed12 format file containing the final collapsed version of your transcriptome - pattern: "*.bed" - - bed_trans_reads: - type: file - description: This file uses bed12 format to show the transcript model for each read based on the mapping prior to collapsing. This only contains the reads which were accepted according to the defined thresholds. You can use this file to see if there were any strange occurrences during collapsing. It also contains the relationships between reads and collapsed transcript models. The 1st subfield in the 4th column shows the final transcript ID and the 2nd subfield in the 4th column shows the read ID. If you used no_cap mode for collapsing there may be multiple lines for a single read. This happens when a 5' degraded read can match to multiple 5' longer transcript models. - pattern: "*_trans_read.bed" - - local_density_error: - type: file - description: This file contains the log of filtering for local density error around the splice junctions ("-lde") - pattern: "*_local_density_error.txt" - - polya: - type: file - description: This file contains the reads with potential poly A truncation. - pattern: "*_polya.txt" - - read: - type: file - description: This file contains information for all mapped reads from the input SAM/BAM file. It shows both accepted and discarded reads and should match the number of mapped reads in your SAM/BAM file - pattern: "*_read.txt" - - strand_check: - type: file - description: This file shows instances where the sam flag strand information contrasted the GMAP strand information. - pattern: "*_strand_check.txt" - - trans_report: - type: file - description: This file contains collapsing information for each transcript. - pattern: "*_trans_report.txt" - - varcov: - type: file - description: This file contains the coverage information for each variant detected. - pattern: "*_varcov.txt" - - variants: - type: file - description: This file contains the variants called. Variants are only called if 5 or more reads show the variant at a specific locus. If you would like to change the threshold, please make an issue about this in the Github repo. - pattern: "*_variants.txt" + bed: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_collapsed.bed": + type: file + description: a bed12 format file containing the final collapsed version + of your transcriptome + pattern: "*.bed" + ontologies: [] + bed_trans_reads: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_trans_read.bed": + type: file + description: This file uses bed12 format to show the transcript model + for each read based on the mapping prior to collapsing. This only + contains the reads which were accepted according to the defined + thresholds. You can use this file to see if there were any strange + occurrences during collapsing. It also contains the relationships + between reads and collapsed transcript models. The 1st subfield in the + 4th column shows the final transcript ID and the 2nd subfield in the + 4th column shows the read ID. If you used no_cap mode for collapsing + there may be multiple lines for a single read. This happens when a 5' + degraded read can match to multiple 5' longer transcript models. + pattern: "*_trans_read.bed" + ontologies: [] + local_density_error: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_local_density_error.txt": + type: file + description: This file contains the log of filtering for local density + error around the splice junctions ("-lde") + pattern: "*_local_density_error.txt" + ontologies: [] + polya: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_polya.txt": + type: file + description: This file contains the reads with potential poly A + truncation. + pattern: "*_polya.txt" + ontologies: [] + read: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_read.txt": + type: file + description: This file contains information for all mapped reads from + the input SAM/BAM file. It shows both accepted and discarded reads and + should match the number of mapped reads in your SAM/BAM file + pattern: "*_read.txt" + ontologies: [] + strand_check: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_strand_check.txt": + type: file + description: This file shows instances where the sam flag strand + information contrasted the GMAP strand information. + pattern: "*_strand_check.txt" + ontologies: [] + trans_report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_trans_report.txt": + type: file + description: This file contains collapsing information for each + transcript. + pattern: "*_trans_report.txt" + ontologies: [] + varcov: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_varcov.txt": + type: file + description: This file contains the coverage information for each + variant detected. + pattern: "*_varcov.txt" + ontologies: [] + variants: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_variants.txt": + type: file + description: This file contains the variants called. Variants are only + called if 5 or more reads show the variant at a specific locus. If you + would like to change the threshold, please make an issue about this in + the Github repo. + pattern: "*_variants.txt" + ontologies: [] + versions_gstama: + - - ${task.process}: + type: string + description: The name of the process + - gstama: + type: string + description: The name of the tool + - tama_collapse.py -version | sed -n 's/tc_version_date_//p': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - gstama: + type: string + description: The name of the tool + - tama_collapse.py -version | sed -n 's/tc_version_date_//p': + type: eval + description: The expression to obtain the version of the tool authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/gstama/collapse/tests/main.nf.test b/modules/nf-core/gstama/collapse/tests/main.nf.test new file mode 100644 index 0000000..9adc6fd --- /dev/null +++ b/modules/nf-core/gstama/collapse/tests/main.nf.test @@ -0,0 +1,58 @@ + +nextflow_process { + + name "Test Process GSTAMA_COLLAPSE" + script "../main.nf" + process "GSTAMA_COLLAPSE" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "gstama" + tag "gstama/collapse" + + test("test-gstama-collapse") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/alz.ccs.fl.NEB_5p--NEB_Clontech_3p.flnc.clustered.singletons.merged.aligned.bam', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome2.fasta', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("test-gstama-collapse -- stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/alz.ccs.fl.NEB_5p--NEB_Clontech_3p.flnc.clustered.singletons.merged.aligned.bam', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome2.fasta', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + +} diff --git a/modules/nf-core/gstama/collapse/tests/main.nf.test.snap b/modules/nf-core/gstama/collapse/tests/main.nf.test.snap new file mode 100644 index 0000000..53773b2 --- /dev/null +++ b/modules/nf-core/gstama/collapse/tests/main.nf.test.snap @@ -0,0 +1,182 @@ +{ + "test-gstama-collapse -- stub": { + "content": [ + { + "bed": [ + [ + { + "id": "test" + }, + "test_tc_collapsed.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bed_trans_reads": [ + [ + { + "id": "test" + }, + "test_tc_trans_read.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "local_density_error": [ + [ + { + "id": "test" + }, + "test_tc_local_density_error.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "polya": [ + [ + { + "id": "test" + }, + "test_tc_polya.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "read": [ + [ + { + "id": "test" + }, + "test_tc_read.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "strand_check": [ + [ + { + "id": "test" + }, + "test_tc_strand_check.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trans_report": [ + [ + { + "id": "test" + }, + "test_tc_trans_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "varcov": [ + [ + { + "id": "test" + }, + "test_tc_varcov.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "variants": [ + [ + { + "id": "test" + }, + "test_tc_variants.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_gstama": [ + [ + "GSTAMA_COLLAPSE", + "gstama", + "2021_11_03" + ] + ] + } + ], + "timestamp": "2026-05-11T22:55:53.631912293", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.03.2" + } + }, + "test-gstama-collapse": { + "content": [ + { + "bed": [ + [ + { + "id": "test" + }, + "test_tc_collapsed.bed:md5,e5105198ed970a33ae0ecaa7bff421d9" + ] + ], + "bed_trans_reads": [ + [ + { + "id": "test" + }, + "test_tc_trans_read.bed:md5,0ca1a32f33ef05242d897d913802554b" + ] + ], + "local_density_error": [ + [ + { + "id": "test" + }, + "test_tc_local_density_error.txt:md5,b917ac1f14eccd590b6881a686f324d5" + ] + ], + "polya": [ + [ + { + "id": "test" + }, + "test_tc_polya.txt:md5,628ea62b918fc4f31e109f724d714a66" + ] + ], + "read": [ + [ + { + "id": "test" + }, + "test_tc_read.txt:md5,d2685d7f24cd1611e0770a5ce25422fe" + ] + ], + "strand_check": [ + [ + { + "id": "test" + }, + "test_tc_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec" + ] + ], + "trans_report": [ + [ + { + "id": "test" + }, + "test_tc_trans_report.txt:md5,33a86c15ca2acce36b2a5962f4c1adc4" + ] + ], + "varcov": [ + [ + { + "id": "test" + }, + "test_tc_varcov.txt:md5,587fd899ff658eb66b1770a35283bfcb" + ] + ], + "variants": [ + [ + { + "id": "test" + }, + "test_tc_variants.txt:md5,5b1165e9f33faba4f7207013fc27257e" + ] + ], + "versions_gstama": [ + [ + "GSTAMA_COLLAPSE", + "gstama", + "2021_11_03" + ] + ] + } + ], + "timestamp": "2026-05-11T22:57:16.945475905", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.03.2" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/gstama/collapse/tests/nextflow.config b/modules/nf-core/gstama/collapse/tests/nextflow.config new file mode 100644 index 0000000..ea89a16 --- /dev/null +++ b/modules/nf-core/gstama/collapse/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: GSTAMA_COLLAPSE { + ext.args = '-x capped -b BAM' + ext.prefix = { "${meta.id}_tc" } + } +} diff --git a/modules/nf-core/gstama/merge/environment.yml b/modules/nf-core/gstama/merge/environment.yml index 44d5741..46813d0 100644 --- a/modules/nf-core/gstama/merge/environment.yml +++ b/modules/nf-core/gstama/merge/environment.yml @@ -1,7 +1,7 @@ -name: gstama_merge +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gs-tama=1.0.3 diff --git a/modules/nf-core/gstama/merge/main.nf b/modules/nf-core/gstama/merge/main.nf index 8b67c47..563e2ce 100644 --- a/modules/nf-core/gstama/merge/main.nf +++ b/modules/nf-core/gstama/merge/main.nf @@ -3,9 +3,9 @@ process GSTAMA_MERGE { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gs-tama:1.0.3--hdfd78af_0' : - 'biocontainers/gs-tama:1.0.3--hdfd78af_0' }" + 'quay.io/biocontainers/gs-tama:1.0.3--hdfd78af_0' }" input: tuple val(meta), path(bed) @@ -16,7 +16,7 @@ process GSTAMA_MERGE { tuple val(meta), path("*_gene_report.txt") , emit: gene_report tuple val(meta), path("*_merge.txt") , emit: merge tuple val(meta), path("*_trans_report.txt"), emit: trans_report - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('gstama'), eval("tama_merge.py -version | sed '1!d'"), emit: versions_gstama, topic: versions when: task.ext.when == null || task.ext.when @@ -26,14 +26,16 @@ process GSTAMA_MERGE { def prefix = task.ext.prefix ?: "${meta.id}" """ tama_merge.py \\ - -f $filelist \\ + -f ${filelist} \\ -d merge_dup \\ -p ${prefix} \\ - $args + ${args} + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gstama: \$( tama_merge.py -version | head -n1 ) - END_VERSIONS + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bed + touch ${prefix}_{gene_report,merge,trans_report}.txt """ } diff --git a/modules/nf-core/gstama/merge/meta.yml b/modules/nf-core/gstama/merge/meta.yml index adb2b32..694ad12 100644 --- a/modules/nf-core/gstama/merge/meta.yml +++ b/modules/nf-core/gstama/merge/meta.yml @@ -16,43 +16,106 @@ tools: documentation: https://github.com/GenomeRIK/tama/wiki tool_dev_url: https://github.com/sguizard/gs-tama doi: "10.1186/s12864-020-07123-7" - licence: ["GPL v3 License"] + licence: + - "GPL v3 License" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bed: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: bed12 file generated by TAMA collapse + pattern: "*.bed" + ontologies: [] + - filelist: type: file - description: bed12 file generated by TAMA collapse - pattern: "*.bed" + description: list of files + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - bed: - type: file - description: This is the main merged annotation file. Transcripts are coloured according to the source support for each model. Sources are numbered based on the order supplied in the input filelist file. For example the first file named in the filelist file would have its transcripts coloured in red. If a transcript has multiple sources the colour is shown as magenta. - pattern: "*.bed" - - gene_report: - type: file - description: This contains a report of the genes from the merged file. "num_clusters" refers to the number of source transcripts that were used to make this gene model. "num_final_trans" refers to the number of transcripts in the final gene model. - pattern: "*_gene_report.txt" - - merge: - type: file - description: This contains a bed12 format file which shows the coordinates of each input transcript matched to the merged transcript ID. I used the "txt" extension even though it is a bed file just to avoid confusion with the main bed file. You can use this file to map the final merged transcript models to their pre-merged supporting transcripts. The 1st subfield in the 4th column shows the final merged transcript ID while the 2nd subfield shows the pre-merged transcript ID with source prefix. - pattern: "*_merge.txt" - - trans_report: - type: file - description: This contains the source information for each merged transcript. - pattern: "*_trans_report.txt" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + bed: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.bed": + type: file + description: This is the main merged annotation file. Transcripts are + coloured according to the source support for each model. Sources are + numbered based on the order supplied in the input filelist file. For + example the first file named in the filelist file would have its + transcripts coloured in red. If a transcript has multiple sources the + colour is shown as magenta. + pattern: "*.bed" + ontologies: [] + gene_report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_gene_report.txt": + type: file + description: This contains a report of the genes from the merged file. + "num_clusters" refers to the number of source transcripts that were + used to make this gene model. "num_final_trans" refers to the number + of transcripts in the final gene model. + pattern: "*_gene_report.txt" + ontologies: [] + merge: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_merge.txt": + type: file + description: This contains a bed12 format file which shows the + coordinates of each input transcript matched to the merged transcript + ID. I used the "txt" extension even though it is a bed file just to + avoid confusion with the main bed file. You can use this file to map + the final merged transcript models to their pre-merged supporting + transcripts. The 1st subfield in the 4th column shows the final merged + transcript ID while the 2nd subfield shows the pre-merged transcript + ID with source prefix. + pattern: "*_merge.txt" + ontologies: [] + trans_report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_trans_report.txt": + type: file + description: This contains the source information for each merged + transcript. + pattern: "*_trans_report.txt" + ontologies: [] + versions_gstama: + - - ${task.process}: + type: string + description: The name of the process + - gstama: + type: string + description: The name of the tool + - tama_merge.py -version | sed '1!d': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - gstama: + type: string + description: The name of the tool + - tama_merge.py -version | sed '1!d': + type: eval + description: The expression to obtain the version of the tool authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/gstama/merge/tests/main.nf.test b/modules/nf-core/gstama/merge/tests/main.nf.test new file mode 100644 index 0000000..1741417 --- /dev/null +++ b/modules/nf-core/gstama/merge/tests/main.nf.test @@ -0,0 +1,63 @@ + +nextflow_process { + + name "Test Process GSTAMA_MERGE" + script "../main.nf" + process "GSTAMA_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "gstama" + tag "gstama/merge" + + test("test-gstama-merge") { + + when { + process { + """ + input[0] = [ + [ id:'test_all' ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bed/alz.ccs.fl.NEB_5p--NEB_Clontech_3p.flnc.clustered.singletons.merged.aligned_tc.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bed/alz.ccs.fl.NEB_5p--NEB_Clontech_3p.flnc.clustered.singletons.merged.aligned_tc.2.bed', checkIfExists: true) + ] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/txt/filelist.txt', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("test-gstama-merge -- stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test_all' ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bed/alz.ccs.fl.NEB_5p--NEB_Clontech_3p.flnc.clustered.singletons.merged.aligned_tc.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bed/alz.ccs.fl.NEB_5p--NEB_Clontech_3p.flnc.clustered.singletons.merged.aligned_tc.2.bed', checkIfExists: true) + ] + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/txt/filelist.txt', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + +} diff --git a/modules/nf-core/gstama/merge/tests/main.nf.test.snap b/modules/nf-core/gstama/merge/tests/main.nf.test.snap new file mode 100644 index 0000000..856f083 --- /dev/null +++ b/modules/nf-core/gstama/merge/tests/main.nf.test.snap @@ -0,0 +1,102 @@ +{ + "test-gstama-merge -- stub": { + "content": [ + { + "bed": [ + [ + { + "id": "test_all" + }, + "test_all.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gene_report": [ + [ + { + "id": "test_all" + }, + "test_all_gene_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "merge": [ + [ + { + "id": "test_all" + }, + "test_all_merge.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "trans_report": [ + [ + { + "id": "test_all" + }, + "test_all_trans_report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_gstama": [ + [ + "GSTAMA_MERGE", + "gstama", + "0.0.1" + ] + ] + } + ], + "timestamp": "2026-05-11T23:14:32.80541933", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.03.2" + } + }, + "test-gstama-merge": { + "content": [ + { + "bed": [ + [ + { + "id": "test_all" + }, + "test_all.bed:md5,60ec34e1ff9655d4ce2e83d3f4bbf448" + ] + ], + "gene_report": [ + [ + { + "id": "test_all" + }, + "test_all_gene_report.txt:md5,7029fd183dfd905a233403cfbe44722a" + ] + ], + "merge": [ + [ + { + "id": "test_all" + }, + "test_all_merge.txt:md5,4279e59ed5739ce4f2f811568962893f" + ] + ], + "trans_report": [ + [ + { + "id": "test_all" + }, + "test_all_trans_report.txt:md5,97d8346d9eb9da140941656c3a3325cd" + ] + ], + "versions_gstama": [ + [ + "GSTAMA_MERGE", + "gstama", + "0.0.1" + ] + ] + } + ], + "timestamp": "2026-05-11T23:14:24.624282272", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.03.2" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/gstama/polyacleanup/environment.yml b/modules/nf-core/gstama/polyacleanup/environment.yml index 7c143ff..46813d0 100644 --- a/modules/nf-core/gstama/polyacleanup/environment.yml +++ b/modules/nf-core/gstama/polyacleanup/environment.yml @@ -1,7 +1,7 @@ -name: gstama_polyacleanup +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gs-tama=1.0.3 diff --git a/modules/nf-core/gstama/polyacleanup/main.nf b/modules/nf-core/gstama/polyacleanup/main.nf index db2ed2b..525c573 100644 --- a/modules/nf-core/gstama/polyacleanup/main.nf +++ b/modules/nf-core/gstama/polyacleanup/main.nf @@ -3,38 +3,42 @@ process GSTAMA_POLYACLEANUP { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gs-tama:1.0.3--hdfd78af_0': - 'biocontainers/gs-tama:1.0.3--hdfd78af_0' }" + 'quay.io/biocontainers/gs-tama:1.0.3--hdfd78af_0' }" input: tuple val(meta), path(fasta) output: - tuple val(meta), path("*_tama.fa.gz") , emit: fasta - tuple val(meta), path("*_tama_polya_flnc_report.txt.gz"), emit: report - tuple val(meta), path("*_tama_tails.fa.gz") , emit: tails - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}.fa.gz") , emit: fasta + tuple val(meta), path("${prefix}_polya_flnc_report.txt.gz"), emit: report + tuple val(meta), path("${prefix}_tails.fa.gz") , emit: tails + tuple val("${task.process}"), val('gstama'), eval("tama_collapse.py -version | sed -n 's/tc_version_date_//p'"), emit: versions_gstama, topic: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" if( "$fasta" == "${prefix}.fasta" | "$fasta" == "${prefix}.fa" ) error "Input and output names are the same, set prefix in module configuration" """ tama_flnc_polya_cleanup.py \\ -f $fasta \\ -p ${prefix} \\ $args + gzip ${prefix}.fa gzip ${prefix}_polya_flnc_report.txt gzip ${prefix}_tails.fa + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gstama: \$( tama_collapse.py -version | grep 'tc_version_date_'|sed 's/tc_version_date_//g' ) - END_VERSIONS + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.fa.gz + echo "" | gzip > ${prefix}_polya_flnc_report.txt.gz + echo "" | gzip > ${prefix}_tails.fa.gz """ } diff --git a/modules/nf-core/gstama/polyacleanup/meta.yml b/modules/nf-core/gstama/polyacleanup/meta.yml index d8d1754..230613e 100644 --- a/modules/nf-core/gstama/polyacleanup/meta.yml +++ b/modules/nf-core/gstama/polyacleanup/meta.yml @@ -1,5 +1,6 @@ name: gstama_polyacleanup -description: Helper script, remove remaining polyA sequences from Full Length Non Chimeric reads (Pacbio isoseq3) +description: Helper script, remove remaining polyA sequences from Full Length + Non Chimeric reads (Pacbio isoseq3) keywords: - gstama - gstama/polyacleanup @@ -15,39 +16,80 @@ tools: documentation: https://github.com/GenomeRIK/tama/wiki tool_dev_url: https://github.com/sguizard/gs-tama doi: "10.1186/s12864-020-07123-7" - licence: ["GPL v3 License"] + licence: + - "GPL v3 License" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Full Length Non Chimeric reads in fasta format - pattern: "*.{fa,fasta}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Full Length Non Chimeric reads in fasta format + pattern: "*.{fa,fasta}" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - fasta: - type: file - description: The Full Length Non Chimeric reads clened from remaining polyA tails. The sequences are in FASTA format compressed with gzip. - pattern: "*_tama.fa.gz" - - report: - type: file - description: A text file describing the number of polyA tails removed and their length. Compressed with gzip. - pattern: "*_tama_polya_flnc_report.txt.gz" - - tails: - type: file - description: A gzip compressed FASTA file of trimmed polyA tails. - pattern: "*_tama_tails.fa.gz" + fasta: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}.fa.gz": + type: file + description: The Full Length Non Chimeric reads cleaned from remaining + polyA tails. The sequences are in FASTA format compressed with gzip. + pattern: "*.fa.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}_polya_flnc_report.txt.gz": + type: file + description: A text file describing the number of polyA tails removed + and their length. Compressed with gzip. + pattern: "*_polya_flnc_report.txt.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP + tails: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "${prefix}_tails.fa.gz": + type: file + description: A gzip compressed FASTA file of trimmed polyA tails. + pattern: "*_tails.fa.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP + versions_gstama: + - - ${task.process}: + type: string + description: The name of the process + - gstama: + type: string + description: The name of the tool + - tama_collapse.py -version | sed -n 's/tc_version_date_//p': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - gstama: + type: string + description: The name of the tool + - tama_collapse.py -version | sed -n 's/tc_version_date_//p': + type: eval + description: The expression to obtain the version of the tool authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/gstama/polyacleanup/tests/main.nf.test b/modules/nf-core/gstama/polyacleanup/tests/main.nf.test new file mode 100644 index 0000000..6296b10 --- /dev/null +++ b/modules/nf-core/gstama/polyacleanup/tests/main.nf.test @@ -0,0 +1,55 @@ + +nextflow_process { + + name "Test Process GSTAMA_POLYACLEANUP" + script "../main.nf" + process "GSTAMA_POLYACLEANUP" + + tag "modules" + tag "modules_nfcore" + tag "gstama" + tag "gstama/polyacleanup" + + test("test-gstama-polyacleanup") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/transcriptome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("test-gstama-polyacleanup -- stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/transcriptome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + +} diff --git a/modules/nf-core/gstama/polyacleanup/tests/main.nf.test.snap b/modules/nf-core/gstama/polyacleanup/tests/main.nf.test.snap new file mode 100644 index 0000000..7adfc42 --- /dev/null +++ b/modules/nf-core/gstama/polyacleanup/tests/main.nf.test.snap @@ -0,0 +1,86 @@ +{ + "test-gstama-polyacleanup": { + "content": [ + { + "fasta": [ + [ + { + "id": "test" + }, + "test.fa.gz:md5,f0a2c3ca8f19d2197c6b5b273093ebf0" + ] + ], + "report": [ + [ + { + "id": "test" + }, + "test_polya_flnc_report.txt.gz:md5,83ba9d11a59ff516f45dd45c78613206" + ] + ], + "tails": [ + [ + { + "id": "test" + }, + "test_tails.fa.gz:md5,20a02db3d29cc45b39880e1ad5ee243b" + ] + ], + "versions_gstama": [ + [ + "GSTAMA_POLYACLEANUP", + "gstama", + "2021_11_03" + ] + ] + } + ], + "timestamp": "2026-07-29T15:42:39.619928488", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "test-gstama-polyacleanup -- stub": { + "content": [ + { + "fasta": [ + [ + { + "id": "test" + }, + "test.fa.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "report": [ + [ + { + "id": "test" + }, + "test_polya_flnc_report.txt.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "tails": [ + [ + { + "id": "test" + }, + "test_tails.fa.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions_gstama": [ + [ + "GSTAMA_POLYACLEANUP", + "gstama", + "2021_11_03" + ] + ] + } + ], + "timestamp": "2026-07-29T15:42:48.519457766", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml index dfc02a7..9b926b1 100644 --- a/modules/nf-core/gunzip/environment.yml +++ b/modules/nf-core/gunzip/environment.yml @@ -1,9 +1,12 @@ -name: gunzip +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: + - conda-forge::coreutils=9.5 - conda-forge::grep=3.11 + - conda-forge::gzip=1.13 + - conda-forge::lbzip2=2.5 - conda-forge::sed=4.8 - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf index 5e67e3b..6edffc5 100644 --- a/modules/nf-core/gunzip/main.nf +++ b/modules/nf-core/gunzip/main.nf @@ -1,55 +1,47 @@ process GUNZIP { - tag "$archive" + tag "${archive}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : - 'nf-core/ubuntu:22.04' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' + : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" input: tuple val(meta), path(archive) output: - tuple val(meta), path("$gunzip"), emit: gunzip - path "versions.yml" , emit: versions + tuple val(meta), path("${gunzip}"), emit: gunzip + tuple val("${task.process}"), val('gunzip'), eval('gunzip --version 2>&1 | head -1 | sed "s/^.*(gzip) //; s/ Copyright.*//"'), topic: versions, emit: versions_gunzip when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" + def args = task.ext.args ?: '' + def nameWithoutGz = archive.extension == 'gz' ? archive.baseName : archive.name + def extension = file(nameWithoutGz).extension + def name = file(nameWithoutGz).baseName + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".${extension}" """ # Not calling gunzip itself because it creates files # with the original group ownership rather than the # default one for that user / the work directory gzip \\ -cd \\ - $args \\ - $archive \\ - > $gunzip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS + ${args} \\ + ${archive} \\ + > ${gunzip} """ stub: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" + def nameWithoutGz = archive.extension == 'gz' ? archive.baseName : archive.name + def extension = file(nameWithoutGz).extension + def name = file(nameWithoutGz).baseName + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".${extension}" """ - touch $gunzip - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') - END_VERSIONS + touch ${gunzip} """ } diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml index f32973a..bba6b3b 100644 --- a/modules/nf-core/gunzip/meta.yml +++ b/modules/nf-core/gunzip/meta.yml @@ -10,25 +10,53 @@ tools: gzip is a file format and a software application used for file compression and decompression. documentation: https://www.gnu.org/software/gzip/manual/gzip.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Optional groovy Map containing meta information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be compressed/uncompressed - pattern: "*.*" + - - meta: + type: map + description: | + Optional groovy Map containing meta information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" + ontologies: [] output: - - gunzip: - type: file - description: Compressed/uncompressed file - pattern: "*.*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + gunzip: + - - meta: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + ontologies: [] + - ${gunzip}: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + ontologies: [] + versions_gunzip: + - - ${task.process}: + type: string + description: The process the versions were collected from + - gunzip: + type: string + description: The tool name + - gunzip --version 2>&1 | head -1 | sed "s/^.*(gzip) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - gunzip: + type: string + description: The tool name + - gunzip --version 2>&1 | head -1 | sed "s/^.*(gzip) //; s/ Copyright.*//": + type: eval + description: The expression to obtain the version of the tool + authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/gunzip/tests/main.nf.test b/modules/nf-core/gunzip/tests/main.nf.test index 776211a..33cb75a 100644 --- a/modules/nf-core/gunzip/tests/main.nf.test +++ b/modules/nf-core/gunzip/tests/main.nf.test @@ -89,6 +89,60 @@ nextflow_process { } + test("Should decompress file with extension appearing multiple times in filename") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true).copyTo('test.fa.v1.fa.gz') + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert file(process.out.gunzip[0][1]).name == 'test.fa.v1.fa' } + ) + } + + } + + test("Should decompress file with extension appearing multiple times in filename - prefix") { + + config './nextflow.config' + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = Channel.of([ + [ id: 'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true).copyTo('test.fa.v1.fa.gz') + ] + ) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + test("Should run without failures - prefix - stub") { options '-stub' diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap index 069967e..980e95a 100644 --- a/modules/nf-core/gunzip/tests/main.nf.test.snap +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -1,4 +1,45 @@ { + "Should decompress file with extension appearing multiple times in filename - prefix": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.xyz.fa:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ], + "gunzip": [ + [ + { + "id": "test" + }, + "test.xyz.fa:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] + ] + } + ], + "timestamp": "2026-04-15T15:20:52.59447", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, "Should run without failures - prefix - stub": { "content": [ { @@ -11,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -21,16 +66,20 @@ "test.xyz.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], + "timestamp": "2026-01-19T17:21:56.633550769", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:35:10.861293" + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } }, "Should run without failures - stub": { "content": [ @@ -44,7 +93,11 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -54,16 +107,20 @@ "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], + "timestamp": "2026-01-19T17:21:51.435621199", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:35:05.857145" + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } }, "Should run without failures": { "content": [ @@ -77,7 +134,11 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -87,16 +148,20 @@ "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], + "timestamp": "2026-01-19T17:21:40.613975821", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2023-10-17T15:35:37.690477896" + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } }, "Should run without failures - prefix": { "content": [ @@ -110,7 +175,11 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + [ + "GUNZIP", + "gunzip", + "1.13" + ] ], "gunzip": [ [ @@ -120,15 +189,19 @@ "test.xyz.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], - "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions_gunzip": [ + [ + "GUNZIP", + "gunzip", + "1.13" + ] ] } ], + "timestamp": "2026-01-19T17:21:46.086880414", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-25T11:33:32.921739" + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } } } \ No newline at end of file diff --git a/modules/nf-core/gunzip/tests/tags.yml b/modules/nf-core/gunzip/tests/tags.yml deleted file mode 100644 index fd3f691..0000000 --- a/modules/nf-core/gunzip/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -gunzip: - - modules/nf-core/gunzip/** diff --git a/modules/nf-core/isoseq/refine/environment.yml b/modules/nf-core/isoseq/refine/environment.yml index 05fb46f..7be3253 100644 --- a/modules/nf-core/isoseq/refine/environment.yml +++ b/modules/nf-core/isoseq/refine/environment.yml @@ -1,7 +1,7 @@ -name: isoseq_refine +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::isoseq=4.0.0 diff --git a/modules/nf-core/isoseq/refine/main.nf b/modules/nf-core/isoseq/refine/main.nf index 63bcf5e..68d6d86 100644 --- a/modules/nf-core/isoseq/refine/main.nf +++ b/modules/nf-core/isoseq/refine/main.nf @@ -3,9 +3,9 @@ process ISOSEQ_REFINE { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/isoseq:4.0.0--h9ee0642_0' : - 'biocontainers/isoseq:4.0.0--h9ee0642_0' }" + 'quay.io/biocontainers/isoseq:4.0.0--h9ee0642_0' }" input: tuple val(meta), path(bam) @@ -17,7 +17,7 @@ process ISOSEQ_REFINE { tuple val(meta), path("*.consensusreadset.xml") , emit: consensusreadset tuple val(meta), path("*.filter_summary.report.json"), emit: summary tuple val(meta), path("*.report.csv") , emit: report - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('isoseq'), eval("isoseq refine --version | head -n 1 | sed 's/isoseq refine //' | sed 's/ (commit.\\+//'"), emit: versions_isoseq, topic: versions when: task.ext.when == null || task.ext.when @@ -33,26 +33,15 @@ process ISOSEQ_REFINE { $bam \\ $primers \\ ${prefix}.bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - isoseq: \$( isoseq refine --version | head -n 1 | sed 's/isoseq refine //' | sed 's/ (commit.\\+//' ) - END_VERSIONS """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - touch dummy.bam - touch dummy.bam.pbi - touch dummy.consensusreadset.xml - touch dummy.filter_summary.report.json - touch dummy.report.csv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - isoseq: \$( isoseq refine --version | head -n 1 | sed 's/isoseq refine //' | sed 's/ (commit.\\+//' ) - END_VERSIONS + touch ${prefix}.bam + touch ${prefix}.bam.pbi + touch ${prefix}.consensusreadset.xml + touch ${prefix}.filter_summary.report.json + touch ${prefix}.report.csv """ } diff --git a/modules/nf-core/isoseq/refine/meta.yml b/modules/nf-core/isoseq/refine/meta.yml index 40f6c4b..de9874b 100644 --- a/modules/nf-core/isoseq/refine/meta.yml +++ b/modules/nf-core/isoseq/refine/meta.yml @@ -12,51 +12,108 @@ tools: homepage: https://github.com/PacificBiosciences/IsoSeq/blob/master/isoseq-clustering.md documentation: https://github.com/PacificBiosciences/IsoSeq/blob/master/isoseq-clustering.md tool_dev_url: https://github.com/PacificBiosciences/IsoSeq/blob/master/isoseq-clustering.md - licence: ["BSD-3-Clause-Clear"] + licence: + - "BSD-3-Clause-Clear" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test ] - - bam: - type: file - description: BAM file, cleaned ccs generated by lima - pattern: "*.bam" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test ] + - bam: + type: file + description: BAM file, cleaned ccs generated by lima + pattern: "*.bam" + ontologies: [] - primers: type: file description: fasta file of primers pattern: "*.fasta" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - bam: - type: file - description: Set of complete reads (with polyA tail), where the polyA has been trimmed - pattern: "*.bam" - - pbi: - type: file - description: Pacbio index file from polyA trimmed reads - pattern: "*.pbi" - - consensusreadset: - type: file - description: Metadata about read library - pattern: "*.xml" - - summary: - type: file - description: json file describing number of full length reads, full length non chimeric reads and full length non chimeric polyA reads - pattern: "*.json" - - report: - type: file - description: Metadata about primer and polyA detection (primers/polyA/insert length, strand, primer name) - pattern: "*.csv" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.bam": + type: file + description: Set of complete reads (with polyA tail), where the polyA has + been trimmed + pattern: "*.bam" + ontologies: [] + pbi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.bam.pbi": + type: file + description: Pacbio index file from polyA trimmed reads + pattern: "*.pbi" + ontologies: [] + consensusreadset: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.consensusreadset.xml": + type: file + description: Metadata about read library + pattern: "*.xml" + ontologies: + - edam: http://edamontology.org/format_2332 + summary: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.filter_summary.report.json": + type: file + description: json file describing number of full length reads, full length + non chimeric reads and full length non chimeric polyA reads + pattern: "*.json" + ontologies: + - edam: http://edamontology.org/format_3464 + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.report.csv": + type: file + description: Metadata about primer and polyA detection (primers/polyA/insert + length, strand, primer name) + pattern: "*.csv" + ontologies: + - edam: http://edamontology.org/format_3752 + versions_isoseq: + - - ${task.process}: + type: string + description: The name of the process + - isoseq: + type: string + description: The name of the tool + - isoseq refine --version | head -n 1 | sed 's/isoseq refine //' | sed 's/ (commit.\+//': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - isoseq: + type: string + description: The name of the tool + - isoseq refine --version | head -n 1 | sed 's/isoseq refine //' | sed 's/ (commit.\+//': + type: eval + description: The expression to obtain the version of the tool authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/isoseq/refine/tests/main.nf.test b/modules/nf-core/isoseq/refine/tests/main.nf.test index b1c7dda..71063b1 100644 --- a/modules/nf-core/isoseq/refine/tests/main.nf.test +++ b/modules/nf-core/isoseq/refine/tests/main.nf.test @@ -27,12 +27,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.bam).match("bam") }, - { assert snapshot(process.out.pbi).match("pbi") }, + { assert snapshot( + process.out.bam, + process.out.pbi, + process.out.report, + process.out.findAll { key, val -> key.startsWith('versions') } + ).match() }, { assert path(process.out.consensusreadset.get(0).get(1)).text.contains("PacBio.DataSet.ConsensusReadSet") }, { assert path(process.out.summary.get(0).get(1)).text.contains("pbcopper") }, - { assert snapshot(process.out.report).match("report") }, - { assert snapshot(process.out.versions).match("versions") } ) } } @@ -56,7 +58,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } diff --git a/modules/nf-core/isoseq/refine/tests/main.nf.test.snap b/modules/nf-core/isoseq/refine/tests/main.nf.test.snap index 62da630..a5b6ab2 100644 --- a/modules/nf-core/isoseq/refine/tests/main.nf.test.snap +++ b/modules/nf-core/isoseq/refine/tests/main.nf.test.snap @@ -1,56 +1,55 @@ { - "PacBio isoseq refine - Chimeras Removing test - stub": { + "PacBio isoseq refine - Chimeras Removing test": { "content": [ + [ + [ + { + "id": "test" + }, + "test.refine.bam:md5,4a666931c2c8843d8a8f0d901e1ba15f" + ] + ], + [ + [ + { + "id": "test" + }, + "test.refine.bam.pbi:md5,fcd3c9b9c7efea71732591ff1271a3b5" + ] + ], + [ + [ + { + "id": "test" + }, + "test.refine.report.csv:md5,d42a139e5d9b08396bdb087c01243ea9" + ] + ], { - "0": [ - [ - { - "id": "test" - }, - "dummy.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ + "versions_isoseq": [ [ - { - "id": "test" - }, - "dummy.bam.pbi:md5,d41d8cd98f00b204e9800998ecf8427e" + "ISOSEQ_REFINE", + "isoseq", + "4.0.0" ] - ], - "2": [ - [ - { - "id": "test" - }, - "dummy.consensusreadset.xml:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test" - }, - "dummy.filter_summary.report.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test" - }, - "dummy.report.csv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "5": [ - "versions.yml:md5,277ea2c8a1f4592efee1f336dfdd32e5" - ], + ] + } + ], + "timestamp": "2026-06-03T14:05:40.492223379", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.3" + } + }, + "PacBio isoseq refine - Chimeras Removing test - stub": { + "content": [ + { "bam": [ [ { "id": "test" }, - "dummy.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.refine.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "consensusreadset": [ @@ -58,7 +57,7 @@ { "id": "test" }, - "dummy.consensusreadset.xml:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.refine.consensusreadset.xml:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "pbi": [ @@ -66,7 +65,7 @@ { "id": "test" }, - "dummy.bam.pbi:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.refine.bam.pbi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "report": [ @@ -74,7 +73,7 @@ { "id": "test" }, - "dummy.report.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.refine.report.csv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "summary": [ @@ -82,81 +81,22 @@ { "id": "test" }, - "dummy.filter_summary.report.json:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.refine.filter_summary.report.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,277ea2c8a1f4592efee1f336dfdd32e5" + "versions_isoseq": [ + [ + "ISOSEQ_REFINE", + "isoseq", + "4.0.0" + ] ] } ], + "timestamp": "2026-06-03T14:05:45.050914829", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T22:41:31.59497" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,277ea2c8a1f4592efee1f336dfdd32e5" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-14T10:40:47.708497" - }, - "pbi": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.refine.bam.pbi:md5,fcd3c9b9c7efea71732591ff1271a3b5" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-14T10:34:21.23301" - }, - "report": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.refine.report.csv:md5,d42a139e5d9b08396bdb087c01243ea9" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-14T10:34:21.292332" - }, - "bam": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.refine.bam:md5,4a666931c2c8843d8a8f0d901e1ba15f" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-14T10:34:21.174269" + "nf-test": "0.9.5", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/modules/nf-core/isoseq/refine/tests/nextflow.config b/modules/nf-core/isoseq/refine/tests/nextflow.config index 3c49ec7..09a63ab 100644 --- a/modules/nf-core/isoseq/refine/tests/nextflow.config +++ b/modules/nf-core/isoseq/refine/tests/nextflow.config @@ -1,6 +1,5 @@ process { - publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } ext.prefix = { "${meta.id}.refine" } } diff --git a/modules/nf-core/isoseq/refine/tests/tags.yml b/modules/nf-core/isoseq/refine/tests/tags.yml deleted file mode 100644 index c6f3ffb..0000000 --- a/modules/nf-core/isoseq/refine/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -isoseq/refine: - - modules/nf-core/isoseq/refine/** diff --git a/modules/nf-core/lima/environment.yml b/modules/nf-core/lima/environment.yml index a9718bc..2e56e30 100644 --- a/modules/nf-core/lima/environment.yml +++ b/modules/nf-core/lima/environment.yml @@ -1,7 +1,8 @@ -name: lima +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::lima=2.9.0 + - bioconda::lima=2.12.0 diff --git a/modules/nf-core/lima/main.nf b/modules/nf-core/lima/main.nf index e44fdda..7b860ff 100644 --- a/modules/nf-core/lima/main.nf +++ b/modules/nf-core/lima/main.nf @@ -3,9 +3,9 @@ process LIMA { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/lima:2.9.0--h9ee0642_1' : - 'biocontainers/lima:2.9.0--h9ee0642_1' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/lima:2.12.0--h9ee0642_1' : + 'quay.io/biocontainers/lima:2.12.0--h9ee0642_1' }" input: tuple val(meta), path(ccs) @@ -15,12 +15,12 @@ process LIMA { tuple val(meta), path("*.counts") , emit: counts tuple val(meta), path("*.report") , emit: report tuple val(meta), path("*.summary"), emit: summary - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('lima'), eval("lima --version | head -n1 | sed 's/lima //g' | sed 's/ (.\\+//g'"), emit: versions_lima, topic: versions tuple val(meta), path("*.bam") , optional: true, emit: bam tuple val(meta), path("*.bam.pbi") , optional: true, emit: pbi - tuple val(meta), path("*.{fa, fasta}") , optional: true, emit: fasta - tuple val(meta), path("*.{fa.gz, fasta.gz}"), optional: true, emit: fastagz + tuple val(meta), path("*.{fa,fasta}") , optional: true, emit: fasta + tuple val(meta), path("*.{fa.gz,fasta.gz}"), optional: true, emit: fastagz tuple val(meta), path("*.fastq") , optional: true, emit: fastq tuple val(meta), path("*.fastq.gz") , optional: true, emit: fastqgz tuple val(meta), path("*.xml") , optional: true, emit: xml @@ -61,24 +61,12 @@ process LIMA { $prefix.\$OUT_EXT \\ -j $task.cpus \\ $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - lima: \$( lima --version | head -n1 | sed 's/lima //g' | sed 's/ (.\\+//g' ) - END_VERSIONS """ stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" """ touch dummy.counts touch dummy.report touch dummy.summary - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - lima: \$( lima --version | head -n1 | sed 's/lima //g' | sed 's/ (.\\+//g' ) - END_VERSIONS """ } diff --git a/modules/nf-core/lima/meta.yml b/modules/nf-core/lima/meta.yml index ad4ebbf..74ed46d 100644 --- a/modules/nf-core/lima/meta.yml +++ b/modules/nf-core/lima/meta.yml @@ -13,82 +13,198 @@ tools: documentation: https://lima.how/ tool_dev_url: https://github.com/pacificbiosciences/barcoding/ licence: ["BSD-3-Clause-Clear"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - ccs: - type: file - description: A BAM or fasta or fasta.gz or fastq or fastq.gz file of subreads or ccs - pattern: "*.{bam,fasta,fasta.gz,fastq,fastq.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - ccs: + type: file + description: A BAM or fasta or fasta.gz or fastq or fastq.gz file of subreads + or ccs + pattern: "*.{bam,fasta,fasta.gz,fastq,fastq.gz}" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ - primers: type: file description: Fasta file, sequences of primers pattern: "*.fasta" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - bam: - type: file - description: A bam file of ccs purged of primers - pattern: "*.bam" - - pbi: - type: file - description: Pacbio index file of ccs purged of primers - pattern: "*.bam" - - xml: - type: file - description: An XML file representing a set of a particular sequence data type such as subreads, references or aligned subreads. - pattern: "*.xml" - - json: - type: file - description: A metadata json file - pattern: "*.json" - - clips: - type: file - description: A fasta file of clipped primers - pattern: "*.clips" - - counts: - type: file - description: A tabulated file of describing pairs of primers - pattern: "*.counts" - - guess: - type: file - description: A second tabulated file of describing pairs of primers (no doc available) - pattern: "*.guess" - - report: - type: file - description: A tab-separated file about each ZMW, unfiltered - pattern: "*.report" - - summary: - type: file - description: This file shows how many ZMWs have been filtered, how ZMWs many are same/different, and how many reads have been filtered. - pattern: "*.summary" - - fasta: - type: file - description: A fasta file of ccs purged of primers. - pattern: "*.fa" - - fastagz: - type: file - description: A fasta.gz file of ccs purged of primers. - pattern: "*.fasta.gz" - - fastq: - type: file - description: A fastq file of ccs purged of primers. - pattern: "*.fastq" - - fastqgz: - type: file - description: A fastq.gz file of ccs purged of primers. - pattern: "*.fastq.gz" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + counts: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.counts": + type: file + description: A tabulated file of describing pairs of primers + pattern: "*.counts" + ontologies: [] + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.report": + type: file + description: A tab-separated file about each ZMW, unfiltered + pattern: "*.report" + ontologies: [] + summary: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.summary": + type: file + description: This file shows how many ZMWs have been filtered, how ZMWs many + are same/different, and how many reads have been filtered. + pattern: "*.summary" + ontologies: [] + versions_lima: + - - ${task.process}: + type: string + description: The process the versions were collected from + - lima: + type: string + description: The tool name + - "lima --version | head -n1 | sed 's/lima //g' | sed 's/ (.\\+//g'": + type: string + description: The command used to generate the version of the tool + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.bam": + type: file + description: A bam file of ccs purged of primers + pattern: "*.bam" + ontologies: [] + pbi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.bam.pbi": + type: file + description: Pacbio index file of ccs purged of primers + pattern: "*.bam" + ontologies: [] + fasta: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.{fa,fasta}": + type: file + description: A fasta file of ccs purged of primers. + pattern: "*.fa" + ontologies: [] + fastagz: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.{fa.gz,fasta.gz}": + type: file + description: A fasta.gz file of ccs purged of primers. + pattern: "*.fasta.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + fastq: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.fastq": + type: file + description: A fastq file of ccs purged of primers. + pattern: "*.fastq" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ + fastqgz: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.fastq.gz": + type: file + description: A fastq.gz file of ccs purged of primers. + pattern: "*.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + xml: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.xml": + type: file + description: An XML file representing a set of a particular sequence data + type such as subreads, references or aligned subreads. + pattern: "*.xml" + ontologies: + - edam: http://edamontology.org/format_2332 # XML + json: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.json": + type: file + description: A metadata json file + pattern: "*.json" + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + clips: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.clips": + type: file + description: A fasta file of clipped primers + pattern: "*.clips" + ontologies: [] + guess: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.guess": + type: file + description: A second tabulated file of describing pairs of primers (no doc + available) + pattern: "*.guess" + ontologies: [] +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - lima: + type: string + description: The tool name + - "lima --version | head -n1 | sed 's/lima //g' | sed 's/ (.\\+//g'": + type: string + description: The command used to generate the version of the tool authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/lima/tests/main.nf.test b/modules/nf-core/lima/tests/main.nf.test index bf7d22c..89cc392 100644 --- a/modules/nf-core/lima/tests/main.nf.test +++ b/modules/nf-core/lima/tests/main.nf.test @@ -29,7 +29,7 @@ nextflow_process { { assert snapshot(process.out.counts).match("counts") }, { assert snapshot(process.out.report).match("report") }, { assert snapshot(process.out.summary).match("summary") }, - { assert snapshot(process.out.versions).match("versions") }, + { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() }, { assert snapshot(process.out.bam).match("bam") }, { assert snapshot(process.out.pbi).match("pbi") }, { assert snapshot(process.out.fasta).match("fasta") }, @@ -66,7 +66,7 @@ nextflow_process { } - test("LIMA - Primer Removal - Input => fa.gz") { + test("LIMA - Primer Removal - Input => fa.gz") { when { process { diff --git a/modules/nf-core/lima/tests/main.nf.test.snap b/modules/nf-core/lima/tests/main.nf.test.snap index f64e3dc..3e39169 100644 --- a/modules/nf-core/lima/tests/main.nf.test.snap +++ b/modules/nf-core/lima/tests/main.nf.test.snap @@ -1,4 +1,39 @@ { + "summary": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.fl.lima.summary:md5,bcbcaaaca418bdeb91141c81715ca420" + ] + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2026-02-12T12:34:25.47480559" + }, + "LIMA - Primer Removal - Input => bam": { + "content": [ + { + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2026-02-12T12:34:25.504600431" + }, "fastqgz": { "content": [ [ @@ -6,10 +41,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:01.98256" + "timestamp": "2026-02-12T12:34:25.885991815" }, "counts": { "content": [ @@ -23,10 +58,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:00.491188" + "timestamp": "2026-02-12T12:34:25.40513167" }, "clips": { "content": [ @@ -40,10 +75,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:02.19417" + "timestamp": "2026-02-12T12:34:25.951132172" }, "LIMA - Primer Removal - Input => fq.gz - stub": { "content": [ @@ -85,7 +120,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ @@ -156,8 +195,12 @@ "dummy.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -165,10 +208,10 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:43.376049" + "timestamp": "2026-02-12T12:35:52.451468526" }, "LIMA - Primer Removal - Input => fq.gz": { "content": [ @@ -220,7 +263,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ [ @@ -331,8 +378,12 @@ "test.fl.lima.summary:md5,e91d3c386aaf4effa63f33ee2eb7da2a" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -340,10 +391,10 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:13.306885" + "timestamp": "2026-02-12T12:35:15.500956685" }, "LIMA - Primer Removal - Input => fq": { "content": [ @@ -395,7 +446,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ [ @@ -506,8 +561,12 @@ "test.fl.lima.summary:md5,e91d3c386aaf4effa63f33ee2eb7da2a" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -515,10 +574,10 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:07.559264" + "timestamp": "2026-02-12T12:35:03.038935069" }, "LIMA - Primer Removal - Input => fa.gz - stub": { "content": [ @@ -560,7 +619,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ @@ -631,8 +694,12 @@ "dummy.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -640,10 +707,10 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:30.69067" + "timestamp": "2026-02-12T12:35:37.745197933" }, "fasta": { "content": [ @@ -652,56 +719,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:01.262691" - }, - "bam": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.fl.NEB_5p--NEB_Clontech_3p.bam:md5,d3de1934aa8fb39e961345916b3ae57b" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T11:35:00.822221" - }, - "fastq": { - "content": [ - [ - - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T11:35:01.752773" - }, - "summary": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.fl.lima.summary:md5,bcbcaaaca418bdeb91141c81715ca420" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T11:35:00.704932" + "timestamp": "2026-02-12T12:34:25.681651786" }, "LIMA - Primer Removal - Input => fq - stub": { "content": [ @@ -743,7 +764,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ @@ -814,8 +839,12 @@ "dummy.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -823,10 +852,27 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:37.019064" + "timestamp": "2026-02-12T12:35:45.365210245" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.fl.NEB_5p--NEB_Clontech_3p.bam:md5,59b04f200c309b0a60a3f182d22f6910" + ] + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2026-02-12T12:34:25.523508284" }, "LIMA - Primer Removal - Input => bam - stub": { "content": [ @@ -868,7 +914,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ @@ -939,8 +989,12 @@ "dummy.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -948,10 +1002,10 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:18.958286" + "timestamp": "2026-02-12T12:35:22.965691216" }, "LIMA - Primer Removal - Input => fa - stub": { "content": [ @@ -993,7 +1047,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ @@ -1064,8 +1122,12 @@ "dummy.summary:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -1073,10 +1135,10 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:25.020259" + "timestamp": "2026-02-12T12:35:30.433815019" }, "fastagz": { "content": [ @@ -1085,22 +1147,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T11:35:01.493258" - }, - "versions": { - "content": [ - [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:00.76398" + "timestamp": "2026-02-12T12:34:25.749681972" }, "guess": { "content": [ @@ -1114,10 +1164,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:02.396472" + "timestamp": "2026-02-12T12:34:26.026327633" }, "pbi": { "content": [ @@ -1126,15 +1176,15 @@ { "id": "test" }, - "test.fl.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,b531dcf8afc5f6c1caf40c7affb6a90c" + "test.fl.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,851cf26eb54e4399cba5241db969dc0c" ] ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:01.042955" + "timestamp": "2026-02-12T12:34:25.612906854" }, "report": { "content": [ @@ -1148,10 +1198,10 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-01-17T11:35:00.626772" + "timestamp": "2026-02-12T12:34:25.422692879" }, "LIMA - Primer Removal - Input => fa": { "content": [ @@ -1203,7 +1253,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ [ @@ -1222,7 +1276,12 @@ ] ], "6": [ - + [ + { + "id": "test" + }, + "test.fl.NEB_5p--NEB_Clontech_3p.fasta:md5,d4eea419961c205ef84ef39176e30ef3" + ] ], "7": [ @@ -1258,7 +1317,12 @@ ] ], "fasta": [ - + [ + { + "id": "test" + }, + "test.fl.NEB_5p--NEB_Clontech_3p.fasta:md5,d4eea419961c205ef84ef39176e30ef3" + ] ], "fastagz": [ @@ -1304,8 +1368,12 @@ "test.fl.lima.summary:md5,03be2311ba4afb878d8e547ab38c11eb" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -1313,10 +1381,22 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:46:54.854736" + "timestamp": "2026-02-12T12:34:38.412905201" + }, + "fastq": { + "content": [ + [ + + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2026-02-12T12:34:25.819717953" }, "LIMA - Primer Removal - Input => fa.gz": { "content": [ @@ -1368,7 +1448,11 @@ ] ], "3": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + [ + "LIMA", + "lima", + "2.12.0" + ] ], "4": [ [ @@ -1390,7 +1474,12 @@ ], "7": [ - + [ + { + "id": "test" + }, + "test.fl.NEB_5p--NEB_Clontech_3p.fasta.gz:md5,d4eea419961c205ef84ef39176e30ef3" + ] ], "8": [ @@ -1426,7 +1515,12 @@ ], "fastagz": [ - + [ + { + "id": "test" + }, + "test.fl.NEB_5p--NEB_Clontech_3p.fasta.gz:md5,d4eea419961c205ef84ef39176e30ef3" + ] ], "fastq": [ @@ -1469,8 +1563,12 @@ "test.fl.lima.summary:md5,03be2311ba4afb878d8e547ab38c11eb" ] ], - "versions": [ - "versions.yml:md5,1a47b30bece32a2fcd9a70f9356dc30d" + "versions_lima": [ + [ + "LIMA", + "lima", + "2.12.0" + ] ], "xml": [ @@ -1478,9 +1576,9 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2024-05-13T08:47:01.506833" + "timestamp": "2026-02-12T12:34:50.42113371" } } \ No newline at end of file diff --git a/modules/nf-core/lima/tests/tags.yml b/modules/nf-core/lima/tests/tags.yml deleted file mode 100644 index bf24add..0000000 --- a/modules/nf-core/lima/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -lima: - - modules/nf-core/lima/** diff --git a/modules/nf-core/minimap2/align/environment.yml b/modules/nf-core/minimap2/align/environment.yml index 41e8fe9..d8135f9 100644 --- a/modules/nf-core/minimap2/align/environment.yml +++ b/modules/nf-core/minimap2/align/environment.yml @@ -1,11 +1,9 @@ -name: minimap2_align - +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::htslib=1.20 - - bioconda::minimap2=2.28 - - bioconda::samtools=1.20 + - bioconda::minimap2=2.30 + - bioconda::samtools=1.23.1 diff --git a/modules/nf-core/minimap2/align/main.nf b/modules/nf-core/minimap2/align/main.nf index d82dc14..e61e77e 100644 --- a/modules/nf-core/minimap2/align/main.nf +++ b/modules/nf-core/minimap2/align/main.nf @@ -4,9 +4,9 @@ process MINIMAP2_ALIGN { // Note: the versions here need to match the versions used in the mulled container below and minimap2/index conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:3161f532a5ea6f1dec9be5667c9efc2afdac6104-0' : - 'biocontainers/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:3161f532a5ea6f1dec9be5667c9efc2afdac6104-0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/37/37671219cfd244eb9b33db9345d3543ffd83037419a1c57f4648aace493ec2c2/data' : + 'community.wave.seqera.io/library/minimap2_samtools:b09096fc890429ce' }" input: tuple val(meta), path(reads) @@ -20,7 +20,7 @@ process MINIMAP2_ALIGN { tuple val(meta), path("*.paf") , optional: true, emit: paf tuple val(meta), path("*.bam") , optional: true, emit: bam tuple val(meta), path("*.bam.${bam_index_extension}"), optional: true, emit: index - path "versions.yml" , emit: versions + tuple val("${task.process}"), val("minimap2"), eval("minimap2 --version"), topic: versions, emit: versions_minimap2 when: task.ext.when == null || task.ext.when @@ -38,25 +38,17 @@ process MINIMAP2_ALIGN { def bam_input = "${reads.extension}".matches('sam|bam|cram') def samtools_reset_fastq = bam_input ? "samtools reset --threads ${task.cpus-1} $args3 $reads | samtools fastq --threads ${task.cpus-1} $args4 |" : '' def query = bam_input ? "-" : reads - def target = reference ?: (bam_input ? error("BAM input requires reference") : reads) - + def target = reference ?: (bam_input ? error("Error: minimap2/align BAM input mode requires reference") : reads) """ $samtools_reset_fastq \\ minimap2 \\ - $args \\ - -t $task.cpus \\ - $target \\ - $query \\ - $cigar_paf \\ - $set_cigar_bam \\ - $bam_output - - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - minimap2: \$(minimap2 --version 2>&1) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + ${args} \\ + -t ${task.cpus} \\ + ${target} \\ + ${query} \\ + ${cigar_paf} \\ + ${set_cigar_bam} \\ + ${bam_output} """ stub: @@ -64,15 +56,11 @@ process MINIMAP2_ALIGN { def output_file = bam_format ? "${prefix}.bam" : "${prefix}.paf" def bam_index = bam_index_extension ? "touch ${prefix}.bam.${bam_index_extension}" : "" def bam_input = "${reads.extension}".matches('sam|bam|cram') - def target = reference ?: (bam_input ? error("BAM input requires reference") : reads) - + if(bam_input && !reference) { + error("Error: minimap2/align BAM input mode requires reference!") + } """ touch $output_file ${bam_index} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - minimap2: \$(minimap2 --version 2>&1) - END_VERSIONS """ } diff --git a/modules/nf-core/minimap2/align/meta.yml b/modules/nf-core/minimap2/align/meta.yml index 8996f88..40bb20a 100644 --- a/modules/nf-core/minimap2/align/meta.yml +++ b/modules/nf-core/minimap2/align/meta.yml @@ -14,26 +14,29 @@ tools: homepage: https://github.com/lh3/minimap2 documentation: https://github.com/lh3/minimap2#uguide licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FASTA or FASTQ files of size 1 and 2 for single-end - and paired-end data, respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test_ref'] - - reference: - type: file - description: | - Reference database in FASTA format. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FASTA or FASTQ files of size 1 and 2 for single-end + and paired-end data, respectively. + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test_ref'] + - reference: + type: file + description: | + Reference database in FASTA format. + ontologies: [] - bam_format: type: boolean description: Specify that output should be in BAM format @@ -49,27 +52,60 @@ input: Write CIGAR with >65535 ops at the CG tag. This is recommended when doing XYZ (https://github.com/lh3/minimap2#working-with-65535-cigar-operations) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - paf: - type: file - description: Alignment in PAF format - pattern: "*.paf" - - bam: - type: file - description: Alignment in BAM format - pattern: "*.bam" - - index: - type: file - description: BAM alignment index - pattern: "*.bam.*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + paf: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.paf": + type: file + description: Alignment in PAF format + pattern: "*.paf" + ontologies: [] + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Alignment in BAM format + pattern: "*.bam" + ontologies: [] + index: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam.${bam_index_extension}": + type: file + description: BAM alignment index + pattern: "*.bam.*" + ontologies: [] + versions_minimap2: + - - ${task.process}: + type: string + description: The process name + - minimap2: + type: string + description: The tool name + - minimap2 --version: + type: eval + description: The tool version +topics: + versions: + - - ${task.process}: + type: string + description: The process name + - minimap2: + type: string + description: The tool name + - minimap2 --version: + type: eval + description: The tool version authors: - "@heuermh" - "@sofstam" diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test b/modules/nf-core/minimap2/align/tests/main.nf.test index 4072c17..34597d6 100644 --- a/modules/nf-core/minimap2/align/tests/main.nf.test +++ b/modules/nf-core/minimap2/align/tests/main.nf.test @@ -36,7 +36,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -71,7 +71,7 @@ nextflow_process { bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), file(process.out.index[0][1]).name, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -108,7 +108,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -142,7 +142,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -176,7 +176,7 @@ nextflow_process { { assert snapshot( bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -211,7 +211,7 @@ nextflow_process { bam(process.out.bam[0][1]).getHeader(), bam(process.out.bam[0][1]).getReadsMD5(), file(process.out.index[0][1]).name, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions_") } ).match() } ) } @@ -438,4 +438,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test.snap b/modules/nf-core/minimap2/align/tests/main.nf.test.snap index 12264a8..4923727 100644 --- a/modules/nf-core/minimap2/align/tests/main.nf.test.snap +++ b/modules/nf-core/minimap2/align/tests/main.nf.test.snap @@ -4,20 +4,26 @@ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta -", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta -", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" ], "5d426b9a5f5b2c54f1d7f1e4c238ae94", "test.bam.bai", - [ - "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] + ] + } ], + "timestamp": "2026-04-23T17:26:01.315588", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-25T09:03:00.827260362" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - bam, fasta, true, 'bai', false, false - stub": { "content": [ @@ -44,7 +50,11 @@ ] ], "3": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ], "bam": [ [ @@ -67,16 +77,20 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ] } ], + "timestamp": "2026-04-23T17:26:29.211025", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-23T11:21:37.92353539" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, 'bai', false, false - stub": { "content": [ @@ -103,7 +117,11 @@ ] ], "3": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ], "bam": [ [ @@ -126,16 +144,20 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ] } ], + "timestamp": "2026-04-23T17:26:14.56423", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-03T11:29:44.669021368" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, false, [], false, false - stub": { "content": [ @@ -156,7 +178,11 @@ ], "3": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ], "bam": [ @@ -173,16 +199,20 @@ "test.paf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ] } ], + "timestamp": "2026-04-23T17:26:19.467028", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-03T11:15:52.738781039" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, [], false, false - stub": { "content": [ @@ -203,7 +233,11 @@ ], "3": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ], "bam": [ [ @@ -220,93 +254,121 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ] } ], + "timestamp": "2026-04-23T17:26:10.208287", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-03T11:15:23.033808223" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - [fastq1, fastq2], fasta, true, false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz test_2.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz test_2.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "1bc392244f228bf52cf0b5a8f6a654c9", - [ - "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] + ] + } ], + "timestamp": "2026-04-23T17:25:45.435644", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-23T11:18:18.964586894" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, [], false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "f194745c0ccfcb2a9c0aee094a08750", - [ - "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] + ] + } ], + "timestamp": "2026-04-23T17:25:35.537045", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-23T11:17:48.667488325" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, 'bai', false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" ], "f194745c0ccfcb2a9c0aee094a08750", "test.bam.bai", - [ - "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] + ] + } ], + "timestamp": "2026-04-23T17:25:40.308055", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-23T11:18:02.517416733" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - bam, fasta, true, [], false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a genome.fasta -", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta -", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "5d426b9a5f5b2c54f1d7f1e4c238ae94", - [ - "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] + ] + } ], + "timestamp": "2026-04-23T17:25:55.526019", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-25T09:02:49.64829488" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - bam, fasta, true, [], false, false - stub": { "content": [ @@ -327,7 +389,11 @@ ], "3": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ], "bam": [ [ @@ -344,16 +410,20 @@ "paf": [ ], - "versions": [ - "versions.yml:md5,98b8f5f36aa54b82210094f0b0d11938" + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] ] } ], + "timestamp": "2026-04-23T17:26:24.507384", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-23T11:21:22.162291795" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, [], true, false, false": { "content": [ @@ -459,18 +529,24 @@ "@SQ\tSN:ERR5069949.3258358\tLN:151", "@SQ\tSN:ERR5069949.1476386\tLN:151", "@SQ\tSN:ERR5069949.2415814\tLN:150", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.28-r1209\tCL:minimap2 -t 2 -a test_1.fastq.gz test_1.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.20\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a test_1.fastq.gz test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "16c1c651f8ec67383bcdee3c55aed94f", - [ - "versions.yml:md5,3548eeba9066efbf8d78ea99f8d813fd" - ] + { + "versions_minimap2": [ + [ + "MINIMAP2_ALIGN", + "minimap2", + "2.30-r1287" + ] + ] + } ], + "timestamp": "2026-04-23T17:25:49.904205", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-23T11:18:34.246998277" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } } } \ No newline at end of file diff --git a/modules/nf-core/minimap2/align/tests/tags.yml b/modules/nf-core/minimap2/align/tests/tags.yml deleted file mode 100644 index 39dba37..0000000 --- a/modules/nf-core/minimap2/align/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -minimap2/align: - - "modules/nf-core/minimap2/align/**" diff --git a/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt new file mode 100644 index 0000000..2a91c22 --- /dev/null +++ b/modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt @@ -0,0 +1,1526 @@ + +version: 6 +environments: +default: +channels: +- url: https://conda.anaconda.org/conda-forge/ +- url: https://conda.anaconda.org/bioconda/ +- url: https://conda.anaconda.org/bioconda/ +options: +pypi-prerelease-mode: if-necessary-or-explicit +packages: +linux-64: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.8.1-hecca717_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/kaleido-core-0.2.1-h3644ca4_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/mathjax-2.7.7-ha770c72_3.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py314h2b28147_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.41.0-py310h49dadd8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.41.0-py310hcbd6021_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.4-py314h2e6c369_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.5-habeac84_100_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py314h5bd0f2a_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.1-hbc0de68_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda +build_number: 20 +sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 +md5: a9f577daf3de00bca7c3c76c0ecbd1de +depends: +- __glibc >=2.17,<3.0.a0 +- libgomp >=7.5.0 +constrains: +- openmp_impl <0.0a0 +license: BSD-3-Clause +license_family: BSD +size: 28948 +timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 +md5: aaa2a381ccc56eac91d63b6c1240312f +depends: +- cpython +- python-gil +license: MIT +license_family: MIT +size: 8191 +timestamp: 1744137672556 +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 +md5: 2934f256a8acfe48f6ebb4fce6cde29c +depends: +- python >=3.9 +- typing-extensions >=4.0.0 +license: MIT +license_family: MIT +size: 18074 +timestamp: 1733247158254 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab +md5: c6b0543676ecb1fb2d7643941fe375f2 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 64927 +timestamp: 1773935801332 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda +noarch: generic +sha256: a1c97297e867776760489537bc5ae36fa83a154be30e3b79385a39ca4cb058fe +md5: 1133126d840e75287d83947be3fc3e71 +depends: +- python >=3.14 +license: BSD-3-Clause AND MIT AND EPL-2.0 +size: 7533 +timestamp: 1778594057496 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda +sha256: 3ad3500bff54a781c29f16ce1b288b36606e2189d0b0ef2f67036554f47f12b0 +md5: 8910d2c46f7e7b519129f486e0fe927a +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +constrains: +- libbrotlicommon 1.2.0 hb03c661_1 +license: MIT +license_family: MIT +size: 367376 +timestamp: 1764017265553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda +sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 +md5: d2ffd7602c02f2b316fd921d39876885 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: bzip2-1.0.6 +license_family: BSD +size: 260182 +timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +sha256: 9812a303a1395e1dafbd92e5bc8a1ff6013bcbba0a09c7f03a8d23e43560aa9b +md5: 489b8e97e666c93f68fdb35c3c9b957f +depends: +- __unix +license: ISC +size: 129868 +timestamp: 1779289852439 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +sha256: 645655a3510e38e625da136595f3f16f2130c3263630cc3bc8f60f619ddbe490 +md5: 9fefff2f745ea1cc2ef15211a20c054a +depends: +- python >=3.10 +license: ISC +size: 134201 +timestamp: 1779285131141 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 +md5: a9167b9571f3baa9d448faa2139d1089 +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 58872 +timestamp: 1775127203018 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda +sha256: 99ab8ef815c4520cce3a7482c2513f377c14348206857661d84c76a55e030f97 +md5: 003767c47f1f0a474c4de268b57839c3 +depends: +- __unix +- python +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 104631 +timestamp: 1779108494556 +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +sha256: 8021c76eeadbdd5784b881b165242db9449783e12ce26d6234060026fd6a8680 +md5: b866ff7007b934d564961066c8195983 +depends: +- humanfriendly >=9.1 +- python >=3.9 +license: MIT +license_family: MIT +size: 43758 +timestamp: 1733928076798 +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +sha256: 59c9e29800b483b390467f90e82b0da3a4fbf0612efe1c90813fca232780e160 +md5: 071cf7b0ce333c81718b054066c15102 +depends: +- networkx >=2.0 +- numpy +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 39326 +timestamp: 1735759976140 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda +noarch: generic +sha256: 777882d2685f368417f31bbe1b28f73687fc6c8f6a5768bda20ffeefa6b07f5b +md5: a749029ce5d0632a913db19d17f944ab +depends: +- python >=3.14,<3.15.0a0 +- python_abi * *_cp314 +license: Python-2.0 +size: 50212 +timestamp: 1779236682725 +- conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.8.1-hecca717_0.conda +sha256: 29a10599d56d93bd750914888ebe6822d47722070762b4647b34d12df9f4476e +md5: d0757fd84af06f065eba49d39af6c546 +depends: +- __glibc >=2.17,<3.0.a0 +- libexpat 2.8.1 hecca717_0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 148238 +timestamp: 1779278694477 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b +md5: 0c96522c6bdaed4b1566d11387caaf45 +license: BSD-3-Clause +license_family: BSD +size: 397370 +timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c +md5: 34893075a5c9e55cdafac56607368fc6 +license: OFL-1.1 +license_family: Other +size: 96530 +timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 +md5: 4d59c254e01d9cde7957100457e2d5fb +license: OFL-1.1 +license_family: Other +size: 700814 +timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 +md5: 49023d73832ef61042f6a237cb2687e7 +license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 +license_family: Other +size: 1620504 +timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.0-h27c8c51_0.conda +sha256: e798086d8a65d55dc4c51f5746705639c9a5f2eeb0b8fc50e6152cfc0d69a4e8 +md5: 06965b2f9854d0b15e0443ee81fe83dc +depends: +- __glibc >=2.17,<3.0.a0 +- libexpat >=2.8.1,<3.0a0 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 +- libgcc >=14 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 +license: MIT +license_family: MIT +size: 280882 +timestamp: 1779421631622 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 +md5: a7970cd949a077b7cb9696379d338681 +depends: +- font-ttf-ubuntu +- font-ttf-inconsolata +- font-ttf-dejavu-sans-mono +- font-ttf-source-code-pro +license: BSD-3-Clause +license_family: BSD +size: 4059 +timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 +md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 +depends: +- python >=3.10 +- hyperframe >=6.1,<7 +- hpack >=4.1,<5 +- python +license: MIT +license_family: MIT +size: 95967 +timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba +md5: 0a802cb9888dd14eeefc611f05c40b6e +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 30731 +timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +sha256: fa2071da7fab758c669e78227e6094f6b3608228740808a6de5d6bce83d9e52d +md5: 7fe569c10905402ed47024fc481bb371 +depends: +- __unix +- python >=3.9 +license: MIT +license_family: MIT +size: 73563 +timestamp: 1733928021866 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +sha256: 6c4343b376d0b12a4c75ab992640970d36c933cad1fd924f6a1181fa91710e80 +md5: daddf757c3ecd6067b9af1df1f25d89e +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 67994 +timestamp: 1766267728652 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 +md5: 8e6923fc12f1fe8f8c4e5c9f343256ac +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 17397 +timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +sha256: 3d25f9f6f7ab3e1ce6429fc8c8aae0335cf446692e715068488536d220cc43de +md5: 1b9083b7f00609605d1483dbc6071a81 +depends: +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 62642 +timestamp: 1779294335905 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda +sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 +md5: ffc17e785d64e12fc311af9184221839 +depends: +- python >=3.10 +- zipp >=3.20 +- python +license: Apache-2.0 +size: 34766 +timestamp: 1779714582554 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b +md5: 04558c96691bed63104678757beb4f8d +depends: +- markupsafe >=2.0 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 120685 +timestamp: 1764517220861 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7 +md5: ada41c863af263cc4c5fcbaff7c3e4dc +depends: +- attrs >=22.2.0 +- jsonschema-specifications >=2023.3.6 +- python >=3.10 +- referencing >=0.28.4 +- rpds-py >=0.25.0 +- python +license: MIT +license_family: MIT +size: 82356 +timestamp: 1767839954256 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 +md5: 439cd0f567d697b20a8f45cb70a1005a +depends: +- python >=3.10 +- referencing >=0.31.0 +- python +license: MIT +license_family: MIT +size: 19236 +timestamp: 1757335715225 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kaleido-core-0.2.1-h3644ca4_0.tar.bz2 +sha256: 7f243680ca03eba7457b7a48f93a9440ba8181a8eac20a3eb5ef165ab6c96664 +md5: b3723b235b0758abaae8c82ce4d80146 +depends: +- __glibc >=2.17,<3.0.a0 +- expat >=2.2.10,<3.0.0a0 +- fontconfig +- fonts-conda-forge +- libgcc-ng >=9.3.0 +- mathjax 2.7.* +- nspr >=4.29,<5.0a0 +- nss >=3.62,<4.0a0 +- sqlite >=3.34.0,<4.0a0 +license: MIT +license_family: MIT +size: 62099926 +timestamp: 1615199463039 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda +sha256: eb89c6c39f2f6a93db55723dbb2f6bba8c8e63e6312bf1abf13e6e9ff45849c8 +md5: f92f984b558e6e6204014b16d212b271 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.4.1,<4.0a0 +- libtiff >=4.7.1,<4.8.0a0 +license: MIT +license_family: MIT +size: 251086 +timestamp: 1778079286384 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda +sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c +md5: 18335a698559cdbcd86150a48bf54ba6 +depends: +- __glibc >=2.17,<3.0.a0 +- zstd >=1.5.7,<1.6.0a0 +constrains: +- binutils_impl_linux-64 2.45.1 +license: GPL-3.0-only +license_family: GPL +size: 728002 +timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda +sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 +md5: a752488c68f2e7c456bcbd8f16eec275 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: Apache-2.0 +license_family: Apache +size: 261513 +timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-7_h4a7cf45_openblas.conda +build_number: 7 +sha256: 081c850f99bc355821fac9c6e3727d40b3f8ce3beb50a5437cf03726b611ff39 +md5: 955b44e8b00b7f7ef4ce0130cef12394 +depends: +- libopenblas >=0.3.33,<0.3.34.0a0 +- libopenblas >=0.3.33,<1.0a0 +constrains: +- libcblas 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapack 3.11.0 7*_openblas +- liblapacke 3.11.0 7*_openblas +- mkl <2027 +license: BSD-3-Clause +license_family: BSD +size: 18716 +timestamp: 1778489854108 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-7_h0358290_openblas.conda +build_number: 7 +sha256: 956ae0bb1ec8b0c3663d75b151aceb0521b54e513bf97f621a035f9c87037970 +md5: 0675639dc24cb0032f199e7ff68e4633 +depends: +- libblas 3.11.0 7_h4a7cf45_openblas +constrains: +- liblapacke 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapack 3.11.0 7*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18675 +timestamp: 1778489861559 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda +sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 +md5: 6c77a605a7a689d17d4819c0f8ac9a00 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 73490 +timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_0.conda +sha256: 363018b25fdb5534c79783d912bd4b685a3547f4fc5996357ad548899b0ee8e7 +md5: 93764a5ca80616e9c10106cdaec92f74 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- expat 2.8.1.* +license: MIT +license_family: MIT +size: 77294 +timestamp: 1779278686680 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda +sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 +md5: a360c33a5abe61c07959e449fa1453eb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 58592 +timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda +sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 +md5: e289f3d17880e44b633ba911d57a321b +depends: +- libfreetype6 >=2.14.3 +license: GPL-2.0-only OR FTL +size: 8049 +timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda +sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d +md5: fb16b4b69e3f1dcfe79d80db8fd0c55d +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libpng >=1.6.55,<1.7.0a0 +- libzlib >=1.3.2,<2.0a0 +constrains: +- freetype >=2.14.3 +license: GPL-2.0-only OR FTL +size: 384575 +timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda +sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 +md5: 57736f29cc2b0ec0b6c2952d3f101b6a +depends: +- __glibc >=2.17,<3.0.a0 +- _openmp_mutex >=4.5 +constrains: +- libgcc-ng ==15.2.0=*_19 +- libgomp 15.2.0 he0feb66_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 1041084 +timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda +sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 +md5: 331ee9b72b9dff570d56b1302c5ab37d +depends: +- libgcc 15.2.0 he0feb66_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27694 +timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda +sha256: 561a42758ef25b9ce308c4e2cf56daee4f06138385a17e29a492cd928e00be6f +md5: 42bf7eca1a951735fa06c0e3c0d5c8e6 +depends: +- libgfortran5 15.2.0 h68bc16d_19 +constrains: +- libgfortran-ng ==15.2.0=*_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27655 +timestamp: 1778269042954 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda +sha256: 057978bb69fea29ed715a9b98adf71015c31baecc4aeb2bfc20d4fd5d83579d4 +md5: 85072b0ad177c966294f129b7c04a2d5 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=15.2.0 +constrains: +- libgfortran 15.2.0 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 2483673 +timestamp: 1778269025089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda +sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b +md5: faac990cb7aedc7f3a2224f2c9b0c26c +depends: +- __glibc >=2.17,<3.0.a0 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 603817 +timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda +sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 +md5: 6178c6f2fb254558238ef4e6c56fb782 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- jpeg <0.0.0a +license: IJG AND BSD-3-Clause AND Zlib +size: 633831 +timestamp: 1775962768273 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-7_h47877c9_openblas.conda +build_number: 7 +sha256: 96962084921f197c9ad13fb7f8b324f2351d50ff3d8d962148751ad532f54a01 +md5: 6569b4f273740e25dc0dc7e3232c2a6c +depends: +- libblas 3.11.0 7_h4a7cf45_openblas +constrains: +- liblapacke 3.11.0 7*_openblas +- libcblas 3.11.0 7*_openblas +- blas 2.307 openblas +license: BSD-3-Clause +license_family: BSD +size: 18694 +timestamp: 1778489869038 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda +sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d +md5: b88d90cad08e6bc8ad540cb310a761fb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- xz 5.8.3.* +license: 0BSD +size: 113478 +timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda +sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 +md5: 2c21e66f50753a083cbe6b80f38268fa +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: BSD-2-Clause +license_family: BSD +size: 92400 +timestamp: 1769482286018 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda +sha256: 3d9aa85648e5e18a6d66db98b8c4317cc426721ad7a220aa86330d1ccedc8903 +md5: 2d3278b721e40468295ca755c3b84070 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libgfortran +- libgfortran5 >=14.3.0 +constrains: +- openblas >=0.3.33,<0.3.34.0a0 +license: BSD-3-Clause +license_family: BSD +size: 5931919 +timestamp: 1776993658641 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda +sha256: 377cfe037f3eeb3b1bf3ad333f724a64d32f315ee1958581fc671891d63d3f89 +md5: eba48a68a1a2b9d3c0d9511548db85db +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libzlib >=1.3.2,<2.0a0 +license: zlib-acknowledgement +size: 317729 +timestamp: 1776315175087 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda +sha256: 54cdcd3214313b62c2a8ee277e6f42150d9b748264c1b70d958bf735e420ef8d +md5: 7dc38adcbf71e6b38748e919e16e0dce +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libzlib >=1.3.2,<2.0a0 +license: blessing +size: 954962 +timestamp: 1777986471789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda +sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc +md5: 5794b3bdc38177caf969dabd3af08549 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc 15.2.0 he0feb66_19 +constrains: +- libstdcxx-ng ==15.2.0=*_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 5852044 +timestamp: 1778269036376 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda +sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 +md5: cd5a90476766d53e901500df9215e927 +depends: +- __glibc >=2.17,<3.0.a0 +- lerc >=4.0.0,<5.0a0 +- libdeflate >=1.25,<1.26.0a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.0,<4.0a0 +- liblzma >=5.8.1,<6.0a0 +- libstdcxx >=14 +- libwebp-base >=1.6.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- zstd >=1.5.7,<1.6.0a0 +license: HPND +size: 435273 +timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.1-h5347b49_0.conda +sha256: 3f0edf1280e2f6684a986f821eaa3e123d2694a00b31b96ca0d4a4c12c129231 +md5: 7d0a66598195ef00b6efc55aefc7453b +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: BSD-3-Clause +license_family: BSD +size: 40163 +timestamp: 1779118517630 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b +md5: aea31d2e5b1091feca96fcfe945c3cf9 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +constrains: +- libwebp 1.6.0 +license: BSD-3-Clause +license_family: BSD +size: 429011 +timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa +md5: 92ed62436b625154323d40d5f2f11dd7 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +- pthread-stubs +- xorg-libxau >=1.0.11,<2.0a0 +- xorg-libxdmcp +license: MIT +license_family: MIT +size: 395888 +timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda +sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 +md5: d87ff7921124eccd67248aa483c23fec +depends: +- __glibc >=2.17,<3.0.a0 +constrains: +- zlib 1.3.2 *_2 +license: Zlib +license_family: Other +size: 63629 +timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +sha256: 20e0892592a3e7c683e3d66df704a9425d731486a97c34fc56af4da1106b2b6b +md5: ba0a9221ce1063f31692c07370d062f3 +depends: +- importlib-metadata >=4.4 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 85893 +timestamp: 1770694658918 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +sha256: 0c4c35376fe920714390d46e4b8d31c876d65f18e1655899e0763ec25f2a902f +md5: 6d03368f2b2b0a5fb6839df53b2eb5e0 +depends: +- mdurl >=0.1,<1 +- python >=3.10 +license: MIT +license_family: MIT +size: 69017 +timestamp: 1778169663339 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda +sha256: c279be85b59a62d5c52f5dd9a4cd43ebd08933809a8416c22c3131595607d4cf +md5: 9a17c4307d23318476d7fbf0fedc0cde +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +constrains: +- jinja2 >=3.0.0 +license: BSD-3-Clause +license_family: BSD +size: 27424 +timestamp: 1772445227915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mathjax-2.7.7-ha770c72_3.tar.bz2 +sha256: 02fef69bde69db264a12f21386612262f545b6e3e68d8f1ccec19f3eaae58edf +md5: 86e69bd82c2a2c6fd29f5ab7e02b3691 +license: Apache-2.0 +license_family: Apache +size: 22281629 +timestamp: 1662784498331 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 +md5: 592132998493b3ff25fd7479396e8351 +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 14465 +timestamp: 1733255681319 +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +sha256: e86033aa55a9e915e2d0957e770bdb81e3feb26a227d1adb17f9d6c528da6a71 +md5: cdb20309681ba3ce8f52c110e214d4f3 +depends: +- click +- coloredlogs +- humanize +- importlib-metadata +- jinja2 >=3.0.0 +- jsonschema +- markdown +- natsort +- numpy +- packaging +- pillow >=10.2.0 +- plotly >=5.18 +- polars >=1.34.0 +- polars-runtime-compat >=1.34.0 +- pyaml-env +- pydantic >=2.7.1 +- python >=3.9,!=3.14.1 +- python-dotenv +- python-kaleido 0.2.1 +- pyyaml >=4 +- requests +- rich >=10 +- rich-click +- spectra >=0.0.10 +- tiktoken +- tqdm +- typeguard >=4 +license: GPL-3.0-or-later +license_family: GPL3 +size: 4282188 +timestamp: 1779465338806 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda +sha256: 70f43d62450927d51673eecd8823e14f5b3cfebdb43cda1d502eba97162bab42 +md5: 6687827c332121727ce383919e1ec8c2 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 284323 +timestamp: 1778929680962 +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 +md5: e941e85e273121222580723010bd4fa2 +depends: +- python >=3.9 +- python +license: MIT +license_family: MIT +size: 39262 +timestamp: 1770905275632 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda +sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 +md5: fc21868a1a5aacc937e7a18747acb8a5 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: X11 AND BSD-3-Clause +size: 918956 +timestamp: 1777422145199 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 +md5: a2c1eeadae7a309daed9d62c96012a2b +depends: +- python >=3.11 +- python +constrains: +- numpy >=1.25 +- scipy >=1.11.2 +- matplotlib-base >=3.8 +- pandas >=2.0 +license: BSD-3-Clause +license_family: BSD +size: 1587439 +timestamp: 1765215107045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nspr-4.38-h29cc59b_0.conda +sha256: e3664264bd936c357523b55c71ed5a30263c6ba278d726a75b1eb112e6fb0b64 +md5: e235d5566c9cc8970eb2798dd4ecf62f +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: MPL-2.0 +license_family: MOZILLA +size: 228588 +timestamp: 1762348634537 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nss-3.118-h445c969_0.conda +sha256: 44dd98ffeac859d84a6dcba79a2096193a42fc10b29b28a5115687a680dd6aea +md5: 567fbeed956c200c1db5782a424e58ee +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libsqlite >=3.51.0,<4.0a0 +- libstdcxx >=14 +- libzlib >=1.3.1,<2.0a0 +- nspr >=4.38,<5.0a0 +license: MPL-2.0 +license_family: MOZILLA +size: 2057773 +timestamp: 1763485556350 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py314h2b28147_0.conda +sha256: bc61ae892973751a6b0e6ecea57ed6d7053224bddcb007165d6ceb1d7344ad47 +md5: f49b5f950379e0b97c35ca97682f7c6a +depends: +- python +- libstdcxx >=14 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- liblapack >=3.9.0,<4.0a0 +- python_abi 3.14.* *_cp314 +- libblas >=3.9.0,<4.0a0 +- libcblas >=3.9.0,<4.0a0 +constrains: +- numpy-base <0a0 +license: BSD-3-Clause +license_family: BSD +size: 8928909 +timestamp: 1779169198391 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda +sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d +md5: 11b3379b191f63139e29c0d19dee24cd +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libpng >=1.6.50,<1.7.0a0 +- libstdcxx >=14 +- libtiff >=4.7.1,<4.8.0a0 +- libzlib >=1.3.1,<2.0a0 +license: BSD-2-Clause +license_family: BSD +size: 355400 +timestamp: 1758489294972 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda +sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb +md5: da1b85b6a87e141f5140bb9924cecab0 +depends: +- __glibc >=2.17,<3.0.a0 +- ca-certificates +- libgcc >=14 +license: Apache-2.0 +license_family: Apache +size: 3167099 +timestamp: 1775587756857 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 +md5: 4c06a92e74452cfa53623a81592e8934 +depends: +- python >=3.8 +- python +license: Apache-2.0 +license_family: APACHE +size: 91574 +timestamp: 1777103621679 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda +sha256: 123d8a7c16c88658b4f29e9f115a047598c941708dade74fbaff373a32dbec5e +md5: 76c4757c0ec9d11f969e8eb44899307b +depends: +- python +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- libtiff >=4.7.1,<4.8.0a0 +- openjpeg >=2.5.4,<3.0a0 +- libxcb >=1.17.0,<2.0a0 +- libwebp-base >=1.6.0,<2.0a0 +- zlib-ng >=2.3.3,<2.4.0a0 +- libjpeg-turbo >=3.1.2,<4.0a0 +- python_abi 3.14.* *_cp314 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 +- lcms2 >=2.18,<3.0a0 +- tk >=8.6.13,<8.7.0a0 +license: HPND +size: 1082797 +timestamp: 1775060059882 +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +sha256: c418d325359fc7a0074cea7f081ef1bce26e114d2da8a0154c5d27ecc87a08e7 +md5: 3e9427ee186846052e81fadde8ebe96a +depends: +- narwhals >=1.15.1 +- packaging +- python >=3.10 +constrains: +- ipywidgets >=7.6 +license: MIT +license_family: MIT +size: 5251872 +timestamp: 1772628857717 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +sha256: 70fc56877c4a095ee658d61924d8019768fbae4a48437058d181fc94b0a7c4d8 +md5: 25a883fed9f1f3f21ff317a3e7c92ac4 +depends: +- polars-runtime-32 ==1.41.0 +- python >=3.10 +- python +constrains: +- numpy >=1.16.0 +- pyarrow >=7.0.0 +- fastexcel >=0.9 +- openpyxl >=3.0.0 +- xlsx2csv >=0.8.0 +- connectorx >=0.3.2 +- deltalake >=1.0.0 +- pyiceberg >=0.7.1 +- altair >=5.4.0 +- great_tables >=0.8.0 +- polars-runtime-32 ==1.41.0 +- polars-runtime-64 ==1.41.0 +- polars-runtime-compat ==1.41.0 +license: MIT +size: 539656 +timestamp: 1779630790562 +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-32-1.41.0-py310h49dadd8_0.conda +noarch: python +sha256: e51ee3fe5259f2e115b2f78f8fbe3554e419c7c82b0c110878e12a5ff95ce3ab +md5: 7682765a1588e5ac887c99736d297c93 +depends: +- python +- __glibc >=2.17,<3.0.a0 +- libstdcxx >=14 +- libgcc >=14 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +size: 42578921 +timestamp: 1779630790562 +- conda: https://conda.anaconda.org/conda-forge/linux-64/polars-runtime-compat-1.41.0-py310hcbd6021_0.conda +noarch: python +sha256: 29c3831c92394af11d9f7d04882dda9479ffbb76a3d36ba155d52159d67805fa +md5: cb0b620c9914a07a9022cb8b183ea9ee +depends: +- python +- libstdcxx >=14 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +size: 41864944 +timestamp: 1779630722548 +- conda: https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.6-h18c060e_0.conda +sha256: 4ce2e1ee31a6217998f78c31ce7dc0a3e0557d9238b51d49dd20c52d467a126d +md5: f2c23a77b25efcad57d377b34bd84941 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-2.0-or-later AND LGPL-2.0-or-later +license_family: GPL +size: 593603 +timestamp: 1769710381284 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 +md5: b3c17d95b5a10c6e64a21fa17573e70e +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=13 +license: MIT +license_family: MIT +size: 8252 +timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +sha256: 58994e0d2ea8584cb399546e6f6896d771995e6121d1a7b6a2c9948388358932 +md5: e17be1016bcc3516827b836cd3e4d9dc +depends: +- python >=3.9 +- pyyaml >=5.0,<=7.0 +license: MIT +license_family: MIT +size: 14645 +timestamp: 1736766960536 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +sha256: 69700e31165df070e9716315e042196aa92525dae5deb5107785847ab9f4189f +md5: 729843edafc0899b3348bd3f19525b9d +depends: +- typing-inspection >=0.4.2 +- typing_extensions >=4.14.1 +- python >=3.10 +- annotated-types >=0.6.0 +- pydantic-core ==2.46.4 +- python +license: MIT +license_family: MIT +size: 346511 +timestamp: 1778103405862 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.46.4-py314h2e6c369_0.conda +sha256: 802e216c39f1359aed60823b6e11d8ccd812b0ae1c81ae5ac1c81f99446409ab +md5: 0c96993dbeadf3a277cf757b9f1c9412 +depends: +- python +- typing-extensions >=4.6.0,!=4.7.0 +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 1895020 +timestamp: 1778084229247 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda +sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 +md5: 16c18772b340887160c79a6acc022db0 +depends: +- python >=3.10 +license: BSD-2-Clause +license_family: BSD +size: 893031 +timestamp: 1774796815820 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 +md5: 461219d1a5bd61342293efa2c0c90eac +depends: +- __unix +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 21085 +timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.5-habeac84_100_cp314.conda +build_number: 100 +sha256: 55eed9bf2a3f6e90311276f0834737fe7c2d9ec3e5e2e557507858df4c7521e6 +md5: da92e59ff92f2d5ede4f612af20f583f +depends: +- __glibc >=2.17,<3.0.a0 +- bzip2 >=1.0.8,<2.0a0 +- ld_impl_linux-64 >=2.36.1 +- libexpat >=2.8.0,<3.0a0 +- libffi >=3.5.2,<3.6.0a0 +- libgcc >=14 +- liblzma >=5.8.3,<6.0a0 +- libmpdec >=4.0.0,<5.0a0 +- libsqlite >=3.53.1,<4.0a0 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 +- openssl >=3.5.6,<4.0a0 +- python_abi 3.14.* *_cp314 +- readline >=8.3,<9.0a0 +- tk >=8.6.13,<8.7.0a0 +- tzdata +- zstd >=1.5.7,<1.6.0a0 +license: Python-2.0 +size: 36745188 +timestamp: 1779236923603 +python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +sha256: 74e417a768f59f02a242c25e7db0aa796627b5bc8c818863b57786072aeb85e5 +md5: 130584ad9f3a513cdd71b1fdc1244e9c +depends: +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 27848 +timestamp: 1772388605021 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda +sha256: 41dd7da285d71d519257fa7dacb1cae060d5ebfaa5f92cba5994899d2978e943 +md5: 41954747ba952ec4b01e16c2c9e8d8ff +depends: +- cpython 3.14.5.* +- python_abi * *_cp314 +license: Python-2.0 +size: 50212 +timestamp: 1779236703009 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +sha256: e17bf63a30aec33432f1ead86e15e9febde9fc40a7f869c0e766be8d2db44170 +md5: 310259a5b03ff02289d7705f39e2b1d2 +depends: +- kaleido-core 0.2.1.* +- python >=3.5 +license: MIT +license_family: MIT +size: 18320 +timestamp: 1615204747600 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +build_number: 8 +sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 +md5: 0539938c55b6b1a59b560e843ad864a4 +constrains: +- python 3.14.* *_cp314 +license: BSD-3-Clause +license_family: BSD +size: 6989 +timestamp: 1752805904792 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda +sha256: b318fb070c7a1f89980ef124b80a0b5ccf3928143708a85e0053cde0169c699d +md5: 2035f68f96be30dc60a5dfd7452c7941 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +- yaml >=0.2.5,<0.3.0a0 +license: MIT +license_family: MIT +size: 202391 +timestamp: 1770223462836 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda +sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 +md5: d7d95fc8287ea7bf33e0e7116d2b95ec +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-3.0-only +license_family: GPL +size: 345073 +timestamp: 1765813471974 +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414 +md5: 870293df500ca7e18bedefa5838a22ab +depends: +- attrs >=22.2.0 +- python >=3.10 +- rpds-py >=0.7.0 +- typing_extensions >=4.4.0 +- python +license: MIT +license_family: MIT +size: 51788 +timestamp: 1760379115194 +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2026.5.9-py314h5bd0f2a_0.conda +sha256: c7a4aca4977c15c82d053b06cbc676460974c1b25757cfeea8a9a2497ac911f8 +md5: 9dd235b6ac69a0198080dac39f9891aa +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +license: Apache-2.0 AND CNRI-Python +license_family: PSF +size: 413611 +timestamp: 1778374155646 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da +md5: 4a85203c1d80c1059086ae860836ffb9 +depends: +- python >=3.10 +- certifi >=2023.5.7 +- charset-normalizer >=2,<4 +- idna >=2.5,<4 +- urllib3 >=1.26,<3 +- python +constrains: +- chardet >=3.0.2,<8 +license: Apache-2.0 +license_family: APACHE +size: 68709 +timestamp: 1778851103479 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +sha256: 3d6ba2c0fcdac3196ba2f0615b4104e532525ffa1335b50a2878be5ff488814a +md5: 0242025a3c804966bf71aa04eee82f66 +depends: +- markdown-it-py >=2.2.0 +- pygments >=2.13.0,<3.0.0 +- python >=3.10 +- typing_extensions >=4.0.0,<5.0.0 +- python +license: MIT +license_family: MIT +size: 208577 +timestamp: 1775991661559 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +sha256: aa3fcb167321bae51998de2e94d199109c9024f25a5a063cb1c28d8f1af33436 +md5: 0c20a8ebcddb24a45da89d5e917e6cb9 +depends: +- python >=3.10 +- rich >=12 +- click >=8 +- typing-extensions >=4 +- __unix +- python +license: MIT +license_family: MIT +size: 64356 +timestamp: 1769850479089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py314h2e6c369_0.conda +sha256: e53b0cbf3b324eaa03ca1fe1a688fdf4ab42cea9c25270b0a7307d8aaaa4f446 +md5: c1c368b5437b0d1a68f372ccf01cb133 +depends: +- python +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 376121 +timestamp: 1764543122774 +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +sha256: 7c65782d2511738e62c70462e89d65da4fa54d5a7e47c46667bcd27a59f81876 +md5: 472239e4eb7b5a84bb96b3ed7e3a596a +depends: +- colormath >=3.0.0 +- python >=3.9 +license: MIT +license_family: MIT +size: 22284 +timestamp: 1735770589188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.1-hbc0de68_0.conda +sha256: d167fa92781bcdcd3b9aaa6bb1cd50c5b108f6190c170098a118b5cf5df2f881 +md5: 8e0b8654ead18e50af552e54b5a08a61 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libsqlite 3.53.1 h0c1763c_0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 +- readline >=8.3,<9.0a0 +license: blessing +size: 205399 +timestamp: 1777986477546 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.12.0-py314h67fec18_3.conda +sha256: 7e395d67fd249d901beb1ae269057763c0d8c3ee5f7a348694bdb16d158a37d9 +md5: d705f9d8a1185a2b01cced191177a028 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +- regex >=2022.1.18 +- requests >=2.26.0 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 939648 +timestamp: 1764028306357 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda +sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac +md5: cffd3bdd58090148f4cfcd831f4b26ab +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +constrains: +- xorg-libx11 >=1.8.12,<2.0a0 +license: TCL +license_family: BSD +size: 3301196 +timestamp: 1769460227866 +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +sha256: 9ef8e47cf00e4d6dcc114eb32a1504cc18206300572ef14d76634ba29dfe1eb6 +md5: e5ce43272193b38c2e9037446c1d9206 +depends: +- python >=3.10 +- __unix +- python +license: MPL-2.0 and MIT +size: 94132 +timestamp: 1770153424136 +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda +sha256: 59d7851d32fddb5b510272e6557aa982edeb927d349648dac27f5bf01d18bb26 +md5: 4460f039b7dedf15f7df086446ca75ae +depends: +- typing_extensions >=4.14.0 +- python >=3.10 +- importlib-metadata >=3.6 +- python +constrains: +- pytest >=7 +license: MIT +license_family: MIT +size: 38297 +timestamp: 1778779291237 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c +md5: edd329d7d3a4ab45dcf905899a7a6115 +depends: +- typing_extensions ==4.15.0 pyhcf101f3_0 +license: PSF-2.0 +license_family: PSF +size: 91383 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda +sha256: 8b90d2f19f9458b8c58a55e1fcdc1d90c1603a847a47654d8a454549413ba60a +md5: 53f5409c5cfd6c5a66417d68e3f0a864 +depends: +- python >=3.10 +- typing_extensions >=4.12.0 +- python +license: MIT +license_family: MIT +size: 20935 +timestamp: 1777105465795 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 +md5: 0caa1af407ecff61170c9437a808404d +depends: +- python >=3.10 +- python +license: PSF-2.0 +license_family: PSF +size: 51692 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c +md5: ad659d0a2b3e47e38d829aa8cad2d610 +license: LicenseRef-Public-Domain +size: 119135 +timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +sha256: feff959a816f7988a0893201aa9727bbb7ee1e9cec2c4f0428269b489eb93fb4 +md5: cbb88288f74dbe6ada1c6c7d0a97223e +depends: +- backports.zstd >=1.0.0 +- brotli-python >=1.2.0 +- h2 >=4,<5 +- pysocks >=1.5.6,<2.0,!=1.5.7 +- python >=3.10 +license: MIT +license_family: MIT +size: 103560 +timestamp: 1778188657149 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda +sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b +md5: b2895afaf55bf96a8c8282a2e47a5de0 +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 15321 +timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda +sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 +md5: 1dafce8548e38671bea82e3f5c6ce22f +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 20591 +timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda +sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad +md5: a77f85f77be52ff59391544bfe73390a +depends: +- libgcc >=14 +- __glibc >=2.17,<3.0.a0 +license: MIT +license_family: MIT +size: 85189 +timestamp: 1753484064210 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 +md5: ba3dcdc8584155c97c648ae9c044b7a3 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 24190 +timestamp: 1779159948016 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda +sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f +md5: 2aadb0d17215603a82a2a6b0afd9a4cb +depends: +- __glibc >=2.17,<3.0.a0 +- libgcc >=14 +- libstdcxx >=14 +license: Zlib +license_family: Other +size: 122618 +timestamp: 1770167931827 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda +sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 +md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 +depends: +- __glibc >=2.17,<3.0.a0 +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 601375 +timestamp: 1764777111296 diff --git a/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt new file mode 100644 index 0000000..3d5b93d --- /dev/null +++ b/modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt @@ -0,0 +1,1476 @@ + +version: 6 +environments: +default: +channels: +- url: https://conda.anaconda.org/conda-forge/ +- url: https://conda.anaconda.org/bioconda/ +- url: https://conda.anaconda.org/bioconda/ +options: +pypi-prerelease-mode: if-necessary-or-explicit +packages: +linux-aarch64: +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.8.1-hfae3067_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.0-hba86a56_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kaleido-core-0.2.1-he5a581e_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-7_haddc8a3_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-7_hd72aa62_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-7_h88aeb00_openblas.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.1-h022381a_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.1-h1022ec0_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mathjax-2.7.7-h8af1aa0_3.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nspr-4.38-h3ad9384_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nss-3.118-h544fa81_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.6-py314he1698a1_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.2-h546c87b_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.41.0-py310h32c7c23_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.41.0-py310hc0e61be_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.46.4-py314h451b6cc_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.5-hfd9ac0a_100_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.5.9-py314h51f160d_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py314h02b7a91_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.53.1-he8854b5_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda +build_number: 20 +sha256: a2527b1d81792a0ccd2c05850960df119c2b6d8f5fdec97f2db7d25dc23b1068 +md5: 468fd3bb9e1f671d36c2cbc677e56f1d +depends: +- libgomp >=7.5.0 +constrains: +- openmp_impl <0.0a0 +license: BSD-3-Clause +license_family: BSD +size: 28926 +timestamp: 1770939656741 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda +sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 +md5: aaa2a381ccc56eac91d63b6c1240312f +depends: +- cpython +- python-gil +license: MIT +license_family: MIT +size: 8191 +timestamp: 1744137672556 +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda +sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 +md5: 2934f256a8acfe48f6ebb4fce6cde29c +depends: +- python >=3.9 +- typing-extensions >=4.0.0 +license: MIT +license_family: MIT +size: 18074 +timestamp: 1733247158254 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda +sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab +md5: c6b0543676ecb1fb2d7643941fe375f2 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 64927 +timestamp: 1773935801332 +- conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.5.0-py314h680f03e_0.conda +noarch: generic +sha256: a1c97297e867776760489537bc5ae36fa83a154be30e3b79385a39ca4cb058fe +md5: 1133126d840e75287d83947be3fc3e71 +depends: +- python >=3.14 +license: BSD-3-Clause AND MIT AND EPL-2.0 +size: 7533 +timestamp: 1778594057496 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py314h352cb57_1.conda +sha256: 5a5b0cdcd7ed89c6a8fb830924967f6314a2b71944bc1ebc2c105781ba97aa75 +md5: a1b5c571a0923a205d663d8678df4792 +depends: +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python >=3.14,<3.15.0a0 *_cp314 +- python_abi 3.14.* *_cp314 +constrains: +- libbrotlicommon 1.2.0 he30d5cf_1 +license: MIT +license_family: MIT +size: 373193 +timestamp: 1764017486851 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda +sha256: b3495077889dde6bb370938e7db82be545c73e8589696ad0843a32221520ad4c +md5: 840d8fc0d7b3209be93080bc20e07f2d +depends: +- libgcc >=14 +license: bzip2-1.0.6 +license_family: BSD +size: 192412 +timestamp: 1771350241232 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.5.20-hbd8a1cb_0.conda +sha256: 9812a303a1395e1dafbd92e5bc8a1ff6013bcbba0a09c7f03a8d23e43560aa9b +md5: 489b8e97e666c93f68fdb35c3c9b957f +depends: +- __unix +license: ISC +size: 129868 +timestamp: 1779289852439 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.5.20-pyhd8ed1ab_0.conda +sha256: 645655a3510e38e625da136595f3f16f2130c3263630cc3bc8f60f619ddbe490 +md5: 9fefff2f745ea1cc2ef15211a20c054a +depends: +- python >=3.10 +license: ISC +size: 134201 +timestamp: 1779285131141 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda +sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 +md5: a9167b9571f3baa9d448faa2139d1089 +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 58872 +timestamp: 1775127203018 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.0-pyhc90fa1f_0.conda +sha256: 99ab8ef815c4520cce3a7482c2513f377c14348206857661d84c76a55e030f97 +md5: 003767c47f1f0a474c4de268b57839c3 +depends: +- __unix +- python +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 104631 +timestamp: 1779108494556 +- conda: https://conda.anaconda.org/conda-forge/noarch/coloredlogs-15.0.1-pyhd8ed1ab_4.conda +sha256: 8021c76eeadbdd5784b881b165242db9449783e12ce26d6234060026fd6a8680 +md5: b866ff7007b934d564961066c8195983 +depends: +- humanfriendly >=9.1 +- python >=3.9 +license: MIT +license_family: MIT +size: 43758 +timestamp: 1733928076798 +- conda: https://conda.anaconda.org/conda-forge/noarch/colormath-3.0.0-pyhd8ed1ab_4.conda +sha256: 59c9e29800b483b390467f90e82b0da3a4fbf0612efe1c90813fca232780e160 +md5: 071cf7b0ce333c81718b054066c15102 +depends: +- networkx >=2.0 +- numpy +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 39326 +timestamp: 1735759976140 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.5-py314hd8ed1ab_100.conda +noarch: generic +sha256: 777882d2685f368417f31bbe1b28f73687fc6c8f6a5768bda20ffeefa6b07f5b +md5: a749029ce5d0632a913db19d17f944ab +depends: +- python >=3.14,<3.15.0a0 +- python_abi * *_cp314 +license: Python-2.0 +size: 50212 +timestamp: 1779236682725 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.8.1-hfae3067_0.conda +sha256: a9cd5eb1700e11cc39acc36630a2d72a4e317943bd7c5695cd8804419f04ff42 +md5: 89f0247b3cea528d8ad1a6664a313153 +depends: +- libexpat 2.8.1 hfae3067_0 +- libgcc >=14 +license: MIT +license_family: MIT +size: 140114 +timestamp: 1779278679081 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b +md5: 0c96522c6bdaed4b1566d11387caaf45 +license: BSD-3-Clause +license_family: BSD +size: 397370 +timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c +md5: 34893075a5c9e55cdafac56607368fc6 +license: OFL-1.1 +license_family: Other +size: 96530 +timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 +md5: 4d59c254e01d9cde7957100457e2d5fb +license: OFL-1.1 +license_family: Other +size: 700814 +timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 +md5: 49023d73832ef61042f6a237cb2687e7 +license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 +license_family: Other +size: 1620504 +timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.0-hba86a56_0.conda +sha256: 1805f4ab3d9e1734a5a17abccc2cb0fdade51d4d5f29bdc410600ea0115ec050 +md5: b660d59a9d0fb3297327418624acaec3 +depends: +- libexpat >=2.8.1,<3.0a0 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 +- libgcc >=14 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 +license: MIT +license_family: MIT +size: 293348 +timestamp: 1779421661332 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 +md5: a7970cd949a077b7cb9696379d338681 +depends: +- font-ttf-ubuntu +- font-ttf-inconsolata +- font-ttf-dejavu-sans-mono +- font-ttf-source-code-pro +license: BSD-3-Clause +license_family: BSD +size: 4059 +timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda +sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 +md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 +depends: +- python >=3.10 +- hyperframe >=6.1,<7 +- hpack >=4.1,<5 +- python +license: MIT +license_family: MIT +size: 95967 +timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda +sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba +md5: 0a802cb9888dd14eeefc611f05c40b6e +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 30731 +timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda +sha256: fa2071da7fab758c669e78227e6094f6b3608228740808a6de5d6bce83d9e52d +md5: 7fe569c10905402ed47024fc481bb371 +depends: +- __unix +- python >=3.9 +license: MIT +license_family: MIT +size: 73563 +timestamp: 1733928021866 +- conda: https://conda.anaconda.org/conda-forge/noarch/humanize-4.15.0-pyhd8ed1ab_0.conda +sha256: 6c4343b376d0b12a4c75ab992640970d36c933cad1fd924f6a1181fa91710e80 +md5: daddf757c3ecd6067b9af1df1f25d89e +depends: +- python >=3.10 +license: MIT +license_family: MIT +size: 67994 +timestamp: 1766267728652 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda +sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 +md5: 8e6923fc12f1fe8f8c4e5c9f343256ac +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 17397 +timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.15-pyhcf101f3_0.conda +sha256: 3d25f9f6f7ab3e1ce6429fc8c8aae0335cf446692e715068488536d220cc43de +md5: 1b9083b7f00609605d1483dbc6071a81 +depends: +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 62642 +timestamp: 1779294335905 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda +sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 +md5: ffc17e785d64e12fc311af9184221839 +depends: +- python >=3.10 +- zipp >=3.20 +- python +license: Apache-2.0 +size: 34766 +timestamp: 1779714582554 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b +md5: 04558c96691bed63104678757beb4f8d +depends: +- markupsafe >=2.0 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 120685 +timestamp: 1764517220861 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda +sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7 +md5: ada41c863af263cc4c5fcbaff7c3e4dc +depends: +- attrs >=22.2.0 +- jsonschema-specifications >=2023.3.6 +- python >=3.10 +- referencing >=0.28.4 +- rpds-py >=0.25.0 +- python +license: MIT +license_family: MIT +size: 82356 +timestamp: 1767839954256 +- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda +sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04 +md5: 439cd0f567d697b20a8f45cb70a1005a +depends: +- python >=3.10 +- referencing >=0.31.0 +- python +license: MIT +license_family: MIT +size: 19236 +timestamp: 1757335715225 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kaleido-core-0.2.1-he5a581e_0.tar.bz2 +sha256: d3c7f4797566e6f983d16c2a87063a18e4b2d819a66230190a21584d70042755 +md5: 4f0d284f5d11e04277b552eb1c172c7f +depends: +- __glibc >=2.17,<3.0.a0 +- expat >=2.2.10,<3.0.0a0 +- fontconfig +- fonts-conda-forge +- libgcc-ng >=9.3.0 +- mathjax 2.7.* +- nspr >=4.29,<5.0a0 +- nss >=3.62,<4.0a0 +- sqlite >=3.34.0,<4.0a0 +license: MIT +license_family: MIT +size: 65750397 +timestamp: 1615199465742 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_0.conda +sha256: 1e5f68e4b36a0e1a278c6dc026bc3d7775518a15832cbc9d7fc1c0e4c47784b1 +md5: b1f8bee3c53a6d2c103fb4a1ae44f5c4 +depends: +- libgcc >=14 +- libjpeg-turbo >=3.1.4.1,<4.0a0 +- libtiff >=4.7.1,<4.8.0a0 +license: MIT +license_family: MIT +size: 296899 +timestamp: 1778079402392 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda +sha256: 7abd913d81a9bf00abb699e8987966baa2065f5132e37e815f92d90fc6bba530 +md5: a21644fc4a83da26452a718dc9468d5f +depends: +- zstd >=1.5.7,<1.6.0a0 +constrains: +- binutils_impl_linux-aarch64 2.45.1 +license: GPL-3.0-only +license_family: GPL +size: 875596 +timestamp: 1774197520746 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda +sha256: 8957fd460c1c132c8031f65fd5f56ec3807fd71b7cab2c5e2b0937b13404ab36 +md5: d13423b06447113a90b5b1366d4da171 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: Apache-2.0 +license_family: Apache +size: 240444 +timestamp: 1773114901155 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-7_haddc8a3_openblas.conda +build_number: 7 +sha256: f27ba323c2f1e1731b5e880fe520f178f55047f25be94f77e649605b2343c066 +md5: e8d07b777f6ff1fab69665336561910b +depends: +- libopenblas >=0.3.33,<0.3.34.0a0 +- libopenblas >=0.3.33,<1.0a0 +constrains: +- liblapack 3.11.0 7*_openblas +- libcblas 3.11.0 7*_openblas +- mkl <2027 +- blas 2.307 openblas +- liblapacke 3.11.0 7*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18696 +timestamp: 1778489796402 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-7_hd72aa62_openblas.conda +build_number: 7 +sha256: c8f0192362966df0828419f042d6f94c079e5df00ad6bd05b5e84c12b42f8cc7 +md5: 90ac57b82c055faa9be25031864b7d8f +depends: +- libblas 3.11.0 7_haddc8a3_openblas +constrains: +- liblapack 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapacke 3.11.0 7*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18664 +timestamp: 1778489802790 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda +sha256: 48814b73bd462da6eed2e697e30c060ae16af21e9fbed30d64feaf0aad9da392 +md5: a9138815598fe6b91a1d6782ca657b0c +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 71117 +timestamp: 1761979776756 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_0.conda +sha256: 1fc392b997c6ee2bd3226a7cd870d0edbcbb367e25f9f18dd4a7025fced6efc0 +md5: 513dd884361dfb8a554298ed69b58823 +depends: +- libgcc >=14 +constrains: +- expat 2.8.1.* +license: MIT +license_family: MIT +size: 77140 +timestamp: 1779278671302 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda +sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 +md5: 2f364feefb6a7c00423e80dcb12db62a +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 55952 +timestamp: 1769456078358 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_0.conda +sha256: 752e4f66283d7deb4c6fd47d88df644d8daa2aaa825a54f3bf350a625190192a +md5: a229e22d4d8814a07702b0919d8e6701 +depends: +- libfreetype6 >=2.14.3 +license: GPL-2.0-only OR FTL +size: 8125 +timestamp: 1774301094057 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_0.conda +sha256: 8e6b27fe4eec4c2fa7b7769a21973734c8dba1de80086fb0213e58375ac09f4c +md5: b99ed99e42dafb27889483b3098cace7 +depends: +- libgcc >=14 +- libpng >=1.6.55,<1.7.0a0 +- libzlib >=1.3.2,<2.0a0 +constrains: +- freetype >=2.14.3 +license: GPL-2.0-only OR FTL +size: 422941 +timestamp: 1774301093473 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda +sha256: 4592b096e553f67799ae70d4b6167eeda3ec74587d68c7aecbf4e7b1df136681 +md5: f35b3f52d0a2ec4ffe3c89ba135cdb9a +depends: +- _openmp_mutex >=4.5 +constrains: +- libgomp 15.2.0 h8acb6b2_19 +- libgcc-ng ==15.2.0=*_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 622462 +timestamp: 1778268755949 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda +sha256: 1137f93f477f56199ded24117430045a0c02cbe8b10031beac3b9ad2138539d3 +md5: 770cf892e5530f43e63cadc673e85653 +depends: +- libgcc 15.2.0 h8acb6b2_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27738 +timestamp: 1778268759211 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda +sha256: e5ad94be72634233510b33ba792a3339921bd468f0b8bc6961ea05eded251d9b +md5: c7a5b5decf969ead5ecada83654164cf +depends: +- libgfortran5 15.2.0 h1b7bec0_19 +constrains: +- libgfortran-ng ==15.2.0=*_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 27728 +timestamp: 1778268784621 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda +sha256: af8e9bdcaa77f133a8ee4c1ef57ef564d9c45aa262abf9f5ef9b50eb99d96407 +md5: 779dbb494de6d3d6477cab52eb34285a +depends: +- libgcc >=15.2.0 +constrains: +- libgfortran 15.2.0 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 1487244 +timestamp: 1778268767295 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda +sha256: 2370ef0ffcbae5bede3c4bf136add4abc257245eb91f724c99bb4a43116c5a83 +md5: c5e8a379c4a2ec2aea4ba22758c001d9 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 587387 +timestamp: 1778268674393 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda +sha256: e97ec2af5f09f8f6ea8ecd550055c95ae80fae22015fcfadaa94eafe025c9ccc +md5: a85ba48648f6868016f2741fd9170250 +depends: +- libgcc >=14 +constrains: +- jpeg <0.0.0a +license: IJG AND BSD-3-Clause AND Zlib +size: 693143 +timestamp: 1775962625956 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-7_h88aeb00_openblas.conda +build_number: 7 +sha256: 20b38a0156200ac65f597bf0a93914c565435f2cc58b1042581854231a99ac35 +md5: 5899cbd743cc74fd655c1ed2af7120f3 +depends: +- libblas 3.11.0 7_haddc8a3_openblas +constrains: +- libcblas 3.11.0 7*_openblas +- blas 2.307 openblas +- liblapacke 3.11.0 7*_openblas +license: BSD-3-Clause +license_family: BSD +size: 18685 +timestamp: 1778489809140 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda +sha256: d61962b9cd54c3554361550203c64d5b65b71e3058a285b66e4b04b9769f0a5c +md5: 76298a9e6d71ee6e832a8d0d7373b261 +depends: +- libgcc >=14 +constrains: +- xz 5.8.3.* +license: 0BSD +size: 126102 +timestamp: 1775828008518 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda +sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 +md5: 7b9813e885482e3ccb1fa212b86d7fd0 +depends: +- libgcc >=14 +license: BSD-2-Clause +license_family: BSD +size: 114056 +timestamp: 1769482343003 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda +sha256: b018ecfb05e75a8eea3f21f6b5c5c2a54b5178bdcf19e2e2df2735740214a8c8 +md5: 58a66cd95e9692f08abe89f55a6f3f12 +depends: +- libgcc >=14 +- libgfortran +- libgfortran5 >=14.3.0 +constrains: +- openblas >=0.3.33,<0.3.34.0a0 +license: BSD-3-Clause +license_family: BSD +size: 5121336 +timestamp: 1776993423004 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda +sha256: 483eaa53da40a6a3e558709d9f7b1ca388735364ae21a1ba58cf942514649c92 +md5: f51503ac45a4888bce71af9027a2ecc9 +depends: +- libgcc >=14 +- libzlib >=1.3.2,<2.0a0 +license: zlib-acknowledgement +size: 341202 +timestamp: 1776315188425 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.1-h022381a_0.conda +sha256: ad03b7d8e4d08001f0df88ee7a56108bb35bae4795a42b9a04cc1abfa822bd07 +md5: 2ec1119217d8f0d086e9a62f3cb0e5ea +depends: +- libgcc >=14 +- libzlib >=1.3.2,<2.0a0 +license: blessing +size: 955361 +timestamp: 1777986487553 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda +sha256: 1dadc45e599f510dd5f97141dddcdbb9844d9f1430c1f3a38075cf1c58f87b4e +md5: 543fbc8d71f2a0baf04cf88ce96cb8bb +depends: +- libgcc 15.2.0 h8acb6b2_19 +constrains: +- libstdcxx-ng ==15.2.0=*_19 +license: GPL-3.0-only WITH GCC-exception-3.1 +license_family: GPL +size: 5546559 +timestamp: 1778268777463 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda +sha256: 7ff79470db39e803e21b8185bc8f19c460666d5557b1378d1b1e857d929c6b39 +md5: 8c6fd84f9c87ac00636007c6131e457d +depends: +- lerc >=4.0.0,<5.0a0 +- libdeflate >=1.25,<1.26.0a0 +- libgcc >=14 +- libjpeg-turbo >=3.1.0,<4.0a0 +- liblzma >=5.8.1,<6.0a0 +- libstdcxx >=14 +- libwebp-base >=1.6.0,<2.0a0 +- libzlib >=1.3.1,<2.0a0 +- zstd >=1.5.7,<1.6.0a0 +license: HPND +size: 488407 +timestamp: 1762022048105 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.1-h1022ec0_0.conda +sha256: 1628839b062e98b2192857d4da8496ac9ac6b0dbb77aa040c34efc9192c440ee +md5: 0f42f9fedd2a32d798de95a7f65c456f +depends: +- libgcc >=14 +license: BSD-3-Clause +license_family: BSD +size: 43453 +timestamp: 1779118526838 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda +sha256: b03700a1f741554e8e5712f9b06dd67e76f5301292958cd3cb1ac8c6fdd9ed25 +md5: 24e92d0942c799db387f5c9d7b81f1af +depends: +- libgcc >=14 +constrains: +- libwebp 1.6.0 +license: BSD-3-Clause +license_family: BSD +size: 359496 +timestamp: 1752160685488 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda +sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b +md5: cd14ee5cca2464a425b1dbfc24d90db2 +depends: +- libgcc >=13 +- pthread-stubs +- xorg-libxau >=1.0.11,<2.0a0 +- xorg-libxdmcp +license: MIT +license_family: MIT +size: 397493 +timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda +sha256: eb111e32e5a7313a5bf799c7fb2419051fa2fe7eff74769fac8d5a448b309f7f +md5: 502006882cf5461adced436e410046d1 +constrains: +- zlib 1.3.2 *_2 +license: Zlib +license_family: Other +size: 69833 +timestamp: 1774072605429 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-3.10.2-pyhcf101f3_0.conda +sha256: 20e0892592a3e7c683e3d66df704a9425d731486a97c34fc56af4da1106b2b6b +md5: ba0a9221ce1063f31692c07370d062f3 +depends: +- importlib-metadata >=4.4 +- python >=3.10 +- python +license: BSD-3-Clause +license_family: BSD +size: 85893 +timestamp: 1770694658918 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda +sha256: 0c4c35376fe920714390d46e4b8d31c876d65f18e1655899e0763ec25f2a902f +md5: 6d03368f2b2b0a5fb6839df53b2eb5e0 +depends: +- mdurl >=0.1,<1 +- python >=3.10 +license: MIT +license_family: MIT +size: 69017 +timestamp: 1778169663339 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda +sha256: 383c188496d13a55658c06e61e7d4cdff2c9f9d5a0648769fca8250bece7e0ef +md5: e5de3c36dd548b35ff2a8aa49208dcb3 +depends: +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +constrains: +- jinja2 >=3.0.0 +license: BSD-3-Clause +license_family: BSD +size: 27913 +timestamp: 1772446407659 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mathjax-2.7.7-h8af1aa0_3.tar.bz2 +sha256: 8fd4c79d6eda3d4cba73783114305a53a154ada4d1e334d4e02cb3521429599b +md5: 7b08314a6867a9d5648a1c3265e9eb8e +license: Apache-2.0 +license_family: Apache +size: 22257008 +timestamp: 1662784555011 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda +sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 +md5: 592132998493b3ff25fd7479396e8351 +depends: +- python >=3.9 +license: MIT +license_family: MIT +size: 14465 +timestamp: 1733255681319 +- conda: https://conda.anaconda.org/bioconda/noarch/multiqc-1.35-pyhdfd78af_1.conda +sha256: e86033aa55a9e915e2d0957e770bdb81e3feb26a227d1adb17f9d6c528da6a71 +md5: cdb20309681ba3ce8f52c110e214d4f3 +depends: +- click +- coloredlogs +- humanize +- importlib-metadata +- jinja2 >=3.0.0 +- jsonschema +- markdown +- natsort +- numpy +- packaging +- pillow >=10.2.0 +- plotly >=5.18 +- polars >=1.34.0 +- polars-runtime-compat >=1.34.0 +- pyaml-env +- pydantic >=2.7.1 +- python >=3.9,!=3.14.1 +- python-dotenv +- python-kaleido 0.2.1 +- pyyaml >=4 +- requests +- rich >=10 +- rich-click +- spectra >=0.0.10 +- tiktoken +- tqdm +- typeguard >=4 +license: GPL-3.0-or-later +license_family: GPL3 +size: 4282188 +timestamp: 1779465338806 +- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.21.2-pyhcf101f3_0.conda +sha256: 70f43d62450927d51673eecd8823e14f5b3cfebdb43cda1d502eba97162bab42 +md5: 6687827c332121727ce383919e1ec8c2 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 284323 +timestamp: 1778929680962 +- conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda +sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 +md5: e941e85e273121222580723010bd4fa2 +depends: +- python >=3.9 +- python +license: MIT +license_family: MIT +size: 39262 +timestamp: 1770905275632 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda +sha256: 369db85c5cd8d99dde364ce70725d76511d9c8199e5b820c740414091bf5bcca +md5: b2a43456aa56fe80c2477a5094899eff +depends: +- libgcc >=14 +license: X11 AND BSD-3-Clause +size: 960036 +timestamp: 1777422174534 +- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda +sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6 +md5: a2c1eeadae7a309daed9d62c96012a2b +depends: +- python >=3.11 +- python +constrains: +- numpy >=1.25 +- scipy >=1.11.2 +- matplotlib-base >=3.8 +- pandas >=2.0 +license: BSD-3-Clause +license_family: BSD +size: 1587439 +timestamp: 1765215107045 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nspr-4.38-h3ad9384_0.conda +sha256: 78a06e89285fef242e272998b292c1e621e3ee3dd4fba62ec014e503c7ec118f +md5: 6dd4f07147774bf720075a210f8026b9 +depends: +- libgcc >=14 +- libstdcxx >=14 +license: MPL-2.0 +license_family: MOZILLA +size: 235140 +timestamp: 1762350120355 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nss-3.118-h544fa81_0.conda +sha256: 48942696889367ffd448f8dccfc080fb7e130b9938a4a3b6b20ef8e6af856463 +md5: 4540f9570d12db2150f42ba036154552 +depends: +- libgcc >=14 +- libsqlite >=3.51.0,<4.0a0 +- libstdcxx >=14 +- libzlib >=1.3.1,<2.0a0 +- nspr >=4.38,<5.0a0 +license: MPL-2.0 +license_family: MOZILLA +size: 2061869 +timestamp: 1763490303490 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.6-py314he1698a1_0.conda +sha256: 04af718b911f8a3a0095481c7e283aa081a175fe626eccbc2c5644bcb2aba9a1 +md5: 8b173772deea177b45d2a133b509b3f7 +depends: +- python +- libstdcxx >=14 +- libgcc >=14 +- python_abi 3.14.* *_cp314 +- libblas >=3.9.0,<4.0a0 +- liblapack >=3.9.0,<4.0a0 +- libcblas >=3.9.0,<4.0a0 +constrains: +- numpy-base <0a0 +license: BSD-3-Clause +license_family: BSD +size: 8002900 +timestamp: 1779169206742 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda +sha256: bd1bc8bdde5e6c5cbac42d462b939694e40b59be6d0698f668515908640c77b8 +md5: cea962410e327262346d48d01f05936c +depends: +- libgcc >=14 +- libpng >=1.6.50,<1.7.0a0 +- libstdcxx >=14 +- libtiff >=4.7.1,<4.8.0a0 +- libzlib >=1.3.1,<2.0a0 +license: BSD-2-Clause +license_family: BSD +size: 392636 +timestamp: 1758489353577 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.2-h546c87b_0.conda +sha256: 348cb74c1530ac241215d047ef65d134cf797af935c97a68655319362b7e6a01 +md5: 3b129669089e4d6a5c6871dbb4669b99 +depends: +- ca-certificates +- libgcc >=14 +license: Apache-2.0 +license_family: Apache +size: 3706406 +timestamp: 1775589602258 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda +sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 +md5: 4c06a92e74452cfa53623a81592e8934 +depends: +- python >=3.8 +- python +license: Apache-2.0 +license_family: APACHE +size: 91574 +timestamp: 1777103621679 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda +sha256: 96b26c2657275ffe84ab510edf0865e21999d791485d12794edd4a71b837beb6 +md5: 87d58d103b47c4a8567b3d7666647684 +depends: +- python +- libgcc >=14 +- python 3.14.* *_cp314 +- openjpeg >=2.5.4,<3.0a0 +- libxcb >=1.17.0,<2.0a0 +- libwebp-base >=1.6.0,<2.0a0 +- zlib-ng >=2.3.3,<2.4.0a0 +- python_abi 3.14.* *_cp314 +- lcms2 >=2.18,<3.0a0 +- tk >=8.6.13,<8.7.0a0 +- libtiff >=4.7.1,<4.8.0a0 +- libjpeg-turbo >=3.1.2,<4.0a0 +- libfreetype >=2.14.3 +- libfreetype6 >=2.14.3 +license: HPND +size: 1062080 +timestamp: 1775060067775 +- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.6.0-pyhd8ed1ab_0.conda +sha256: c418d325359fc7a0074cea7f081ef1bce26e114d2da8a0154c5d27ecc87a08e7 +md5: 3e9427ee186846052e81fadde8ebe96a +depends: +- narwhals >=1.15.1 +- packaging +- python >=3.10 +constrains: +- ipywidgets >=7.6 +license: MIT +license_family: MIT +size: 5251872 +timestamp: 1772628857717 +- conda: https://conda.anaconda.org/conda-forge/noarch/polars-1.41.0-pyh58ad624_0.conda +sha256: 70fc56877c4a095ee658d61924d8019768fbae4a48437058d181fc94b0a7c4d8 +md5: 25a883fed9f1f3f21ff317a3e7c92ac4 +depends: +- polars-runtime-32 ==1.41.0 +- python >=3.10 +- python +constrains: +- numpy >=1.16.0 +- pyarrow >=7.0.0 +- fastexcel >=0.9 +- openpyxl >=3.0.0 +- xlsx2csv >=0.8.0 +- connectorx >=0.3.2 +- deltalake >=1.0.0 +- pyiceberg >=0.7.1 +- altair >=5.4.0 +- great_tables >=0.8.0 +- polars-runtime-32 ==1.41.0 +- polars-runtime-64 ==1.41.0 +- polars-runtime-compat ==1.41.0 +license: MIT +size: 539656 +timestamp: 1779630790562 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-32-1.41.0-py310h32c7c23_0.conda +noarch: python +sha256: d903b774ec09189e164207328aac157eee82fed8cc5c9ace46aeb5d1c15cb5b3 +md5: 8c08c506ed1ea8ce0ca37af5e918c58d +depends: +- python +- libgcc >=14 +- libstdcxx >=14 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +size: 38704429 +timestamp: 1779630794932 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/polars-runtime-compat-1.41.0-py310hc0e61be_0.conda +noarch: python +sha256: 101696adff43a654146376c62ef9611bf7946b95fa46f604fe247d77eefc6267 +md5: 65b73e4260677ee5162bdbb252e28e06 +depends: +- python +- libstdcxx >=14 +- libgcc >=14 +- _python_abi3_support 1.* +- cpython >=3.10 +constrains: +- __glibc >=2.17 +license: MIT +size: 38651498 +timestamp: 1779630714016 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/procps-ng-4.0.6-h1779866_0.conda +sha256: e9cbcbc94e151ada3d6dc365380aaaf591f65012c16d9a2abaea4b9b90adc402 +md5: ab7288cc39545556d1bc5e71ab2df9a9 +depends: +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-2.0-or-later AND LGPL-2.0-or-later +license_family: GPL +size: 636733 +timestamp: 1769712412683 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda +sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba +md5: bb5a90c93e3bac3d5690acf76b4a6386 +depends: +- libgcc >=13 +license: MIT +license_family: MIT +size: 8342 +timestamp: 1726803319942 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyaml-env-1.2.2-pyhd8ed1ab_0.conda +sha256: 58994e0d2ea8584cb399546e6f6896d771995e6121d1a7b6a2c9948388358932 +md5: e17be1016bcc3516827b836cd3e4d9dc +depends: +- python >=3.9 +- pyyaml >=5.0,<=7.0 +license: MIT +license_family: MIT +size: 14645 +timestamp: 1736766960536 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.13.4-pyhcf101f3_0.conda +sha256: 69700e31165df070e9716315e042196aa92525dae5deb5107785847ab9f4189f +md5: 729843edafc0899b3348bd3f19525b9d +depends: +- typing-inspection >=0.4.2 +- typing_extensions >=4.14.1 +- python >=3.10 +- annotated-types >=0.6.0 +- pydantic-core ==2.46.4 +- python +license: MIT +license_family: MIT +size: 346511 +timestamp: 1778103405862 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.46.4-py314h451b6cc_0.conda +sha256: 1a7c6b18e404c13c4d959888ecb48a9ed9de0e41be2872932b83a35278088df0 +md5: 9c3ace6aba6df14b943256095ac1281e +depends: +- python +- typing-extensions >=4.6.0,!=4.7.0 +- libgcc >=14 +- python 3.14.* *_cp314 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 1780773 +timestamp: 1778084251775 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda +sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 +md5: 16c18772b340887160c79a6acc022db0 +depends: +- python >=3.10 +license: BSD-2-Clause +license_family: BSD +size: 893031 +timestamp: 1774796815820 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda +sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 +md5: 461219d1a5bd61342293efa2c0c90eac +depends: +- __unix +- python >=3.9 +license: BSD-3-Clause +license_family: BSD +size: 21085 +timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.5-hfd9ac0a_100_cp314.conda +build_number: 100 +sha256: d37bad5447365346166c72950ea8f49689aa49cecc1b0623d00458427627b8df +md5: d956e09feb806f5974675ce92ad81d45 +depends: +- bzip2 >=1.0.8,<2.0a0 +- ld_impl_linux-aarch64 >=2.36.1 +- libexpat >=2.8.0,<3.0a0 +- libffi >=3.5.2,<3.6.0a0 +- libgcc >=14 +- liblzma >=5.8.3,<6.0a0 +- libmpdec >=4.0.0,<5.0a0 +- libsqlite >=3.53.1,<4.0a0 +- libuuid >=2.42.1,<3.0a0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 +- openssl >=3.5.6,<4.0a0 +- python_abi 3.14.* *_cp314 +- readline >=8.3,<9.0a0 +- tk >=8.6.13,<8.7.0a0 +- tzdata +- zstd >=1.5.7,<1.6.0a0 +license: Python-2.0 +size: 37510439 +timestamp: 1779236267040 +python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda +sha256: 74e417a768f59f02a242c25e7db0aa796627b5bc8c818863b57786072aeb85e5 +md5: 130584ad9f3a513cdd71b1fdc1244e9c +depends: +- python >=3.10 +license: BSD-3-Clause +license_family: BSD +size: 27848 +timestamp: 1772388605021 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.5-h4df99d1_100.conda +sha256: 41dd7da285d71d519257fa7dacb1cae060d5ebfaa5f92cba5994899d2978e943 +md5: 41954747ba952ec4b01e16c2c9e8d8ff +depends: +- cpython 3.14.5.* +- python_abi * *_cp314 +license: Python-2.0 +size: 50212 +timestamp: 1779236703009 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-kaleido-0.2.1-pyhd8ed1ab_0.tar.bz2 +sha256: e17bf63a30aec33432f1ead86e15e9febde9fc40a7f869c0e766be8d2db44170 +md5: 310259a5b03ff02289d7705f39e2b1d2 +depends: +- kaleido-core 0.2.1.* +- python >=3.5 +license: MIT +license_family: MIT +size: 18320 +timestamp: 1615204747600 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda +build_number: 8 +sha256: ad6d2e9ac39751cc0529dd1566a26751a0bf2542adb0c232533d32e176e21db5 +md5: 0539938c55b6b1a59b560e843ad864a4 +constrains: +- python 3.14.* *_cp314 +license: BSD-3-Clause +license_family: BSD +size: 6989 +timestamp: 1752805904792 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda +sha256: 496b5e65dfdd0aaaaa5de0dcaaf3bceea00fcb4398acf152f89e567c82ec1046 +md5: 9ae2c92975118058bd720e9ba2bb7c58 +depends: +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python >=3.14,<3.15.0a0 *_cp314 +- python_abi 3.14.* *_cp314 +- yaml >=0.2.5,<0.3.0a0 +license: MIT +license_family: MIT +size: 195678 +timestamp: 1770223441816 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda +sha256: fe695f9d215e9a2e3dd0ca7f56435ab4df24f5504b83865e3d295df36e88d216 +md5: 3d49cad61f829f4f0e0611547a9cda12 +depends: +- libgcc >=14 +- ncurses >=6.5,<7.0a0 +license: GPL-3.0-only +license_family: GPL +size: 357597 +timestamp: 1765815673644 +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda +sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414 +md5: 870293df500ca7e18bedefa5838a22ab +depends: +- attrs >=22.2.0 +- python >=3.10 +- rpds-py >=0.7.0 +- typing_extensions >=4.4.0 +- python +license: MIT +license_family: MIT +size: 51788 +timestamp: 1760379115194 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2026.5.9-py314h51f160d_0.conda +sha256: 05ef55f09f31eabd0a205f6b065e13fc746675f41924620977692ef0ffe5aad8 +md5: 34ed7bc9febeca70f55b757ca09c354d +depends: +- libgcc >=14 +- python >=3.14,<3.15.0a0 +- python >=3.14,<3.15.0a0 *_cp314 +- python_abi 3.14.* *_cp314 +license: Apache-2.0 AND CNRI-Python +license_family: PSF +size: 409780 +timestamp: 1778374195988 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda +sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da +md5: 4a85203c1d80c1059086ae860836ffb9 +depends: +- python >=3.10 +- certifi >=2023.5.7 +- charset-normalizer >=2,<4 +- idna >=2.5,<4 +- urllib3 >=1.26,<3 +- python +constrains: +- chardet >=3.0.2,<8 +license: Apache-2.0 +license_family: APACHE +size: 68709 +timestamp: 1778851103479 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-15.0.0-pyhcf101f3_0.conda +sha256: 3d6ba2c0fcdac3196ba2f0615b4104e532525ffa1335b50a2878be5ff488814a +md5: 0242025a3c804966bf71aa04eee82f66 +depends: +- markdown-it-py >=2.2.0 +- pygments >=2.13.0,<3.0.0 +- python >=3.10 +- typing_extensions >=4.0.0,<5.0.0 +- python +license: MIT +license_family: MIT +size: 208577 +timestamp: 1775991661559 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-click-1.9.7-pyh8f84b5b_0.conda +sha256: aa3fcb167321bae51998de2e94d199109c9024f25a5a063cb1c28d8f1af33436 +md5: 0c20a8ebcddb24a45da89d5e917e6cb9 +depends: +- python >=3.10 +- rich >=12 +- click >=8 +- typing-extensions >=4 +- __unix +- python +license: MIT +license_family: MIT +size: 64356 +timestamp: 1769850479089 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py314h02b7a91_0.conda +sha256: a587240f16eac7c6a80f9585cef679cd1cb9a287b8dfcdd36dcef1f7e7db15dc +md5: e7f6ed9e60043bb5cbcc527764897f0d +depends: +- python +- libgcc >=14 +- python_abi 3.14.* *_cp314 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 376332 +timestamp: 1764543345455 +- conda: https://conda.anaconda.org/conda-forge/noarch/spectra-0.0.11-pyhd8ed1ab_2.conda +sha256: 7c65782d2511738e62c70462e89d65da4fa54d5a7e47c46667bcd27a59f81876 +md5: 472239e4eb7b5a84bb96b3ed7e3a596a +depends: +- colormath >=3.0.0 +- python >=3.9 +license: MIT +license_family: MIT +size: 22284 +timestamp: 1735770589188 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.53.1-he8854b5_0.conda +sha256: 27467e4bfb0681546f149718c33b806fec078185fbaa6a4d17d440bc8f56185c +md5: 46009bdca2315a99e0a3a7d0ba1af3b9 +depends: +- libgcc >=14 +- libsqlite 3.53.1 h022381a_0 +- libzlib >=1.3.2,<2.0a0 +- ncurses >=6.6,<7.0a0 +- readline >=8.3,<9.0a0 +license: blessing +size: 209964 +timestamp: 1777986493350 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tiktoken-0.12.0-py314h6a36e60_3.conda +sha256: c1da41c79262b27efa168407cfecc47b20270e5fc071a8307f95a2c85fb94170 +md5: 55bf7b559202236157b14323b40f19e6 +depends: +- libgcc >=14 +- libstdcxx >=14 +- python >=3.14,<3.15.0a0 +- python_abi 3.14.* *_cp314 +- regex >=2022.1.18 +- requests >=2.26.0 +constrains: +- __glibc >=2.17 +license: MIT +license_family: MIT +size: 914402 +timestamp: 1764030357702 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda +sha256: e25c314b52764219f842b41aea2c98a059f06437392268f09b03561e4f6e5309 +md5: 7fc6affb9b01e567d2ef1d05b84aa6ed +depends: +- libgcc >=14 +- libzlib >=1.3.1,<2.0a0 +constrains: +- xorg-libx11 >=1.8.12,<2.0a0 +license: TCL +license_family: BSD +size: 3368666 +timestamp: 1769464148928 +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +sha256: 9ef8e47cf00e4d6dcc114eb32a1504cc18206300572ef14d76634ba29dfe1eb6 +md5: e5ce43272193b38c2e9037446c1d9206 +depends: +- python >=3.10 +- __unix +- python +license: MPL-2.0 and MIT +size: 94132 +timestamp: 1770153424136 +- conda: https://conda.anaconda.org/conda-forge/noarch/typeguard-4.5.2-pyhcf101f3_0.conda +sha256: 59d7851d32fddb5b510272e6557aa982edeb927d349648dac27f5bf01d18bb26 +md5: 4460f039b7dedf15f7df086446ca75ae +depends: +- typing_extensions >=4.14.0 +- python >=3.10 +- importlib-metadata >=3.6 +- python +constrains: +- pytest >=7 +license: MIT +license_family: MIT +size: 38297 +timestamp: 1778779291237 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda +sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c +md5: edd329d7d3a4ab45dcf905899a7a6115 +depends: +- typing_extensions ==4.15.0 pyhcf101f3_0 +license: PSF-2.0 +license_family: PSF +size: 91383 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda +sha256: 8b90d2f19f9458b8c58a55e1fcdc1d90c1603a847a47654d8a454549413ba60a +md5: 53f5409c5cfd6c5a66417d68e3f0a864 +depends: +- python >=3.10 +- typing_extensions >=4.12.0 +- python +license: MIT +license_family: MIT +size: 20935 +timestamp: 1777105465795 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda +sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 +md5: 0caa1af407ecff61170c9437a808404d +depends: +- python >=3.10 +- python +license: PSF-2.0 +license_family: PSF +size: 51692 +timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda +sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c +md5: ad659d0a2b3e47e38d829aa8cad2d610 +license: LicenseRef-Public-Domain +size: 119135 +timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda +sha256: feff959a816f7988a0893201aa9727bbb7ee1e9cec2c4f0428269b489eb93fb4 +md5: cbb88288f74dbe6ada1c6c7d0a97223e +depends: +- backports.zstd >=1.0.0 +- brotli-python >=1.2.0 +- h2 >=4,<5 +- pysocks >=1.5.6,<2.0,!=1.5.7 +- python >=3.10 +license: MIT +license_family: MIT +size: 103560 +timestamp: 1778188657149 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda +sha256: e9f6e931feeb2f40e1fdbafe41d3b665f1ab6cb39c5880a1fcf9f79a3f3c84a5 +md5: 1c246e1105000c3660558459e2fd6d43 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 16317 +timestamp: 1762977521691 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda +sha256: 128d72f36bcc8d2b4cdbec07507542e437c7d67f677b7d77b71ed9eeac7d6df1 +md5: bff06dcde4a707339d66d45d96ceb2e2 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 21039 +timestamp: 1762979038025 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda +sha256: 66265e943f32ce02396ad214e27cb35f5b0490b3bd4f064446390f9d67fa5d88 +md5: 032d8030e4a24fe1f72c74423a46fb88 +depends: +- libgcc >=14 +license: MIT +license_family: MIT +size: 88088 +timestamp: 1753484092643 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda +sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 +md5: ba3dcdc8584155c97c648ae9c044b7a3 +depends: +- python >=3.10 +- python +license: MIT +license_family: MIT +size: 24190 +timestamp: 1779159948016 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda +sha256: 638a3a41a4fbfed52d3c60c8ef5a3693b3f12a5b1a3f58fa29f5698d0a0702e2 +md5: f731af71c723065d91b4c01bb822641b +depends: +- libgcc >=14 +- libstdcxx >=14 +license: Zlib +license_family: Other +size: 121046 +timestamp: 1770167944449 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda +sha256: 569990cf12e46f9df540275146da567d9c618c1e9c7a0bc9d9cfefadaed20b75 +md5: c3655f82dcea2aa179b291e7099c1fcc +depends: +- libzlib >=1.3.1,<2.0a0 +license: BSD-3-Clause +license_family: BSD +size: 614429 +timestamp: 1764777145593 diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index a31464c..7a970e2 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,7 @@ -name: multiqc +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.24.1 + - bioconda::multiqc=1.35 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index d536580..c4bc715 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,24 +1,21 @@ process MULTIQC { + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.24.1--pyhdfd78af_0' : - 'biocontainers/multiqc:1.24.1--pyhdfd78af_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c8/c8e346f4f6080eadf1253505e6ff09ef004454fc18e8d672006fd7b222cc412e/data' + : 'community.wave.seqera.io/library/multiqc:1.35--c17fb751507e9dfc'}" input: - path multiqc_files, stageAs: "?/*" - path(multiqc_config) - path(extra_multiqc_config) - path(multiqc_logo) - path(replace_names) - path(sample_names) + tuple val(meta), path(multiqc_files, stageAs: "?/*"), path(multiqc_config, stageAs: "?/*"), path(multiqc_logo), path(replace_names), path(sample_names) output: - path "*multiqc_report.html", emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - path "versions.yml" , emit: versions + tuple val(meta), path("*.html"), emit: report + tuple val(meta), path("*_data"), emit: data + tuple val(meta), path("*_plots"), emit: plots, optional: true + // MultiQC should not push its versions to the `versions` topic. Its input depends on the versions topic to be resolved thus outputting to the topic will let the pipeline hang forever + tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions when: task.ext.when == null || task.ext.when @@ -26,38 +23,28 @@ process MULTIQC { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' - def config = multiqc_config ? "--config $multiqc_config" : '' - def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def config = multiqc_config ? multiqc_config instanceof List ? "--config ${multiqc_config.join(' --config ')}" : "--config ${multiqc_config}" : "" + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' def replace = replace_names ? "--replace-names ${replace_names}" : '' def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ - $args \\ - $config \\ - $prefix \\ - $extra_config \\ - $logo \\ - $replace \\ - $samples \\ + ${args} \\ + ${config} \\ + ${prefix} \\ + ${logo} \\ + ${replace} \\ + ${samples} \\ . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ stub: """ mkdir multiqc_data - touch multiqc_plots + touch multiqc_data/.stub + mkdir multiqc_plots + touch multiqc_plots/.stub touch multiqc_report.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ } diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 382c08c..27ce18d 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples + into a single report keywords: - QC - bioinformatics tools @@ -11,54 +12,91 @@ tools: It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ - licence: ["GPL-3.0-or-later"] + licence: + - "GPL-3.0-or-later" + identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. - pattern: "*.{yml,yaml}" - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" - - replace_names: - type: file - description: | - Optional two-column sample renaming file. First column a set of - patterns, second column a set of corresponding replacements. Passed via - MultiQC's `--replace-names` option. - pattern: "*.{tsv}" - - sample_names: - type: file - description: | - Optional TSV file with headers, passed to the MultiQC --sample_names - argument. - pattern: "*.{tsv}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + ontologies: [] + - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 + - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + ontologies: [] + - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 + - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 output: - - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" - - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" - - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*.html": + type: file + description: MultiQC report file + pattern: ".html" + ontologies: [] + data: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + plots: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_plots" + ontologies: [] + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - multiqc: + type: string + description: The tool name + - multiqc --version | sed "s/.* //g": + type: eval + description: The expression to obtain the version of the tool authors: - "@abhi18av" - "@bunop" @@ -69,3 +107,27 @@ maintainers: - "@bunop" - "@drpatelh" - "@jfy133" +containers: + conda: + linux/amd64: + lock_file: modules/nf-core/multiqc/.conda-lock/linux_amd64-bd-c17fb751507e9dfc_1.txt + linux/arm64: + lock_file: modules/nf-core/multiqc/.conda-lock/linux_arm64-bd-5c84a5000a226ab5_1.txt + docker: + linux/amd64: + name: community.wave.seqera.io/library/multiqc:1.35--c17fb751507e9dfc + build_id: bd-c17fb751507e9dfc_1 + scan_id: sc-3b1b3932f9846892_1 + linux/arm64: + name: community.wave.seqera.io/library/multiqc:1.35--5c84a5000a226ab5 + build_id: bd-5c84a5000a226ab5_1 + scan_id: sc-0d39df41e9737bbd_1 + singularity: + linux/amd64: + name: oras://community.wave.seqera.io/library/multiqc:1.35--c680f2aea25ccec2 + build_id: bd-c680f2aea25ccec2_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c8/c8e346f4f6080eadf1253505e6ff09ef004454fc18e8d672006fd7b222cc412e/data + linux/arm64: + name: oras://community.wave.seqera.io/library/multiqc:1.35--c0468833d65b2f81 + build_id: bd-c0468833d65b2f81_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e4/e48aa28aebc881254a499b24c3e1ce77b8df1b85a5432699ed6f72eb17ac7fb5/data diff --git a/modules/nf-core/multiqc/tests/custom_prefix.config b/modules/nf-core/multiqc/tests/custom_prefix.config new file mode 100644 index 0000000..b30b135 --- /dev/null +++ b/modules/nf-core/multiqc/tests/custom_prefix.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = "custom_prefix" + } +} diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index 33316a7..4cbdb95 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -15,25 +15,84 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_single") } - ) + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() + } + } + + test("sarscov2 single-end [fastqc] - custom prefix") { + config "./custom_prefix.config" + + when { + process { + """ + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) + """ + } } + then { + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() + } } test("sarscov2 single-end [fastqc] [config]") { @@ -41,23 +100,85 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/seqinspector/1.0.0/assets/multiqc_config.yml", checkIfExists: true), + [], + [], + [] + ]) """ } } then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_config") } - ) + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() + } + } + + test("sarscov2 single-end [fastqc] [multiple configs]") { + + when { + process { + """ + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [ + file("https://raw.githubusercontent.com/nf-core/seqinspector/1.0.0/assets/multiqc_config.yml", checkIfExists: true), + file("https://raw.githubusercontent.com/nf-core/seqinspector/1.0.0/assets/multiqc_config.yml", checkIfExists: true) + ], + [], + [], + [] + ]) + """ + } + } + + then { + assert process.success + assert snapshot( + sanitizeOutput(process.out).collectEntries { key, val -> + if (key == "data") { + return [key, val.collect { [path(it[1]).list().collect { file(it.toString()).name }] }] + } + else if (key == "plots") { + return [key, val.collect { [ + "pdf", + path("${it[1]}/pdf").list().collect { file(it.toString()).name }, + "png", + path("${it[1]}/png").list().collect { file(it.toString()).name }, + "svg", + path("${it[1]}/svg").list().collect { file(it.toString()).name }] }] + } + else if (key == "report") { + return [key, file(val[0][1].toString()).name] + } + return [key, val] + } + ).match() } } @@ -68,25 +189,23 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out.report.collect { file(it).getName() } + - process.out.data.collect { file(it).getName() } + - process.out.plots.collect { file(it).getName() } + - process.out.versions ).match("multiqc_stub") } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } - } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 83fa080..4489921 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -1,41 +1,422 @@ { - "multiqc_versions_single": { + "sarscov2 single-end [fastqc] [multiple configs]": { "content": [ - [ - "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" - ] + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "multiqc_report.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.35" + ] + ] + } ], + "timestamp": "2026-03-17T16:15:42.577775492", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-10T12:41:34.562023" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, - "multiqc_stub": { + "sarscov2 single-end [fastqc]": { "content": [ - [ - "multiqc_report.html", - "multiqc_data", - "multiqc_plots", - "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" - ] + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_software_versions.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "multiqc_report.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.35" + ] + ] + } ], + "timestamp": "2026-03-17T16:21:17.072841555", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-10T11:27:11.933869532" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, - "multiqc_versions_config": { + "sarscov2 single-end [fastqc] - stub": { "content": [ - [ - "versions.yml:md5,6eb13f3b11bbcbfc98ad3166420ff760" - ] + { + "data": [ + [ + { + "id": "FASTQC" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "plots": [ + [ + { + "id": "FASTQC" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "report": [ + [ + { + "id": "FASTQC" + }, + "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.35" + ] + ] + } ], + "timestamp": "2026-02-26T15:14:39.789193051", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-10T11:26:56.709849369" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 single-end [fastqc] [config]": { + "content": [ + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "multiqc_report.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.35" + ] + ] + } + ], + "timestamp": "2026-03-17T16:15:30.372239611", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "sarscov2 single-end [fastqc] - custom prefix": { + "content": [ + { + "data": [ + [ + [ + "fastqc-status-check-heatmap.txt", + "fastqc_overrepresented_sequences_plot.txt", + "fastqc_per_base_n_content_plot.txt", + "fastqc_per_base_sequence_quality_plot.txt", + "fastqc_per_sequence_gc_content_plot_Counts.txt", + "fastqc_per_sequence_gc_content_plot_Percentages.txt", + "fastqc_per_sequence_quality_scores_plot.txt", + "fastqc_sequence_counts_plot.txt", + "fastqc_sequence_duplication_levels_plot.txt", + "fastqc_sequence_length_distribution_plot.txt", + "fastqc_top_overrepresented_sequences_table.txt", + "llms-full.txt", + "multiqc.log", + "multiqc.parquet", + "multiqc_citations.txt", + "multiqc_data.json", + "multiqc_fastqc.txt", + "multiqc_general_stats.txt", + "multiqc_software_versions.txt", + "multiqc_sources.txt" + ] + ] + ], + "plots": [ + [ + "pdf", + [ + "fastqc-status-check-heatmap.pdf", + "fastqc_overrepresented_sequences_plot.pdf", + "fastqc_per_base_n_content_plot.pdf", + "fastqc_per_base_sequence_quality_plot.pdf", + "fastqc_per_sequence_gc_content_plot_Counts.pdf", + "fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "fastqc_per_sequence_quality_scores_plot.pdf", + "fastqc_sequence_counts_plot-cnt.pdf", + "fastqc_sequence_counts_plot-pct.pdf", + "fastqc_sequence_duplication_levels_plot.pdf", + "fastqc_sequence_length_distribution_plot.pdf", + "fastqc_top_overrepresented_sequences_table.pdf" + ], + "png", + [ + "fastqc-status-check-heatmap.png", + "fastqc_overrepresented_sequences_plot.png", + "fastqc_per_base_n_content_plot.png", + "fastqc_per_base_sequence_quality_plot.png", + "fastqc_per_sequence_gc_content_plot_Counts.png", + "fastqc_per_sequence_gc_content_plot_Percentages.png", + "fastqc_per_sequence_quality_scores_plot.png", + "fastqc_sequence_counts_plot-cnt.png", + "fastqc_sequence_counts_plot-pct.png", + "fastqc_sequence_duplication_levels_plot.png", + "fastqc_sequence_length_distribution_plot.png", + "fastqc_top_overrepresented_sequences_table.png" + ], + "svg", + [ + "fastqc-status-check-heatmap.svg", + "fastqc_overrepresented_sequences_plot.svg", + "fastqc_per_base_n_content_plot.svg", + "fastqc_per_base_sequence_quality_plot.svg", + "fastqc_per_sequence_gc_content_plot_Counts.svg", + "fastqc_per_sequence_gc_content_plot_Percentages.svg", + "fastqc_per_sequence_quality_scores_plot.svg", + "fastqc_sequence_counts_plot-cnt.svg", + "fastqc_sequence_counts_plot-pct.svg", + "fastqc_sequence_duplication_levels_plot.svg", + "fastqc_sequence_length_distribution_plot.svg", + "fastqc_top_overrepresented_sequences_table.svg" + ] + ] + ], + "report": "custom_prefix.html", + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.35" + ] + ] + } + ], + "timestamp": "2026-03-17T16:15:18.189023981", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } -} +} \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config index c537a6a..374dfef 100644 --- a/modules/nf-core/multiqc/tests/nextflow.config +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -1,5 +1,6 @@ process { withName: 'MULTIQC' { ext.prefix = null + ext.args = '-p' } } diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml deleted file mode 100644 index bea6c0d..0000000 --- a/modules/nf-core/multiqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -multiqc: - - modules/nf-core/multiqc/** diff --git a/modules/nf-core/pbccs/environment.yml b/modules/nf-core/pbccs/environment.yml index bdc662b..6502384 100644 --- a/modules/nf-core/pbccs/environment.yml +++ b/modules/nf-core/pbccs/environment.yml @@ -1,7 +1,7 @@ -name: pbccs +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::pbccs=6.4.0 diff --git a/modules/nf-core/pbccs/main.nf b/modules/nf-core/pbccs/main.nf index dd2d0ad..54911ce 100644 --- a/modules/nf-core/pbccs/main.nf +++ b/modules/nf-core/pbccs/main.nf @@ -3,9 +3,9 @@ process PBCCS { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/pbccs:6.4.0--h9ee0642_0' : - 'biocontainers/pbccs:6.4.0--h9ee0642_0' }" + 'quay.io/biocontainers/pbccs:6.4.0--h9ee0642_0' }" input: tuple val(meta), path(bam), path(pbi) @@ -18,7 +18,7 @@ process PBCCS { tuple val(meta), path("*.report.txt" ) , emit: report_txt tuple val(meta), path("*.report.json" ) , emit: report_json tuple val(meta), path("*.metrics.json.gz"), emit: metrics - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('pbccs'), eval("ccs --version 2>&1 | sed '1!d;s/^.*ccs //; s/ .*//'"), topic: versions, emit: versions_pbccs when: task.ext.when == null || task.ext.when @@ -28,35 +28,23 @@ process PBCCS { def prefix = task.ext.prefix ?: "${meta.id}" """ ccs \\ - $bam \\ + ${bam} \\ ${prefix}.chunk${chunk_num}.bam \\ --report-file ${prefix}.chunk${chunk_num}.report.txt \\ --report-json ${prefix}.chunk${chunk_num}.report.json \\ --metrics-json ${prefix}.chunk${chunk_num}.metrics.json.gz \\ - --chunk $chunk_num/$chunk_on \\ - -j $task.cpus \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - pbccs: \$(echo \$(ccs --version 2>&1) | grep 'ccs' | sed 's/^.*ccs //; s/ .*\$//') - END_VERSIONS + --chunk ${chunk_num}/${chunk_on} \\ + -j ${task.cpus} \\ + ${args} """ stub: - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - touch dummy.chunk1.bam - touch dummy.chunk1.bam.pbi - touch dummy.report.txt - touch dummy.report.json - echo "test" > dummy.metrics.json - gzip dummy.metrics.json - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - pbccs: \$(echo \$(ccs --version 2>&1) | grep 'ccs' | sed 's/^.*ccs //; s/ .*\$//') - END_VERSIONS + touch ${prefix}.chunk1.bam + touch ${prefix}.chunk1.bam.pbi + touch ${prefix}.report.txt + touch ${prefix}.report.json + echo "" | gzip > ${prefix}.metrics.json.gz """ } diff --git a/modules/nf-core/pbccs/meta.yml b/modules/nf-core/pbccs/meta.yml index ded53e0..ad34f9d 100644 --- a/modules/nf-core/pbccs/meta.yml +++ b/modules/nf-core/pbccs/meta.yml @@ -1,5 +1,5 @@ name: pbccs -description: Pacbio ccs - Generate Higly Accurate Single-Molecule Consensus Reads +description: Pacbio ccs - Generate Highly Accurate Single-Molecule Consensus Reads keywords: - ccs - pacbio @@ -11,21 +11,25 @@ tools: homepage: https://github.com/PacificBiosciences/pbbioconda documentation: https://ccs.how/ tool_dev_url: https://github.com/PacificBiosciences/ccs - licence: ["BSD-3-Clause-Clear"] + licence: + - "BSD-3-Clause-Clear" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - id: id of the split file - - bam: - type: file - description: Raw subreads bam - pattern: "*.subreads.bam" - - pbi: - type: file - description: Pacbio BAM Index - pattern: "*.pbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + id: id of the split file + - bam: + type: file + description: Raw subreads bam + pattern: "*.subreads.bam" + ontologies: [] + - pbi: + type: file + description: Pacbio BAM Index + pattern: "*.pbi" + ontologies: [] - chunk_num: type: integer description: BAM part to process @@ -33,35 +37,87 @@ input: type: integer description: Total number of bam parts to process output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bam: - type: file - description: CCS sequences in bam format - pattern: "*.bam" - - pbi: - type: file - description: PacBio Index of CCS sequences - pattern: "*.pbi" - - report_txt: - type: file - description: Summary of CCS in txt format - pattern: ".txt" - - report_json: - type: file - description: Summary of CCS in txt json - pattern: ".json" - - metrics: - type: file - description: Metrics about zmws - pattern: "*.json.gz" + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.chunk*.bam": + type: file + description: CCS sequences in bam format + pattern: "*.bam" + ontologies: [] + pbi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.chunk*.bam.pbi": + type: file + description: PacBio Index of CCS sequences + pattern: "*.pbi" + ontologies: [] + report_txt: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.report.txt": + type: file + description: CCS report in text format + pattern: "*.report.txt" + ontologies: + - edam: http://edamontology.org/format_2330 # Textual format + report_json: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.report.json": + type: file + description: CCS report in JSON format + pattern: "*.report.json" + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + metrics: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics.json.gz": + type: file + description: Metrics about zmws + pattern: "*.json.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + versions_pbccs: + - - ${task.process}: + type: string + description: The name of the process + - pbccs: + type: string + description: The name of the tool + - ccs --version 2>&1 | sed '1!d;s/^.*ccs //; s/ .*//': + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - pbccs: + type: string + description: The name of the tool + - ccs --version 2>&1 | sed '1!d;s/^.*ccs //; s/ .*//': + type: eval + description: The expression to obtain the version of the tool + authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/pbccs/tests/main.nf.test b/modules/nf-core/pbccs/tests/main.nf.test index ef70d05..d1bf33c 100644 --- a/modules/nf-core/pbccs/tests/main.nf.test +++ b/modules/nf-core/pbccs/tests/main.nf.test @@ -15,7 +15,7 @@ nextflow_process { process { """ input[0] = [ - [ id:'alz' ], // meta map + [ id:'alz' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/alz.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/alz.bam.pbi', checkIfExists: true) ] @@ -28,12 +28,9 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.bam).match("bam") }, - { assert snapshot(process.out.pbi).match("pbi") }, - { assert snapshot(process.out.report_txt).match("report_txt") }, { assert path(process.out.report_json.get(0).get(1)).text.contains("pbcopper") }, { assert path(process.out.metrics.get(0).get(1)).linesGzip.get(0).toString().contains("zmws") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(sanitizeOutput(process.out, unstableKeys:["metrics", "report_json"])).match() } ) } @@ -47,7 +44,7 @@ nextflow_process { process { """ input[0] = [ - [ id:'alz' ], // meta map + [ id:'alz' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/alz.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/alz.bam.pbi', checkIfExists: true) ] @@ -60,7 +57,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } diff --git a/modules/nf-core/pbccs/tests/main.nf.test.snap b/modules/nf-core/pbccs/tests/main.nf.test.snap index b47348c..4555082 100644 --- a/modules/nf-core/pbccs/tests/main.nf.test.snap +++ b/modules/nf-core/pbccs/tests/main.nf.test.snap @@ -1,102 +1,71 @@ { - "versions": { - "content": [ - [ - "versions.yml:md5,391e95cf678a7992d6d3f3b437efc61a" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T08:38:30.999138" - }, - "pbi": { - "content": [ - [ - [ - { - "id": "alz" - }, - "alz.chunk2.bam.pbi:md5,36c3d2843aae90739ee8ca82d27abd55" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T16:37:53.581983" - }, - "report_txt": { - "content": [ - [ - [ - { - "id": "alz" - }, - "alz.chunk2.report.txt:md5,67583febb144333e3f854c7bf4a17a50" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T16:37:53.600993" - }, - "PacBio pbccs - Compute CSS test - stub": { + "PacBio pbccs - Compute CSS test": { "content": [ { - "0": [ + "bam": [ [ { "id": "alz" }, - "dummy.chunk1.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.chunk2.bam:md5,4f99cfdecba7d1d140530608afffa822" ] ], - "1": [ + "metrics": [ [ { "id": "alz" }, - "dummy.chunk1.bam.pbi:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.chunk2.metrics.json.gz" ] ], - "2": [ + "pbi": [ [ { "id": "alz" }, - "dummy.report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.chunk2.bam.pbi:md5,2a8630a2a6f58cb65ecb9c1c1ff705fb" ] ], - "3": [ + "report_json": [ [ { "id": "alz" }, - "dummy.report.json:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.chunk2.report.json" ] ], - "4": [ + "report_txt": [ [ { "id": "alz" }, - "dummy.metrics.json.gz:md5,d8e8fca2dc0f896fd7cb4cb0031ba249" + "alz.chunk2.report.txt:md5,67583febb144333e3f854c7bf4a17a50" ] ], - "5": [ - "versions.yml:md5,391e95cf678a7992d6d3f3b437efc61a" - ], + "versions_pbccs": [ + [ + "PBCCS", + "pbccs", + "6.4.0" + ] + ] + } + ], + "timestamp": "2026-08-04T11:54:37.539447047", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "PacBio pbccs - Compute CSS test - stub": { + "content": [ + { "bam": [ [ { "id": "alz" }, - "dummy.chunk1.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.chunk1.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "metrics": [ @@ -104,7 +73,7 @@ { "id": "alz" }, - "dummy.metrics.json.gz:md5,d8e8fca2dc0f896fd7cb4cb0031ba249" + "alz.metrics.json.gz:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], "pbi": [ @@ -112,7 +81,7 @@ { "id": "alz" }, - "dummy.chunk1.bam.pbi:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.chunk1.bam.pbi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "report_json": [ @@ -120,7 +89,7 @@ { "id": "alz" }, - "dummy.report.json:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.report.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "report_txt": [ @@ -128,35 +97,22 @@ { "id": "alz" }, - "dummy.report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "alz.report.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,391e95cf678a7992d6d3f3b437efc61a" + "versions_pbccs": [ + [ + "PBCCS", + "pbccs", + "6.4.0" + ] ] } ], + "timestamp": "2026-08-04T11:50:21.212231706", "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T10:24:03.471175" - }, - "bam": { - "content": [ - [ - [ - { - "id": "alz" - }, - "alz.chunk2.bam:md5,306ba0287e3c7f4cd8f5af577af7ac62" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-13T16:37:53.559407" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } } } \ No newline at end of file diff --git a/modules/nf-core/pbccs/tests/nextflow.config b/modules/nf-core/pbccs/tests/nextflow.config index 2c2b4fe..5137912 100644 --- a/modules/nf-core/pbccs/tests/nextflow.config +++ b/modules/nf-core/pbccs/tests/nextflow.config @@ -1,3 +1,5 @@ process { - ext.args = '--min-rq 0.9' + withName: 'PBCCS' { + ext.args = '--min-rq 0.9' + } } diff --git a/modules/nf-core/pbccs/tests/tags.yml b/modules/nf-core/pbccs/tests/tags.yml deleted file mode 100644 index 6021606..0000000 --- a/modules/nf-core/pbccs/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -pbccs: - - modules/nf-core/pbccs/** diff --git a/modules/nf-core/ultra/align/environment.yml b/modules/nf-core/ultra/align/environment.yml index 74ccba4..4bba7fd 100644 --- a/modules/nf-core/ultra/align/environment.yml +++ b/modules/nf-core/ultra/align/environment.yml @@ -1,8 +1,9 @@ -name: ultra_align +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::ultra_bioinformatics=0.1 - bioconda::samtools=1.17 + - bioconda::ultra_bioinformatics=0.1 diff --git a/modules/nf-core/ultra/align/main.nf b/modules/nf-core/ultra/align/main.nf index b6eb00e..ee2c627 100644 --- a/modules/nf-core/ultra/align/main.nf +++ b/modules/nf-core/ultra/align/main.nf @@ -3,25 +3,26 @@ process ULTRA_ALIGN { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-4b749ef583d6de806ddbf51c2d235ac8c14763c6:c2c0cd48e7ed1cf3f365b421c7389d04e6bfa812-0': - 'biocontainers/mulled-v2-4b749ef583d6de806ddbf51c2d235ac8c14763c6:c2c0cd48e7ed1cf3f365b421c7389d04e6bfa812-0' }" + 'quay.io/biocontainers/mulled-v2-4b749ef583d6de806ddbf51c2d235ac8c14763c6:c2c0cd48e7ed1cf3f365b421c7389d04e6bfa812-0' }" input: tuple val(meta), path(reads) - path genome - tuple path(pickle), path(db) + tuple val(meta2), path(genome) + tuple val(meta3), path(pickle), path(db) output: tuple val(meta), path("*.bam"), emit: bam - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('ultra'), eval("uLTRA --version | sed 's/uLTRA //'"), emit: versions_ultra, topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed -n '1s/samtools //p'"), emit: versions_samtools, topic: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ uLTRA \\ @@ -43,11 +44,11 @@ process ULTRA_ALIGN { ${prefix}.sam rm ${prefix}.sam + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ultra: \$( uLTRA --version|sed 's/uLTRA //g' ) - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam """ } diff --git a/modules/nf-core/ultra/align/meta.yml b/modules/nf-core/ultra/align/meta.yml index 264e9ab..a1dce39 100644 --- a/modules/nf-core/ultra/align/meta.yml +++ b/modules/nf-core/ultra/align/meta.yml @@ -1,5 +1,6 @@ name: "ultra_align" -description: uLTRA aligner - A wrapper around minimap2 to improve small exon detection - Map reads on genome +description: uLTRA aligner - A wrapper around minimap2 to improve small exon + detection - Map reads on genome keywords: - uLTRA - align @@ -14,43 +15,99 @@ tools: documentation: "https://github.com/ksahlin/uLTRA" tool_dev_url: "https://github.com/ksahlin/uLTRA" doi: "10.1093/bioinformatics/btab540" - licence: "['GNU GPLV3']" + licence: + - "GNU GPLV3" + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: A fasta or fastq file of reads to align - pattern: "*.{fa,fasta,fastq}" - - genome: - type: file - description: A fasta file of reference genome - pattern: "*.{fa,fasta}" - - pickle: - type: file - description: Pickle files generated by uLTRA index - pattern: "*.pickle" - - db: - type: file - description: Database generated by uLTRA index - pattern: "*.db" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: A fasta or fastq file of reads to align + pattern: "*.{fa,fasta,fastq}" + ontologies: + - edam: http://edamontology.org/format_1930 # FASTQ + - - meta2: + type: map + description: | + Groovy Map containing genome information + e.g. [ id:'test' ] + - genome: + type: file + description: A fasta file of reference genome + pattern: "*.{fa,fasta}" + ontologies: [] + - - meta3: + type: map + description: | + Groovy Map containing genome information + e.g. [ id:'test' ] + - pickle: + type: file + description: Pickle files generated by uLTRA index + pattern: "*.pickle" + ontologies: + - edam: http://edamontology.org/format_4002 # pickle + - db: + type: file + description: Database generated by uLTRA index + pattern: "*.db" + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bam: - type: file - description: The aligned reads in bam format - pattern: "*.bam" + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: The aligned reads in bam format + pattern: "*.bam" + ontologies: [] + versions_ultra: + - - ${task.process}: + type: string + description: The name of the process + - ultra: + type: string + description: The name of the tool + - uLTRA --version | sed 's/uLTRA //': + type: eval + description: The expression to obtain the version of the tool + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools --version | sed -n '1s/samtools //p': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - ultra: + type: string + description: The name of the tool + - uLTRA --version | sed 's/uLTRA //': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools --version | sed -n '1s/samtools //p': + type: eval + description: The expression to obtain the version of the tool authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/ultra/align/tests/main.nf.test b/modules/nf-core/ultra/align/tests/main.nf.test new file mode 100644 index 0000000..d378013 --- /dev/null +++ b/modules/nf-core/ultra/align/tests/main.nf.test @@ -0,0 +1,112 @@ +nextflow_process { + + name "Test Process ULTRA_ALIGN" + config "./nextflow.config" + script "../main.nf" + process "ULTRA_ALIGN" + + tag "modules" + tag "modules_nfcore" + tag "gunzip" + tag "gnu" + tag "gnu/sort" + tag "ultra" + tag "ultra/index" + tag "ultra/align" + + test("ultra_align") { + setup { + run("GUNZIP") { + script "../../../gunzip/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/fastq/test_hifi.fastq.gz', checkIfExists:true) + ] + """ + } + } + + run("GNU_SORT") { + script "../../../gnu/sort/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists:true), + "gtf" + ] + """ + } + } + + run("ULTRA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'fasta'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[1] = GNU_SORT.out.sorted + """ + } + } + } + when { + params { + gnu_sort_args = '-k1,1 -k4,4n' + ultra_index_args = '--disable_infer' + } + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = Channel.of([ + [id: 'fasta'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ]) + input[2] = ULTRA_INDEX.out.pickle + .join(ULTRA_INDEX.out.database) + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + sanitizeOutput(process.out, unstableKeys: ["bam"]) + ).match() } + ) + } + } + + test("ultra_align -- stub") { + options "-stub" + when { + params { + gnu_sort_args = '' + ultra_index_args = '' + } + process { + """ + input[0] = [[id: 'test'], []] + input[1] = [ + [id: 'fasta'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true), + ] + input[2] = [[id: 'index'], [], []] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + sanitizeOutput(process.out) + ).match() } + ) + } + } +} diff --git a/modules/nf-core/ultra/align/tests/main.nf.test.snap b/modules/nf-core/ultra/align/tests/main.nf.test.snap new file mode 100644 index 0000000..bccd5b9 --- /dev/null +++ b/modules/nf-core/ultra/align/tests/main.nf.test.snap @@ -0,0 +1,69 @@ +{ + "ultra_align -- stub": { + "content": [ + { + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_samtools": [ + [ + "ULTRA_ALIGN", + "samtools", + "1.17" + ] + ], + "versions_ultra": [ + [ + "ULTRA_ALIGN", + "ultra", + "0.1" + ] + ] + } + ], + "timestamp": "2026-06-18T07:45:00.39092562", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "ultra_align": { + "content": [ + "4a12eec345cffd63b51bd3d29d89f13c", + { + "bam": [ + [ + { + "id": "test" + }, + "test.bam" + ] + ], + "versions_samtools": [ + [ + "ULTRA_ALIGN", + "samtools", + "1.17" + ] + ], + "versions_ultra": [ + [ + "ULTRA_ALIGN", + "ultra", + "0.1" + ] + ] + } + ], + "timestamp": "2026-06-18T08:42:51.310969523", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/ultra/align/tests/nextflow.config b/modules/nf-core/ultra/align/tests/nextflow.config new file mode 100644 index 0000000..95a26a0 --- /dev/null +++ b/modules/nf-core/ultra/align/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + withName: "GNU_SORT" { + ext.args = params.gnu_sort_args + } + + withName: "ULTRA_INDEX" { + ext.args = params.ultra_index_args + } +} diff --git a/modules/nf-core/ultra/index/environment.yml b/modules/nf-core/ultra/index/environment.yml index 81f92d0..4098444 100644 --- a/modules/nf-core/ultra/index/environment.yml +++ b/modules/nf-core/ultra/index/environment.yml @@ -1,7 +1,10 @@ -name: ultra_index channels: - conda-forge - bioconda - - defaults + dependencies: + - bioconda::gffutils=0.11.1 + - bioconda::samtools=1.17 - bioconda::ultra_bioinformatics=0.1 + - conda-forge::python=3.10.12 + - conda-forge::sqlite=3.42.0 diff --git a/modules/nf-core/ultra/index/main.nf b/modules/nf-core/ultra/index/main.nf index 29d3b53..e2a1cce 100644 --- a/modules/nf-core/ultra/index/main.nf +++ b/modules/nf-core/ultra/index/main.nf @@ -1,37 +1,59 @@ process ULTRA_INDEX { - tag "$gtf" + tag "${meta.id}" label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ultra_bioinformatics:0.1--pyh7cba7a3_1': - 'biocontainers/ultra_bioinformatics:0.1--pyh7cba7a3_1' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-4b749ef583d6de806ddbf51c2d235ac8c14763c6:c2c0cd48e7ed1cf3f365b421c7389d04e6bfa812-0': + 'quay.io/biocontainers/mulled-v2-4b749ef583d6de806ddbf51c2d235ac8c14763c6:c2c0cd48e7ed1cf3f365b421c7389d04e6bfa812-0' }" input: - path fasta - path gtf + tuple val(meta), path(fasta) + tuple val(meta2), path(gtf) output: - tuple path("*.pickle"), path("*.db"), emit: index - path "versions.yml" , emit: versions + tuple val(meta), path("*.db"), emit: database + tuple val(meta), path("*.pickle"), emit: pickle + tuple val("${task.process}"), val('ultra'), eval("uLTRA --version | sed 's/uLTRA //'"), emit: versions_ultra, topic: versions + tuple val("${task.process}"), val('gffutils'), eval("python -c 'import gffutils; print(gffutils.__version__)'"), emit: versions_gffutils, topic: versions + tuple val("${task.process}"), val('sqlite'), eval("python -c 'import sqlite3; print(sqlite3.sqlite_version)'"), emit: versions_sqlite, topic: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${gtf.baseName}" + def args = task.ext.args ?: '' """ uLTRA \\ index \\ - $args \\ - $fasta \\ - $gtf \\ + ${args} \\ + ${fasta} \\ + ${gtf} \\ ./ + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ultra: \$( uLTRA --version|sed 's/uLTRA //g' ) - END_VERSIONS + stub: + """ + touch database.db + touch all_splice_pairs_annotations.pickle + touch all_splice_sites_annotations.pickle + touch chr_to_id.pickle + touch exon_choordinates_to_id.pickle + touch flank_choordinates.pickle + touch gene_to_small_segments.pickle + touch id_to_chr.pickle + touch max_intron_chr.pickle + touch parts_to_segments.pickle + touch ref_exon_sequences.pickle + touch ref_flank_sequences.pickle + touch ref_part_sequences.pickle + touch ref_segment_sequences.pickle + touch refs_id_lengths.pickle + touch refs_lengths.pickle + touch segment_id_to_choordinates.pickle + touch segment_to_gene.pickle + touch segment_to_ref.pickle + touch splices_to_transcripts.pickle + touch transcripts_to_splices.pickle """ } diff --git a/modules/nf-core/ultra/index/meta.yml b/modules/nf-core/ultra/index/meta.yml index 3c0eda9..771d16a 100644 --- a/modules/nf-core/ultra/index/meta.yml +++ b/modules/nf-core/ultra/index/meta.yml @@ -1,5 +1,6 @@ name: "ultra_index" -description: uLTRA aligner - A wrapper around minimap2 to improve small exon detection - Index gtf file for reads alignment +description: uLTRA aligner - A wrapper around minimap2 to improve small exon + detection - Index gtf file for reads alignment keywords: - uLTRA - index @@ -14,29 +15,113 @@ tools: documentation: "https://github.com/ksahlin/uLTRA" tool_dev_url: "https://github.com/ksahlin/uLTRA" doi: "10.1093/bioinformatics/btab540" - licence: "['GNU GPLV3']" + licence: + - "GNU GPLV3" + identifier: "" input: - - fasta: - type: file - description: A fasta file of the genome to use as reference for mapping - pattern: "*.{fasta, fa}" - - gtf: - type: file - description: An annotation file of the reference genome in GTF format - pattern: "*.gtf" + - - meta: + type: map + description: | + Groovy Map containing genome information + e.g. [ id:'test' ] + - fasta: + type: file + description: A fasta file of the genome to use as reference for mapping + pattern: "*.{fasta, fa}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing gtf information + e.g. [ id:'test' ] + - gtf: + type: file + description: An annotation file of the reference genome in GTF format + pattern: "*.gtf" + ontologies: [] output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - pickle: - type: file - description: Index files generated by uLTRA index - pattern: "*.pickle" - - pickle: - type: file - description: database file generated by uLTRA index - pattern: "*.db" + database: + - - meta: + type: map + description: | + Groovy Map containing genome information + e.g. [ id:'test' ] + - "*.db": + type: file + description: Index database + pattern: "*.db" + ontologies: [] + pickle: + - - meta: + type: map + description: | + Groovy Map containing genome information + e.g. [ id:'test' ] + - "*.pickle": + type: file + description: Index file + pattern: "*.pickle" + ontologies: + - edam: http://edamontology.org/format_4002 + versions_ultra: + - - ${task.process}: + type: string + description: The name of the process + - ultra: + type: string + description: The name of the tool + - uLTRA --version | sed 's/uLTRA //': + type: eval + description: The expression to obtain the version of the tool + versions_gffutils: + - - ${task.process}: + type: string + description: The name of the process + - gffutils: + type: string + description: The name of the tool + - python -c 'import gffutils; print(gffutils.__version__)': + type: eval + description: The expression to obtain the version of the tool + versions_sqlite: + - - ${task.process}: + type: string + description: The name of the process + - sqlite: + type: string + description: The name of the tool + - python -c 'import sqlite3; print(sqlite3.sqlite_version)': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - ultra: + type: string + description: The name of the tool + - uLTRA --version | sed 's/uLTRA //': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - gffutils: + type: string + description: The name of the tool + - python -c 'import gffutils; print(gffutils.__version__)': + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - sqlite: + type: string + description: The name of the tool + - python -c 'import sqlite3; print(sqlite3.sqlite_version)': + type: eval + description: The expression to obtain the version of the tool authors: - "@sguizard" maintainers: diff --git a/modules/nf-core/ultra/index/tests/main.nf.test b/modules/nf-core/ultra/index/tests/main.nf.test new file mode 100644 index 0000000..c8154cb --- /dev/null +++ b/modules/nf-core/ultra/index/tests/main.nf.test @@ -0,0 +1,81 @@ +nextflow_process { + + name "Test Process ULTRA_INDEX" + config "./nextflow.config" + script "../main.nf" + process "ULTRA_INDEX" + + tag "modules" + tag "modules_nfcore" + tag "ultra" + tag "ultra/index" + tag "gnu" + tag "gnu/sort" + + test("ultra_index") { + setup { + run("GNU_SORT") { + script "../../../gnu/sort/main.nf" + process { + """ + input[0] = [ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists:true), + "gtf" + ] + """ + } + } + } + when { + params { + gnu_sort_args = '-k1,1 -k4,4n' + ultra_index_args = '--disable_infer' + } + process { + """ + input[0] = [ + [id: "test"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[1] = GNU_SORT.out.sorted + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + sanitizeOutput(process.out, unstableKeys: ["pickle"]) + ).match() } + ) + } + } + + test("ultra_index -- stub") { + options "-stub" + when { + params { + gnu_sort_args = '' + ultra_index_args = '' + } + process { + """ + input[0] = [ + [id: "test"], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists:true) + ] + input[1] = [[], []] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot( + sanitizeOutput(process.out) + ).match() } + ) + } + } +} diff --git a/modules/nf-core/ultra/index/tests/main.nf.test.snap b/modules/nf-core/ultra/index/tests/main.nf.test.snap new file mode 100644 index 0000000..341c8f8 --- /dev/null +++ b/modules/nf-core/ultra/index/tests/main.nf.test.snap @@ -0,0 +1,140 @@ +{ + "ultra_index": { + "content": [ + { + "database": [ + [ + { + "id": "test" + }, + "database.db:md5,f9b780bf5a0a5d23256afb99df7137d9" + ] + ], + "pickle": [ + [ + { + "id": "test" + }, + [ + "all_splice_pairs_annotations.pickle", + "all_splice_sites_annotations.pickle", + "chr_to_id.pickle", + "exon_choordinates_to_id.pickle", + "flank_choordinates.pickle", + "gene_to_small_segments.pickle", + "id_to_chr.pickle", + "max_intron_chr.pickle", + "parts_to_segments.pickle", + "ref_exon_sequences.pickle", + "ref_flank_sequences.pickle", + "ref_part_sequences.pickle", + "ref_segment_sequences.pickle", + "refs_id_lengths.pickle", + "refs_lengths.pickle", + "segment_id_to_choordinates.pickle", + "segment_to_gene.pickle", + "segment_to_ref.pickle", + "splices_to_transcripts.pickle", + "transcripts_to_splices.pickle" + ] + ] + ], + "versions_gffutils": [ + [ + "ULTRA_INDEX", + "gffutils", + "0.11.1" + ] + ], + "versions_sqlite": [ + [ + "ULTRA_INDEX", + "sqlite", + "3.42.0" + ] + ], + "versions_ultra": [ + [ + "ULTRA_INDEX", + "ultra", + "0.1" + ] + ] + } + ], + "timestamp": "2026-06-18T08:17:40.761154394", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + }, + "ultra_index -- stub": { + "content": [ + { + "database": [ + [ + { + "id": "test" + }, + "database.db:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "pickle": [ + [ + { + "id": "test" + }, + [ + "all_splice_pairs_annotations.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "all_splice_sites_annotations.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "chr_to_id.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "exon_choordinates_to_id.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "flank_choordinates.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "gene_to_small_segments.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "id_to_chr.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "max_intron_chr.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "parts_to_segments.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_exon_sequences.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_flank_sequences.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_part_sequences.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_segment_sequences.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "refs_id_lengths.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "refs_lengths.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "segment_id_to_choordinates.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "segment_to_gene.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "segment_to_ref.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "splices_to_transcripts.pickle:md5,d41d8cd98f00b204e9800998ecf8427e", + "transcripts_to_splices.pickle:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_gffutils": [ + [ + "ULTRA_INDEX", + "gffutils", + "0.11.1" + ] + ], + "versions_sqlite": [ + [ + "ULTRA_INDEX", + "sqlite", + "3.42.0" + ] + ], + "versions_ultra": [ + [ + "ULTRA_INDEX", + "ultra", + "0.1" + ] + ] + } + ], + "timestamp": "2026-06-18T07:45:15.943436768", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/ultra/index/tests/nextflow.config b/modules/nf-core/ultra/index/tests/nextflow.config new file mode 100644 index 0000000..c37ac08 --- /dev/null +++ b/modules/nf-core/ultra/index/tests/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: "GNU_SORT" { + ext.args = params.gnu_sort_args + ext.prefix = { "${meta.id}_sorted" } + } + + withName: "ULTRA_INDEX" { + ext.args = params.ultra_index_args + } +} diff --git a/nextflow.config b/nextflow.config index 3f348ca..4619aa2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,7 +13,8 @@ params { input = null primers = null rq = 0.9 - chunk = 40 + chunk_ccs = 40 + chunk_mapping = 100 capped = false five_prime = 100 splice_junction = 10 @@ -24,8 +25,7 @@ params { top_passes = 60 min_length = 10 max_length = 50000 - entrypoint = "isoseq" - + tama_merge_all = false // References genome = null @@ -46,50 +46,42 @@ params { email_on_fail = null plaintext_email = false monochrome_logs = false - hook_url = null help = false + help_full = false + show_hidden = false version = false - pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/isoseq/' + trace_report_suffix = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') // Config options config_profile_name = null config_profile_description = null + custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" config_profile_contact = null config_profile_url = null - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true + validate_params = true +} +// Max resources +process { + resourceLimits = [ + cpus: 16, + memory: '128.GB', + time: '240.h' + ] } +// Backwards compatibility for publishDir syntax +outputDir = params.outdir +workflow.output.mode = params.publish_dir_mode + // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/isoseq custom profiles from different institutions. -try { - includeConfig "${params.custom_config_base}/pipeline/isoseq.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/isoseq profiles: ${params.custom_config_base}/pipeline/isoseq.config") -} profiles { debug { dumpHashes = true @@ -127,7 +119,18 @@ profiles { apptainer.enabled = false docker.runOptions = '-u $(id -u):$(id -g)' } - arm { + arm64 { + process.arch = 'arm64' + // TODO https://github.com/nf-core/modules/issues/6694 + // For now if you're using arm64 you have to use wave for the sake of the maintainers + // wave profile + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' + } + emulate_amd64 { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { @@ -184,38 +187,49 @@ profiles { wave.freeze = true wave.strategy = 'conda,container' } - gitpod { - executor.name = 'local' - executor.cpus = 4 - executor.memory = 8.GB + gpu { + docker.runOptions = '-u $(id -u):$(id -g) --gpus all' + apptainer.runOptions = '--nv' + singularity.runOptions = '--nv' } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } - test_minimap2 { includeConfig 'conf/test_minimap2.config' } - test_minimap2_map_entrypoint { includeConfig 'conf/test_minimap2_map_entrypoint.config' } - test_ultra_map_entrypoint { includeConfig 'conf/test_ultra_map_entrypoint.config' } + test { includeConfig 'conf/test.config' } + test_minimap2 { includeConfig 'conf/test_minimap2.config' } + test_full { includeConfig 'conf/test_full.config' } + test_inputs_map { includeConfig 'conf/test_samplesheet_v2_map.config' } + test_inputs_lima { includeConfig 'conf/test_samplesheet_v2_lima.config' } + test_inputs_refine { includeConfig 'conf/test_samplesheet_v2_refine.config' } + test_inputs_ccs { includeConfig 'conf/test_samplesheet_v2_ccs.config' } + test_inputs_ccs_lima_refine_map_mergeAll { includeConfig 'conf/test_samplesheet_v2_ccs_lima_refine_map_mergeAll.config' } + test_inputs_ccs_lima_refine_map { includeConfig 'conf/test_samplesheet_v2_ccs_lima_refine_map.config' } + test_inputs_ccs_map { includeConfig 'conf/test_samplesheet_v2_ccs_map.config' } + test_inputs_lima_refine_map { includeConfig 'conf/test_samplesheet_v2_lima_refine_map.config' } + test_inputs_refine_map { includeConfig 'conf/test_samplesheet_v2_refine_map.config' } + test_inputs_multi_lib { includeConfig 'conf/test_samplesheet_v2_multi_lib.config' } } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled -// Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' -singularity.registry = 'quay.io' +// Load nf-core custom profiles from different institutions + +// If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included. +// Load nf-core/isoseq custom profiles from different institutions. +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} + +// Load nf-core/isoseq custom profiles from different institutions. +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/isoseq.config" : "/dev/null" + +// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' +charliecloud.registry = 'quay.io' // Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} +includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' + // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -227,74 +241,65 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// Set bash options +process.shell = [ + "bash", + "-C", // No clobber - prevent output redirection from overwriting files. + "-e", // Exit if a tool returns a non-zero status/exit code + "-u", // Treat unset variables and parameters as an error + "-o", // Returns the status of the last command to exit.. + "pipefail" // ..with a non-zero status or zero if all successfully execute +] // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false -def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { - enabled = true - file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" + enabled = true + file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html" + overwrite = true } report { - enabled = true - file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" + enabled = true + file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html" + overwrite = true } trace { enabled = true - file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt" } dag { enabled = true - file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html" } manifest { name = 'nf-core/isoseq' - author = """Sébastien Guizard (@sguizard)""" + // NOTE: `contribution` must not be the last field. nf-core tools 4.0.3 normalises this + // map to JSON with a naive replace("]]", "}]"), which corrupts a trailing nested list. + contributors = [[ + name: 'Sébastien Guizard', + contribution: ['author', 'maintainer'], + github: 'sguizard', + orcid: '0000-0001-5116-4150' + ]] homePage = 'https://github.com/nf-core/isoseq' description = """Genes and transcripts annotation with Isoseq using uLTRA and TAMA""" mainScript = 'main.nf' - doi = '10.5281/zenodo.7116979' - nextflowVersion = '!>=23.04.0' - version = '2.0.0' + defaultBranch = 'master' + nextflowVersion = '!>=25.10.4' + version = '3.0.0' doi = '10.1093/bioinformatics/btad150' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +// Nextflow plugins +plugins { + id 'nf-schema@2.5.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } - } +validation { + defaultIgnoreParams = ["genomes"] + monochromeLogs = params.monochrome_logs } +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index ac9ab39..2e757f2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,16 +1,16 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/isoseq/master/nextflow_schema.json", "title": "nf-core/isoseq pipeline parameters", "description": "Genes and transcripts annotation with Isoseq using uLTRA and TAMA", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": ["input", "outdir", "primers"], + "required": ["input", "outdir"], "properties": { "input": { "type": "string", @@ -41,19 +41,18 @@ "description": "Genome annotation file", "help_text": "Provide a GTF annotation file (sorted by sequence and start) if you set the `--aligner` option to `uLTRA`\nGziped files are accepted. " }, - "entrypoint": { - "type": "string", - "fa_icon": "fas fa-dungeon", - "description": "Run complete pipeline or TAMA only?", - "enum": ["isoseq", "map"], - "default": "isoseq", - "help_text": "If you don't have the subreads sequences, because of the provider or last PacBio sequencer or because you used Oxford Nanopore, you'll to run the pipeline from the mapping step to advantage of the TAMA processing. \nThis option allows you to change the entry point from subread (--entrypoint isoseq) processing to mapping (--entrypoint map). " - }, - "chunk": { + "chunk_ccs": { "type": "integer", "default": 40, - "description": "If entrypoint 'isoseq', ccs --chunk option, define the number of batches to run in parallel. If entrypoint 'map', split fasta in files of 'chunk' sequences.", - "help_text": "If selected entrypoint is 'isoseq' (default): \nCCS workload can be split into to chunks for a faster running time. \nThis value must be a positive integer greater than 1. \n```bash\n--chunk 1/10 \n```\n\nif selected entrypoint is 'map': the reads files will be split into files of 'chunk' sequences.", + "description": "Defines the number of batches to run in parallel for.", + "help_text": "CCS workload can be split into to chunks for a faster running time. \nThis value must be a positive integer greater than 1. \n```bash\n--chunk 1/10 \n```\n\n", + "fa_icon": "fas fa-cog" + }, + "chunk_mapping": { + "type": "integer", + "default": 100, + "description": "Splits fasta in files of 'chunk' sequences.", + "help_text": "The fasta files will be split into files of 'chunk' sequences.", "fa_icon": "fas fa-cog" }, "email": { @@ -170,6 +169,13 @@ "description": "TAMA collapse: 3 prime wobble threshold", "help_text": "Set the maximum threshold for collapsing 3 prime exon.\n```\n--three_prime 100\n```", "fa_icon": "fas fa-cog" + }, + "tama_merge_all": { + "type": "boolean", + "default": false, + "description": "TAMA merge: merge the sample-wise annotations into a single annotation?", + "help_text": "By default, the pipeline one anntation per sample. \nAdding this option will compute an addiontional annotation by merging all samples.", + "fa_icon": "fas fa-question-circle" } }, "fa_icon": "fas fa-cogs" @@ -202,6 +208,13 @@ "fa_icon": "fas fa-ban", "hidden": true, "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + }, + "igenomes_base": { + "type": "string", + "description": "The base path to the igenomes reference files", + "fa_icon": "fas fa-ban", + "hidden": true, + "default": "s3://ngi-igenomes/igenomes/" } } }, @@ -253,41 +266,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -295,12 +273,6 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", @@ -344,13 +316,6 @@ "fa_icon": "fas fa-palette", "hidden": true }, - "hook_url": { - "type": "string", - "description": "Incoming hook URL for messaging service", - "fa_icon": "fas fa-people-group", - "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", - "hidden": true - }, "multiqc_config": { "type": "string", "format": "file-path", @@ -376,61 +341,55 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." - }, "pipelines_testdata_base_path": { "type": "string", "fa_icon": "far fa-check-circle", "description": "Base URL or local path to location of pipeline test dataset files", - "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/isoseq/", "hidden": true + }, + "trace_report_suffix": { + "type": "string", + "fa_icon": "far calendar", + "description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.", + "hidden": true + }, + "help": { + "type": ["boolean", "string"], + "description": "Display the help message." + }, + "help_full": { + "type": "boolean", + "description": "Display the full detailed help message." + }, + "show_hidden": { + "type": "boolean", + "description": "Display hidden parameters in the help message (only works when --help or --help_full are provided)." } } } }, "allOf": [ { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/ccs_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/aligner_option" + "$ref": "#/$defs/ccs_options" }, { - "$ref": "#/definitions/tama_options" + "$ref": "#/$defs/aligner_option" }, { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/$defs/tama_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/reference_genome_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/institutional_config_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 0000000..9ba7e6d --- /dev/null +++ b/nf-test.config @@ -0,0 +1,38 @@ +config { + // location for all nf-test tests + testsDir = "." + + // nf-test directory including temporary files for each test + workDir = System.getenv("NFT_WORKDIR") ?: ".nf-test" + + // location of an optional nextflow.config file specific for executing tests + configFile = "tests/nextflow.config" + + // ignore tests coming from the nf-core/modules repo + ignore = [ + 'modules/nf-core/**/tests/*', + 'subworkflows/nf-core/**/tests/*', + ] + + // run all test with defined profile(s) from the main nextflow.config + profile = "test" + + // list of filenames or patterns that should be trigger a full test run + triggers = [ + '.github/actions/nf-test/action.yml', + '.github/workflows/nf-test.yml', + 'assets/schema_input.json', + 'bin/*', + 'conf/test.config', + 'nextflow.config', + 'nextflow_schema.json', + 'nf-test.config', + 'tests/.nftignore', + 'tests/nextflow.config', + ] + + // load the necessary plugins + plugins { + load "nft-utils@0.0.7" + } +} diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json new file mode 100644 index 0000000..138d465 --- /dev/null +++ b/ro-crate-metadata.json @@ -0,0 +1,341 @@ +{ + "@context": [ + "https://w3id.org/ro/crate/1.1/context", + { + "GithubService": "https://w3id.org/ro/terms/test#GithubService", + "JenkinsService": "https://w3id.org/ro/terms/test#JenkinsService", + "PlanemoEngine": "https://w3id.org/ro/terms/test#PlanemoEngine", + "TestDefinition": "https://w3id.org/ro/terms/test#TestDefinition", + "TestInstance": "https://w3id.org/ro/terms/test#TestInstance", + "TestService": "https://w3id.org/ro/terms/test#TestService", + "TestSuite": "https://w3id.org/ro/terms/test#TestSuite", + "TravisService": "https://w3id.org/ro/terms/test#TravisService", + "definition": "https://w3id.org/ro/terms/test#definition", + "engineVersion": "https://w3id.org/ro/terms/test#engineVersion", + "instance": "https://w3id.org/ro/terms/test#instance", + "resource": "https://w3id.org/ro/terms/test#resource", + "runsOn": "https://w3id.org/ro/terms/test#runsOn" + } + ], + "@graph": [ + { + "@id": "./", + "@type": "Dataset", + "creativeWorkStatus": "Stable", + "datePublished": "2026-08-14T08:04:34+00:00", + "description": "

\n \n \n \"nf-core/isoseq\"\n \n

\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/isoseq)\n[![GitHub Actions CI Status](https://github.com/nf-core/isoseq/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/isoseq/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/isoseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/isoseq/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/isoseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.13694618-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.13694618)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7116979-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7116979)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.4-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-4.1.0-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/4.1.0)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/isoseq)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23isoseq-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/isoseq)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/isoseq** is a bioinformatics best-practice analysis pipeline for Isoseq gene annotation with uLTRA and TAMA. Starting from raw isoseq subreads, the pipeline:\n\n- Generates the Circular Consensus Sequences (CCS)\n\n- Clean and polish CCS to create Full Length Non Chimeric (FLNC) reads\n\n- Maps FLNCs on the genome\n\n- Define and clean gene models\n\n![isoseq_pipeline_graph](docs/images/Isoseq_pipeline_metro.png)\n\nThe pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community!\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/isoseq/results).\n\n## Pipeline summary\n\n1. Generate CCS consensuses from raw isoseq subreads (Optional, [`PBCCS`](https://github.com/PacificBiosciences/ccs))\n2. Remove primer sequences from consensuses (Optional, [`LIMA`](https://github.com/pacificbiosciences/barcoding/))\n3. Detect and remove chimeric reads ([`ISOSEQ3 REFINE`](https://github.com/PacificBiosciences/IsoSeq))\n4. Convert bam file into fasta file ([`BAMTOOLS CONVERT`](https://github.com/pezmaster31/bamtools))\n5. Select reads with a polyA tail and trim it ([`GSTAMA_POLYACLEANUP`](https://github.com/GenomeRIK/tama))\n6. uLTRA path: decompress FLNCs ([`GUNZIP`](https://www.gnu.org/software/gzip/))\n7. uLTRA path: index `GTF` file for mapping ([`uLTRA`](https://github.com/ksahlin/ultra))\n8. Map consensuses on the reference genome ([`MINIMAP2`](https://github.com/lh3/minimap2) or [`uLTRA`](https://github.com/ksahlin/ultra))\n9. Clean gene models ([`TAMA collapse`](https://github.com/GenomeRIK/tama))\n10. Merge annotations by sample ([`TAMA merge`](https://github.com/GenomeRIK/tama))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/get_started/environment_setup/overview) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/get_started/run-your-first-pipeline) with `-profile test` before running the workflow on actual data.\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n`samplesheet.csv`:\n\n```csv\nsample,seq_data,pbi,start_from\nsample1,sample1.subreads.bam,sample1.subreads.bam.pbi,ccs\nsample2,sample2.ccs.bam,none,lima\nsample3,sample3.fl.primer_5p--primer_3p.bam,none,refine\nsample4,sample4.long_reads.fa.gz,none,mapping\n```\n\nThe file list all datasets to analyse. Those datasets can be raw subreads, Circular Consensus Sequences (CCS), Full Length sequences produced by LIMA (Pacbio software suite), or long reads sequence Pacbio Hifi (or Oxford Nanopore long reads!)\nThe first column define the sample ID, the second sequence data file, the third PacBio Index file (subreads only) and the program where to start the analysis.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/isoseq \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \\\n --genome \\\n --primers \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/running/run-pipelines#using-parameter-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/isoseq/usage) and the [parameter documentation](https://nf-co.re/isoseq/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/isoseq/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/isoseq/output).\n\n## Credits\n\nnf-core/isoseq was originally written by S\u00e9bastien Guizard.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- Thanks to [Jose Espinosa-Carrasco](https://github.com/JoseEspinosa), [Daniel Schreyer](https://github.com/DSchreyer), [Gisela Gabernet](https://github.com/ggabernet) and [Maxime U Garcia](https://github.com/maxulysse) for their reviews and contributions\n- [Kristoffer Sahlin](https://github.com/ksahlin) for `uLTRA` and the help he provided\n- [Richard Kuo](https://github.com/GenomeRIK) ([Wobble Genomics](https://www.wobblegenomics.com/)) for his valuable advices on isoseq analysis\n- The Workpackage 2 of [GENE-SWitCH Project](https://www.gene-switch.eu/) for their fruitful discussions and remarks\n- [Mick Watson](https://twitter.com/BioMickWatson) group for their support\n- The nf-core community for their help in the development of this pipeline\n- [James A. Fellows Yates](https://github.com/jfy133) & nf-core for the metro map style components for pipeline graph\n- [J\u00falia Mir Pedrol](https://github.com/mirpedrol) for debugging help\n- [Usman Rashid](https://github.com/GallVp) for his contributions on pipeline development\n\nThis pipeline has been developed as part of the GENE-SWitCH project. This project has received funding from the European Union's Horizon 2020 Research and Innovation Programme under the grant agreement n\u00b0 817998.\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](docs/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#isoseq` channel](https://nfcore.slack.com/channels/isoseq) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nYou can cite the `nf-core/isoseq` publication as follows:\n\n> **nf-core/isoseq: simple gene and isoform annotation with PacBio Iso-Seq long-read sequencing**\n>\n> S\u00e9bastien Guizard, Katarzyna Miedzinska, Jacqueline Smith, Jonathan Smith, Richard I Kuo, Megan Davey, Alan Archibald & Mick Watson.\n>\n> Bioinformatics, Volume 39, Issue 5, May 2023. doi: [10.1093/bioinformatics/btad150](https://doi.org/10.1093/bioinformatics/btad150)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "hasPart": [ + { + "@id": "main.nf" + }, + { + "@id": "assets/" + }, + { + "@id": "conf/" + }, + { + "@id": "docs/" + }, + { + "@id": "docs/images/" + }, + { + "@id": "modules/" + }, + { + "@id": "modules/local/" + }, + { + "@id": "modules/nf-core/" + }, + { + "@id": "workflows/" + }, + { + "@id": "subworkflows/" + }, + { + "@id": "nextflow.config" + }, + { + "@id": "README.md" + }, + { + "@id": "nextflow_schema.json" + }, + { + "@id": "CHANGELOG.md" + }, + { + "@id": "LICENSE" + }, + { + "@id": "CODE_OF_CONDUCT.md" + }, + { + "@id": "CITATIONS.md" + }, + { + "@id": "modules.json" + }, + { + "@id": "docs/usage.md" + }, + { + "@id": "docs/output.md" + }, + { + "@id": ".nf-core.yml" + }, + { + "@id": ".pre-commit-config.yaml" + }, + { + "@id": ".prettierignore" + } + ], + "isBasedOn": "https://github.com/nf-core/isoseq", + "license": "MIT", + "mainEntity": { + "@id": "main.nf" + }, + "mentions": [ + { + "@id": "#d725db7e-1687-40b9-bd18-e2fba8d19874" + } + ], + "name": "nf-core/isoseq" + }, + { + "@id": "ro-crate-metadata.json", + "@type": "CreativeWork", + "about": { + "@id": "./" + }, + "conformsTo": [ + { + "@id": "https://w3id.org/ro/crate/1.1" + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate/1.0" + } + ] + }, + { + "@id": "main.nf", + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], + "author": [ + { + "@id": "https://orcid.org/0000-0001-5116-4150" + } + ], + "dateCreated": "", + "dateModified": "2026-08-11T15:55:23Z", + "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", + "keywords": [ + "nf-core", + "nextflow", + "isoseq", + "isoseq-3", + "rna", + "tama", + "ultra" + ], + "license": [ + "MIT" + ], + "maintainer": [ + { + "@id": "https://orcid.org/0000-0001-5116-4150" + } + ], + "name": [ + "nf-core/isoseq" + ], + "programmingLanguage": { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" + }, + "sdPublisher": { + "@id": "https://nf-co.re/" + }, + "url": [ + "https://github.com/nf-core/isoseq", + "https://nf-co.re/isoseq/3.0.0/" + ], + "version": [ + "3.0.0" + ] + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", + "@type": "ComputerLanguage", + "identifier": { + "@id": "https://www.nextflow.io/" + }, + "name": "Nextflow", + "url": { + "@id": "https://www.nextflow.io/" + }, + "version": "!>=25.10.4" + }, + { + "@id": "#d725db7e-1687-40b9-bd18-e2fba8d19874", + "@type": "TestSuite", + "instance": [ + { + "@id": "#4acf8098-a0b6-448e-9865-b02e1488f578" + } + ], + "mainEntity": { + "@id": "main.nf" + }, + "name": "Test suite for nf-core/isoseq" + }, + { + "@id": "#4acf8098-a0b6-448e-9865-b02e1488f578", + "@type": "TestInstance", + "name": "GitHub Actions workflow for testing nf-core/isoseq", + "resource": "repos/nf-core/isoseq/actions/workflows/nf-test.yml", + "runsOn": { + "@id": "https://w3id.org/ro/terms/test#GithubService" + }, + "url": "https://api.github.com" + }, + { + "@id": "https://w3id.org/ro/terms/test#GithubService", + "@type": "TestService", + "name": "Github Actions", + "url": { + "@id": "https://github.com" + } + }, + { + "@id": "assets/", + "@type": "Dataset", + "description": "Additional files" + }, + { + "@id": "conf/", + "@type": "Dataset", + "description": "Configuration files" + }, + { + "@id": "docs/", + "@type": "Dataset", + "description": "Markdown files for documenting the pipeline" + }, + { + "@id": "docs/images/", + "@type": "Dataset", + "description": "Images for the documentation files" + }, + { + "@id": "modules/", + "@type": "Dataset", + "description": "Modules used by the pipeline" + }, + { + "@id": "modules/local/", + "@type": "Dataset", + "description": "Pipeline-specific modules" + }, + { + "@id": "modules/nf-core/", + "@type": "Dataset", + "description": "nf-core modules" + }, + { + "@id": "workflows/", + "@type": "Dataset", + "description": "Main pipeline workflows to be executed in main.nf" + }, + { + "@id": "subworkflows/", + "@type": "Dataset", + "description": "Smaller subworkflows" + }, + { + "@id": "nextflow.config", + "@type": "File", + "description": "Main Nextflow configuration file" + }, + { + "@id": "README.md", + "@type": "File", + "description": "Basic pipeline usage information" + }, + { + "@id": "nextflow_schema.json", + "@type": "File", + "description": "JSON schema for pipeline parameter specification" + }, + { + "@id": "CHANGELOG.md", + "@type": "File", + "description": "Information on changes made to the pipeline" + }, + { + "@id": "LICENSE", + "@type": "File", + "description": "The license - should be MIT" + }, + { + "@id": "CODE_OF_CONDUCT.md", + "@type": "File", + "description": "The nf-core code of conduct" + }, + { + "@id": "CITATIONS.md", + "@type": "File", + "description": "Citations needed when using the pipeline" + }, + { + "@id": "modules.json", + "@type": "File", + "description": "Version information for modules from nf-core/modules" + }, + { + "@id": "docs/usage.md", + "@type": "File", + "description": "Usage documentation" + }, + { + "@id": "docs/output.md", + "@type": "File", + "description": "Output documentation" + }, + { + "@id": ".nf-core.yml", + "@type": "File", + "description": "nf-core configuration file, configuring template features and linting rules" + }, + { + "@id": ".pre-commit-config.yaml", + "@type": "File", + "description": "Configuration file for pre-commit hooks" + }, + { + "@id": ".prettierignore", + "@type": "File", + "description": "Ignore file for prettier" + }, + { + "@id": "https://nf-co.re/", + "@type": "Organization", + "name": "nf-core", + "url": "https://nf-co.re/" + }, + { + "@id": "https://orcid.org/0000-0001-5116-4150", + "@type": "Person", + "email": "sguizard@ed.ac.uk", + "name": "S\u00e9bastien Guizard", + "url": "https://github.com/sguizard" + } + ] +} \ No newline at end of file diff --git a/subworkflows/local/chunker/main.nf b/subworkflows/local/chunker/main.nf new file mode 100644 index 0000000..8cffdac --- /dev/null +++ b/subworkflows/local/chunker/main.nf @@ -0,0 +1,43 @@ +// +// Takes fasta from LIMA and ISOSEQ REFINE inputs and splits their generated fastas +// + +workflow CHUNKER { + take: + ch_input_fastas // Channel: [ meta[id, start_from ], fasta ] + chunk // value: integer (number of chunk to create) + in_decompress // value: true or false + out_compress // value: true or false + + main: + // ch_input_fastas.view { meta, fa -> println("CHUNKER:ch_input_fastas: $meta | $fa") } + + ch_input_fastas + .branch { meta, _fasta -> + chunk : meta.id =~ /chunk/ + to_chunk: !(meta.id =~ /chunk/) + } + .set { ch_input_fastas_branched } + + // ch_input_fastas_branched.chunk.view { meta, fa -> println("CHUNKER:ch_input_fastas_branched.chunk: $meta | $fa") } + // ch_input_fastas_branched.to_chunk.view { meta, fa -> println("CHUNKER:ch_input_fastas_branched.to_chunk: $meta | $fa") } + + ch_input_fastas_branched.to_chunk + .splitFasta( + by: chunk, + decompress: in_decompress, + file: "chunk", + compress: out_compress + ) + .map { meta, file -> + def chk = (file =~ /(chunk\.\d+)(?:\.gz)?$/)[ 0 ][ 1 ] + def id_former = meta.id + def id_new = meta.id + "." + chk + [ [ id:id_new, id_former:id_former, start_from:meta.start_from ] , file ] + } + .concat(ch_input_fastas_branched.chunk) + .set { fastas } + + emit: + fastas +} diff --git a/subworkflows/local/set_chunk_num_channel.nf b/subworkflows/local/set_chunk_num_channel/main.nf similarity index 58% rename from subworkflows/local/set_chunk_num_channel.nf rename to subworkflows/local/set_chunk_num_channel/main.nf index fd69838..246e89b 100644 --- a/subworkflows/local/set_chunk_num_channel.nf +++ b/subworkflows/local/set_chunk_num_channel/main.nf @@ -8,14 +8,10 @@ workflow SET_CHUNK_NUM_CHANNEL { chunk // value: integer (number of chunk to create) main: - int n_samples = -1 + int n_samples = file(samplesheet).readLines().size() - 1 - file(samplesheet) - .readLines() - .each { n_samples++ } - - Channel // Prepare the pbccs chunk_num channel - .from((1..chunk).step(1).toList()*n_samples) + channel // Prepare the pbccs chunk_num channel + .from((1..(chunk as int)).step(1).toList()*n_samples) .set { chunk_num } emit: diff --git a/subworkflows/local/set_value_channel.nf b/subworkflows/local/set_value_channel/main.nf similarity index 80% rename from subworkflows/local/set_value_channel.nf rename to subworkflows/local/set_value_channel/main.nf index e82778d..f36698b 100644 --- a/subworkflows/local/set_value_channel.nf +++ b/subworkflows/local/set_value_channel/main.nf @@ -2,7 +2,7 @@ // Check input samplesheet and get read channels // -include { GUNZIP } from '../../modules/nf-core/gunzip/main' +include { GUNZIP } from '../../../modules/nf-core/gunzip/main' workflow SET_VALUE_CHANNEL { take: @@ -16,7 +16,7 @@ workflow SET_VALUE_CHANNEL { .set { data } } else { - Channel // Prepare value channel + channel // Prepare value channel .value(file(infile)) .set { data } } diff --git a/subworkflows/local/utils_nfcore_isoseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_isoseq_pipeline/main.nf index 763a11b..4eecf64 100644 --- a/subworkflows/local/utils_nfcore_isoseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_isoseq_pipeline/main.nf @@ -8,38 +8,37 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { fromSamplesheet } from 'plugin/nf-validation' -include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' -include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' -include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' -include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW TO INITIALISE PIPELINE -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit - help // boolean: Display help text validate_params // boolean: Boolean whether to validate parameters against the schema at runtime monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args outdir // string: The output directory where the results will be saved input // string: Path to input samplesheet + help // boolean: Display help message and exit + help_full // boolean: Show the full help message + show_hidden // boolean: Show hidden parameters in the help message main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // Print version and exit if required and dump pipeline parameters to JSON file @@ -54,16 +53,43 @@ workflow PIPELINE_INITIALISATION { // // Validate parameters and generate parameter summary to stdout // - pre_help_text = nfCoreLogo(monochrome_logs) - post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) - def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " - UTILS_NFVALIDATION_PLUGIN ( - help, - workflow_command, - pre_help_text, - post_help_text, + + def before_text = "" + def after_text = "" + before_text = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m nf-core/isoseq ${workflow.manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { doi -> " https://doi.org/${doi.trim().replace('https://doi.org/','')}"}.join("\n")}${workflow.manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x + +* Software dependencies + https://github.com/nf-core/isoseq/blob/master/CITATIONS.md +""" + if (monochrome_logs) { + before_text = before_text.replaceAll(/\033\[[0-9;]*m/, '') + } + + command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " + + UTILS_NFSCHEMA_PLUGIN ( + workflow, validate_params, - "nextflow_schema.json" + null, + help, + help_full, + show_hidden, + before_text, + after_text, + command, + false ) // @@ -72,6 +98,7 @@ workflow PIPELINE_INITIALISATION { UTILS_NFCORE_PIPELINE ( nextflow_cli_args ) + // // Custom validation for pipeline parameters // @@ -80,41 +107,35 @@ workflow PIPELINE_INITIALISATION { // // Create channel from input file provided through params.input // - if (params.entrypoint == "isoseq") { - Channel - .fromSamplesheet("input") - .flatMap { create_pbccs_channel(it, params.chunk) } - .set { ch_samplesheet } - } + def samplesheet_rows = samplesheetToList(params.input, "${projectDir}/assets/schema_input.json") - if (params.entrypoint == "map") { - Channel - .fromSamplesheet("input") - .flatMap { create_reads_channel(it) } - .splitFasta( - by: params.chunk, - decompress: true, - file: "chunk", - compress: true - ) - .map { - def chk = (it[1] =~ /(chunk\.\d+)\.gz/)[ 0 ][ 1 ] - def id_former = it[0].id - def id_new = it[0].id + "." + chk - [ [ id:id_new, id_former:id_former ] , it[1] ] - } - .set { ch_samplesheet } + // Primers are consumed only by LIMA and ISOSEQ_REFINE + def needs_primers = samplesheet_rows.any { row -> row[0].start_from in ['ccs', 'lima', 'refine'] } + + if (needs_primers && !params.primers) { + error( + "Missing required parameter --primers.\n" + + "A primer FASTA is required when any sample starts from 'ccs', 'lima' or 'refine'.\n" + + "It is optional only when every sample uses start_from: 'mapping'.") } + channel + .fromList(samplesheet_rows.withIndex()) + .flatMap { pair -> + def row = pair[0] + def counter = pair[1] as int + create_samplesheet_channel(row, params.chunk_ccs, counter) } + .set { ch_samplesheet } + emit: samplesheet = ch_samplesheet versions = ch_versions } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW FOR PIPELINE COMPLETION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_COMPLETION { @@ -125,43 +146,50 @@ workflow PIPELINE_COMPLETION { plaintext_email // boolean: Send plain-text email instead of HTML outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output - hook_url // string: hook URL for notifications multiqc_report // string: Path to MultiQC report main: - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + def multiqc_reports = multiqc_report.toList() // // Completion email and summary // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_reports.getVal(), + ) } completionSummary(monochrome_logs) - if (hook_url) { - imNotification(summary_params, hook_url) - } } workflow.onError { - log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting" + log.error "Pipeline failed. Please refer to troubleshooting docs for common issues: https://nf-co.re/docs/running/troubleshooting" } } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Check and validate pipeline parameters // def validateInputParameters() { genomeExistsError() + if (!params.fasta) { + error("Missing genome. \nA genome to annotate must be provided with the --fasta or --genome option.\n") + } } // @@ -171,7 +199,7 @@ def validateInputSamplesheet(input) { def (metas, fastqs) = input[1..2] // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end - def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 + def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1 if (!endedness_ok) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } @@ -203,18 +231,21 @@ def genomeExistsError() { error(error_string) } } - // // Generate methods description for MultiQC // def toolCitationText() { - // TODO nf-core: Optionally add in-text citation tools to this list. - // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", - // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ "Tools used in the workflow included:", - "FastQC (Andrews 2010),", - "MultiQC (Ewels et al. 2016)", + "CCS (PacBio),", + "Lima (PacBio),", + "IsoSeq (PacBio),", + "SAMtools (Danecek et al. 2021),", + "uLTRA (Sahlin and Mäkinen 2021),", + "minimap2 (Li 2018),", + "BamTools (Barnett et al. 2011),", + "TAMA (Kuo et al. 2020),", + "MultiQC (Ewels et al. 2016),", "." ].join(' ').trim() @@ -222,19 +253,23 @@ def toolCitationText() { } def toolBibliographyText() { - // TODO nf-core: Optionally add bibliographic entries to this list. - // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", - // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ - "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", - "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " + '
  • PacBio. CCS: Generate highly accurate single-molecule consensus reads. URL: https://ccs.how/
  • ', + '
  • PacBio. Lima: Demultiplex barcoded PacBio data. URL: https://lima.how/
  • ', + '
  • PacBio. IsoSeq: Characterisation of full-length transcripts. URL: https://github.com/PacificBiosciences/IsoSeq
  • ', + '
  • Danecek, P., Bonfield, J. K., Liddle, J., Marshall, J., Ohan, V., Pollard, M. O., Whitwham, A., Keane, T., McCarthy, S. A., Davies, R. M., & Li, H. (2021). Twelve years of SAMtools and BCFtools. GigaScience, 10(2), giab008. doi: 10.1093/gigascience/giab008
  • ', + '
  • Sahlin, K., & Mäkinen, V. (2021). Accurate spliced alignment of long RNA sequencing reads. Bioinformatics, btab540. doi: 10.1093/bioinformatics/btab540
  • ', + '
  • Li, H. (2018). Minimap2: pairwise alignment for nucleotide sequences. Bioinformatics, 34(18), 3094-3100. doi: 10.1093/bioinformatics/bty191
  • ', + '
  • Barnett, D. W., Garrison, E. K., Quinlan, A. R., Strömberg, M. P., & Marth, G. T. (2011). BamTools: a C++ API and toolkit for analyzing and managing BAM files. Bioinformatics, 27(12), 1691-1692. doi: 10.1093/bioinformatics/btr174
  • ', + '
  • Kuo, R. I., Cheng, Y., Zhang, R., et al. (2020). Illuminating the dark side of the human transcriptome with long read transcript sequencing. BMC Genomics, 21, 751. doi: 10.1186/s12864-020-07123-7
  • ', + '
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics, 32(19), 3047-3048. doi: 10.1093/bioinformatics/btw354
  • ' ].join(' ').trim() return reference_text } def methodsDescriptionText(mqc_methods_yaml) { - // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file + // Convert to a named map so can be used as with familiar NXF ${workflow} variable syntax in the MultiQC YML file def meta = [:] meta.workflow = workflow.toMap() meta["manifest_map"] = workflow.manifest.toMap() @@ -245,20 +280,17 @@ def methodsDescriptionText(mqc_methods_yaml) { // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list def temp_doi_ref = "" - String[] manifest_doi = meta.manifest_map.doi.tokenize(",") - for (String doi_ref: manifest_doi) temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) } else meta["doi_text"] = "" meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " // Tool references - meta["tool_citations"] = "" - meta["tool_bibliography"] = "" - - // TODO nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! - // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") - // meta["tool_bibliography"] = toolBibliographyText() - + meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + meta["tool_bibliography"] = toolBibliographyText() def methods_text = mqc_methods_yaml.text @@ -268,30 +300,54 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } -// Function to get to create samplesheet channel for isoseq entrypoint [ meta, bam, pbi ] -def create_pbccs_channel(row, chunk) { - +// Function to get samplesheet channel from samplesheet version 2 +def create_samplesheet_channel(row, chunk, counter) { + // Check if mandatory seq_data file exists if (!file(row[1]).exists()) { - exit 1, "ERROR: Please check input samplesheet -> BAM file does not exist!\n${row[1]}" + error("Please check input samplesheet -> BAM file does not exist!\n${row[1]}") } - if (!file(row[2]).exists()) { - exit 1, "ERROR: Please check input samplesheet -> PBI file does not exist!\n${row[2]}" - } - - def array = [] - for ( i = 1 ; i <= chunk ; i++ ) { - array << [ row[0], file(row[1]), file(row[2]) ] - } + // returns depends on the starting point + if ( row[0].start_from == 'ccs' ) { // pbccs can work on chunks, need to as many entries as defined chunks + if (!file(row[2]).exists()) { + error("Please check input samplesheet -> PBI file does not exist!\n${row[2]}") + } - return array -} + return (1..chunk) + .collect { + [ + [ + id:row[0].id + "_" + counter, + start_from:row[0].start_from + ], + file(row[1]), + file(row[2]) + ] + } -// Function to get to create samplesheet channel for map entrypoint [ meta, reads ] -def create_reads_channel(row) { - if (!file(row[3]).exists()) { - exit 1, "ERROR: Please check input samplesheet -> reads file does not exist!\n${row[3]}" } - - return [ [ row[0], file(row[3]) ] ] + else if ( row[0].start_from in ['lima', 'refine']) { + return [ [ + [ + id:row[0].id + "_" + counter, + start_from:row[0].start_from + ], + file(row[1]), + null + ] ] + } + else if ( row[0].start_from == 'mapping') { + return [ [ + [ + id:row[0].id + "_" + counter, + start_from:row[0].start_from, + single_end:true + ], + file(row[1]), + null + ] ] + } + else { + error("Please check input samplesheet -> start_from value should be either: ccs, lima, refine, or mapping. (${row[0].start_from})") + } } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index ac31f28..d6e593e 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -2,18 +2,13 @@ // Subworkflow with functionality that may be useful for any Nextflow pipeline // -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { - take: print_version // boolean: print version dump_parameters // boolean: dump parameters @@ -26,7 +21,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Print workflow version and exit on --version // if (print_version) { - log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") System.exit(0) } @@ -49,16 +44,16 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Generate version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -76,13 +71,13 @@ def getWorkflowVersion() { // Dump pipeline parameters to a JSON file // def dumpParametersToJSON(outdir) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) - FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() } @@ -90,37 +85,42 @@ def dumpParametersToJSON(outdir) { // When running with -profile conda, warn if channels have not been set-up appropriately // def checkCondaChannels() { - Yaml parser = new Yaml() + def parser = new org.yaml.snakeyaml.Yaml() def channels = [] try { def config = parser.load("conda config --show channels".execute().text) channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return + } + catch (NullPointerException e) { + log.debug(e) + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.debug(e) + log.warn("Could not verify conda channel configuration.") + return null } // Check that all channels are present // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def required_channels_in_order = ['conda-forge', 'bioconda'] def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order - def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) - } + def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order } if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + log.warn """\ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + There is a problem with your Conda configuration! + You will need to set-up the conda-forge and bioconda channels correctly. + Please refer to https://bioconda.github.io/ + The observed channel order is + ${channels} + but the following channel order is required: + ${required_channels_in_order} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + """.stripIndent(true) } } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce..02dbf09 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config index d0a926b..a09572e 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -3,7 +3,7 @@ manifest { author = """nf-core""" homePage = 'https://127.0.0.1' description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' + nextflowVersion = '!>=23.04.0' version = '9.9.9' doi = 'https://doi.org/10.5281/zenodo.5070524' } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml deleted file mode 100644 index f847611..0000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nextflow_pipeline: - - subworkflows/nf-core/utils_nextflow_pipeline/** diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 14558c3..afca543 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -2,17 +2,13 @@ // Subworkflow with utility functions specific to the nf-core pipeline template // -import org.yaml.snakeyaml.Yaml -import nextflow.extension.FilesEx - /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { - take: nextflow_cli_args @@ -21,27 +17,24 @@ workflow UTILS_NFCORE_PIPELINE { checkProfileProvided(nextflow_cli_args) emit: - valid_config + valid_config = valid_config } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Warn if a -profile or Nextflow config has not been provided to run the pipeline // def checkConfigProvided() { - valid_config = true + def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) valid_config = false } return valid_config @@ -52,39 +45,22 @@ def checkConfigProvided() { // def checkProfileProvided(nextflow_cli_args) { if (workflow.profile.endsWith(',')) { - error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } if (nextflow_cli_args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } } -// -// Citation string for pipeline -// -def workflowCitation() { - def temp_doi_ref = "" - String[] manifest_doi = workflow.manifest.doi.tokenize(",") - // Using a loop to handle multiple DOIs - // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers - // Removing ` ` since the manifest.doi is a string and not a proper list - for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - temp_doi_ref + "\n" + - "* The nf-core framework\n" + - " https://doi.org/10.1038/s41587-020-0439-x\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" -} - // // Generate workflow version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -102,8 +78,8 @@ def getWorkflowVersion() { // Get software versions for pipeline // def processVersionsFromYAML(yaml_file) { - Yaml yaml = new Yaml() - versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } return yaml.dumpAsMap(versions).trim() } @@ -113,8 +89,8 @@ def processVersionsFromYAML(yaml_file) { def workflowVersionToYAML() { return """ Workflow: - $workflow.manifest.name: ${getWorkflowVersion()} - Nextflow: $workflow.nextflow.version + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} """.stripIndent().trim() } @@ -122,11 +98,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions - .unique() - .map { processVersionsFromYAML(it) } - .unique() - .mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML())) } // @@ -134,61 +106,40 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - for (group in summary_params.keySet()) { - def group_params = summary_params.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

    $group

    \n" - summary_section += "
    \n" - for (param in group_params.keySet()) { - summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" + summary_params + .keySet() + .each { group -> + def group_params = summary_params.get(group) + // This gets the parameters of that particular group + if (group_params) { + summary_section += "

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" } - summary_section += "
    \n" } - } - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" return yaml_file_text } -// -// nf-core logo -// -def nfCoreLogo(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) - String.format( - """\n - ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) -} - -// -// Return dashed line -// -def dashedLine(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) - return "-${colors.dim}----------------------------------------------------${colors.reset}-" -} - // // ANSII colours used for terminal logging // def logColours(monochrome_logs=true) { - Map colorcodes = [:] + def colorcodes = [:] as Map // Reset / Meta colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" @@ -200,79 +151,76 @@ def logColours(monochrome_logs=true) { colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" return colorcodes } -// -// Attach the multiqc report to email -// -def attachMultiqcReport(multiqc_report) { - def mqc_report = null - try { - if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" - } - mqc_report = mqc_report[0] - } - } - } catch (all) { - if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" +// Return a single report from an object that may be a Path or List +// +def getSingleReport(multiqc_reports) { + if (multiqc_reports instanceof Path) { + return multiqc_reports + } else if (multiqc_reports instanceof List) { + if (multiqc_reports.size() == 0) { + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") + return null + } else if (multiqc_reports.size() == 1) { + return multiqc_reports.first() + } else { + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") + return multiqc_reports.first() } + } else { + return null } - return mqc_report } // @@ -281,26 +229,35 @@ def attachMultiqcReport(multiqc_report) { def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" } def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete misc_fields['Pipeline script file path'] = workflow.scriptFile misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] @@ -317,7 +274,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi email_fields['summary'] = summary << misc_fields // On success try attach the multiqc report - def mqc_report = attachMultiqcReport(multiqc_report) + def mqc_report = getSingleReport(multiqc_report) // Check if we are only sending emails on failure def email_address = email @@ -337,40 +294,45 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit + def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { + new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') + } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { + ['sendmail', '-t'].execute() << sendmail_html + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") + } + catch (Exception msg) { + log.debug(msg.toString()) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") } } // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") output_tf.delete() } @@ -378,69 +340,16 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Print pipeline summary on completion // def completionSummary(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" - } -} - -// -// Construct and send a notification to a web server as JSON e.g. Microsoft Teams and Slack -// -def imNotification(summary_params, hook_url) { - def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] } - - def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp - - def msg_fields = [:] - msg_fields['version'] = getWorkflowVersion() - msg_fields['runName'] = workflow.runName - msg_fields['success'] = workflow.success - msg_fields['dateComplete'] = workflow.complete - msg_fields['duration'] = workflow.duration - msg_fields['exitStatus'] = workflow.exitStatus - msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - msg_fields['errorReport'] = (workflow.errorReport ?: 'None') - msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") - msg_fields['projectDir'] = workflow.projectDir - msg_fields['summary'] = summary << misc_fields - - // Render the JSON template - def engine = new groovy.text.GStringTemplateEngine() - // Different JSON depending on the service provider - // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format - def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" - def hf = new File("${workflow.projectDir}/assets/${json_path}") - def json_template = engine.createTemplate(hf).make(msg_fields) - def json_message = json_template.toString() - - // POST - def post = new URL(hook_url).openConnection(); - post.setRequestMethod("POST") - post.setDoOutput(true) - post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test index 1dc317f..f117040 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -41,26 +41,14 @@ nextflow_function { } } - test("Test Function workflowCitation") { - - function "workflowCitation" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function nfCoreLogo") { + test("Test Function without logColours") { - function "nfCoreLogo" + function "logColours" when { function { """ - input[0] = false + input[0] = true """ } } @@ -73,9 +61,8 @@ nextflow_function { } } - test("Test Function dashedLine") { - - function "dashedLine" + test("Test Function with logColours") { + function "logColours" when { function { @@ -93,14 +80,13 @@ nextflow_function { } } - test("Test Function without logColours") { - - function "logColours" + test("Test Function getSingleReport with a single file") { + function "getSingleReport" when { function { """ - input[0] = true + input[0] = file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true) """ } } @@ -108,18 +94,22 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") } ) } } - test("Test Function with logColours") { - function "logColours" + test("Test Function getSingleReport with multiple files") { + function "getSingleReport" when { function { """ - input[0] = false + input[0] = [ + file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/network.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/expression.tsv', checkIfExists: true) + ] """ } } @@ -127,7 +117,9 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") }, + { assert !function.result.contains("network.tsv") }, + { assert !function.result.contains("expression.tsv") } ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap index 1037232..02c6701 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -17,26 +17,6 @@ }, "timestamp": "2024-02-28T12:02:59.729647" }, - "Test Function nfCoreLogo": { - "content": [ - "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:10.562934" - }, - "Test Function workflowCitation": { - "content": [ - "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:07.019761" - }, "Test Function without logColours": { "content": [ { @@ -95,16 +75,6 @@ }, "timestamp": "2024-02-28T12:03:17.969323" }, - "Test Function dashedLine": { - "content": [ - "-\u001b[2m----------------------------------------------------\u001b[0m-" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:14.366181" - }, "Test Function with logColours": { "content": [ { diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test new file mode 100644 index 0000000..8940d32 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test @@ -0,0 +1,29 @@ +nextflow_workflow { + + name "Test Workflow UTILS_NFCORE_PIPELINE" + script "../main.nf" + config "subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config" + workflow "UTILS_NFCORE_PIPELINE" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "utils_nfcore_pipeline" + tag "subworkflows/utils_nfcore_pipeline" + + test("Should run without failures") { + + when { + workflow { + """ + input[0] = [] + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap new file mode 100644 index 0000000..859d103 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap @@ -0,0 +1,19 @@ +{ + "Should run without failures": { + "content": [ + { + "0": [ + true + ], + "valid_config": [ + true + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:25.726491" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml deleted file mode 100644 index ac8523c..0000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfcore_pipeline: - - subworkflows/nf-core/utils_nfcore_pipeline/** diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf new file mode 100644 index 0000000..9ff0681 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,77 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // when this input is empty it will automatically use the configured schema or + // "${projectDir}/nextflow_schema.json" as default. This input should not be empty + // for meta pipelines + help // boolean: show help message + help_full // boolean: show full help message + show_hidden // boolean: show hidden parameters in help message + before_text // string: text to show before the help message and parameters summary + after_text // string: text to show after the help message and parameters summary + command // string: an example command of the pipeline + cli_typecast // boolean: whether to perform typecasting of CLI parameters. Set this to `null` to use the default behaviour + + main: + + if(help || help_full) { + help_options = [ + beforeText: before_text, + afterText: after_text, + command: command, + showHidden: show_hidden, + fullHelp: help_full, + ] + if(parameters_schema) { + help_options << [parameters_schema: parameters_schema] + } + log.info paramsHelp( + help_options, + (help instanceof String && help != "true") ? help : "", + ) + exit 0 + } + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + + summary_options = [:] + if(parameters_schema) { + summary_options << [parameters_schema: parameters_schema] + } + log.info before_text + log.info paramsSummaryLog(summary_options, input_workflow) + log.info after_text + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + validateOptions = [:] + if(parameters_schema) { + validateOptions << [parameters_schema: parameters_schema] + } + if(cli_typecast != null) { + validateOptions << [cast_cli_params: cli_typecast] + } + validateParameters(validateOptions) + } + + emit: + dummy_emit = true +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 0000000..1d8c75a --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,59 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. + - help: + type: boolean, string + description: | + Show the help message and exit. When a parameter name is given, show the help message for that parameter instead of the general help message. + - help_full: + type: boolean + description: Show the full help message and exit. + - show_hidden: + type: boolean + description: Show hidden parameters in the help message. + - before_text: + type: string + description: Text to show before the parameters summary and help message. + - after_text: + type: string + description: Text to show after the parameters summary and help message. + - command: + type: string + description: An example command to run the pipeline, to show in the help message and the summary. + - cli_typecast: + type: boolean + description: | + Whether to apply typecasting to the parameters given via the CLI before validation. + Set this to `null` to use the default behavior. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test new file mode 100644 index 0000000..1fd1eac --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -0,0 +1,178 @@ +nextflow_workflow { + + name "Test Subworkflow UTILS_NFSCHEMA_PLUGIN" + script "../main.nf" + workflow "UTILS_NFSCHEMA_PLUGIN" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" + + config "./nextflow.config" + + test("Should run nothing") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" + input[9] = null + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" + input[9] = null + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should run nothing - custom schema") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" + input[9] = null + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params - custom schema") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" + input[9] = null + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should create a help message") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = true + input[4] = false + input[5] = false + input[6] = "Before" + input[7] = "After" + input[8] = "nextflow run test/test" + input[9] = null + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config new file mode 100644 index 0000000..fd71cb8 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -0,0 +1,8 @@ +plugins { + id "nf-schema@2.7.2" +} + +validation { + parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + monochromeLogs = true +} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json similarity index 95% rename from subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json rename to subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json index 7626c1c..331e0d2 100644 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", "title": ". pipeline parameters", "description": "", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -87,10 +87,10 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf deleted file mode 100644 index 2585b65..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -// -// Subworkflow that uses the nf-validation plugin to render help text and parameter summary -// - -/* -======================================================================================== - IMPORT NF-VALIDATION PLUGIN -======================================================================================== -*/ - -include { paramsHelp } from 'plugin/nf-validation' -include { paramsSummaryLog } from 'plugin/nf-validation' -include { validateParameters } from 'plugin/nf-validation' - -/* -======================================================================================== - SUBWORKFLOW DEFINITION -======================================================================================== -*/ - -workflow UTILS_NFVALIDATION_PLUGIN { - - take: - print_help // boolean: print help - workflow_command // string: default commmand used to run pipeline - pre_help_text // string: string to be printed before help text and summary log - post_help_text // string: string to be printed after help text and summary log - validate_params // boolean: validate parameters - schema_filename // path: JSON schema file, null to use default value - - main: - - log.debug "Using schema file: ${schema_filename}" - - // Default values for strings - pre_help_text = pre_help_text ?: '' - post_help_text = post_help_text ?: '' - workflow_command = workflow_command ?: '' - - // - // Print help message if needed - // - if (print_help) { - log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text - System.exit(0) - } - - // - // Print parameter summary to stdout - // - log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text - - // - // Validate parameters relative to the parameter JSON schema - // - if (validate_params){ - validateParameters(parameters_schema: schema_filename) - } - - emit: - dummy_emit = true -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml deleted file mode 100644 index 3d4a6b0..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "UTILS_NFVALIDATION_PLUGIN" -description: Use nf-validation to initiate and validate a pipeline -keywords: - - utility - - pipeline - - initialise - - validation -components: [] -input: - - print_help: - type: boolean - description: | - Print help message and exit - - workflow_command: - type: string - description: | - The command to run the workflow e.g. "nextflow run main.nf" - - pre_help_text: - type: string - description: | - Text to print before the help message - - post_help_text: - type: string - description: | - Text to print after the help message - - validate_params: - type: boolean - description: | - Validate the parameters and error if invalid. - - schema_filename: - type: string - description: | - The filename of the schema to validate against. -output: - - dummy_emit: - type: boolean - description: | - Dummy emit to make nf-core subworkflows lint happy -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" - - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test deleted file mode 100644 index 5784a33..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test +++ /dev/null @@ -1,200 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFVALIDATION_PLUGIN" - script "../main.nf" - workflow "UTILS_NFVALIDATION_PLUGIN" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "plugin/nf-validation" - tag "'plugin/nf-validation'" - tag "utils_nfvalidation_plugin" - tag "subworkflows/utils_nfvalidation_plugin" - - test("Should run nothing") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should run help") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with command") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with extra text") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = "pre-help-text" - post_help_text = "post-help-text" - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('pre-help-text') } }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } }, - { assert workflow.stdout.any { it.contains('post-help-text') } } - ) - } - } - - test("Should validate params") { - - when { - - params { - monochrome_logs = true - test_data = '' - outdir = 1 - } - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = true - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.failed }, - { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml deleted file mode 100644 index 60b1cff..0000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfvalidation_plugin: - - subworkflows/nf-core/utils_nfvalidation_plugin/** diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 0000000..61928f1 --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,24 @@ +.DS_Store +multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt +multiqc/multiqc_data/multiqc.parquet +multiqc/multiqc_data/multiqc.log +multiqc/multiqc_data/multiqc_data.json +multiqc/multiqc_data/multiqc_sources.txt +multiqc/multiqc_data/multiqc_software_versions.txt +multiqc/multiqc_data/llms-full.txt +multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} +multiqc/multiqc_report.html +fastqc/*_fastqc.{html,zip} +pipeline_info/*.{html,json,txt,yml} +**/*pickle +**/*.metrics.json.gz +**/*.report.json +**/*_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml +**/*_flnc.json +**/*_flnc.consensusreadset.xml +**/*consensusreadset.xml +**/*filter_summary.report.json +**/lima-filter-graph.txt +**/multiqc_ccs_report.txt +**/*.bam +**/*.bam.bai diff --git a/tests/default.nf.test b/tests/default.nf.test new file mode 100644 index 0000000..7afd259 --- /dev/null +++ b/tests/default.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test" + + test("-profile test") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_path: All files + folders in ${params.outdir}/ with a stable path (including file name) + def stable_path = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_content: All files in ${params.outdir}/ with stable content + def stable_content = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assert workflow.success + assertAll( + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_path, + // All files with stable contents + stable_content + ).match() } + ) + } + } +} diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap new file mode 100644 index 0000000..2d3cbdc --- /dev/null +++ b/tests/default.nf.test.snap @@ -0,0 +1,441 @@ +{ + "-profile test": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GNU_SORT": { + "coreutils": 9.5 + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "GUNZIP": { + "gunzip": 1.13 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "PBCCS": { + "pbccs": "6.4.0" + }, + "ULTRA_ALIGN": { + "samtools": 1.17, + "ultra": 0.1 + }, + "ULTRA_INDEX": { + "gffutils": "0.11.1", + "sqlite": "3.42.0", + "ultra": 0.1 + } + }, + [ + "01_PBCCS", + "01_PBCCS/sample1_0.chunk1.bam", + "01_PBCCS/sample1_0.chunk1.bam.pbi", + "01_PBCCS/sample1_0.chunk1.metrics.json.gz", + "01_PBCCS/sample1_0.chunk1.report.json", + "01_PBCCS/sample1_0.chunk1.report.txt", + "01_PBCCS/sample1_0.chunk2.bam", + "01_PBCCS/sample1_0.chunk2.bam.pbi", + "01_PBCCS/sample1_0.chunk2.metrics.json.gz", + "01_PBCCS/sample1_0.chunk2.report.json", + "01_PBCCS/sample1_0.chunk2.report.txt", + "01_PBCCS/sample1_0.chunk3.bam", + "01_PBCCS/sample1_0.chunk3.bam.pbi", + "01_PBCCS/sample1_0.chunk3.metrics.json.gz", + "01_PBCCS/sample1_0.chunk3.report.json", + "01_PBCCS/sample1_0.chunk3.report.txt", + "01_PBCCS/sample1_0.chunk4.bam", + "01_PBCCS/sample1_0.chunk4.bam.pbi", + "01_PBCCS/sample1_0.chunk4.metrics.json.gz", + "01_PBCCS/sample1_0.chunk4.report.json", + "01_PBCCS/sample1_0.chunk4.report.txt", + "01_PBCCS/sample1_0.chunk5.bam", + "01_PBCCS/sample1_0.chunk5.bam.pbi", + "01_PBCCS/sample1_0.chunk5.metrics.json.gz", + "01_PBCCS/sample1_0.chunk5.report.json", + "01_PBCCS/sample1_0.chunk5.report.txt", + "02_LIMA", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.json", + "02_LIMA/sample1_0.chunk1_flnc.lima.clips", + "02_LIMA/sample1_0.chunk1_flnc.lima.counts", + "02_LIMA/sample1_0.chunk1_flnc.lima.guess", + "02_LIMA/sample1_0.chunk1_flnc.lima.report", + "02_LIMA/sample1_0.chunk1_flnc.lima.summary", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.json", + "02_LIMA/sample1_0.chunk2_flnc.lima.clips", + "02_LIMA/sample1_0.chunk2_flnc.lima.counts", + "02_LIMA/sample1_0.chunk2_flnc.lima.guess", + "02_LIMA/sample1_0.chunk2_flnc.lima.report", + "02_LIMA/sample1_0.chunk2_flnc.lima.summary", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.json", + "02_LIMA/sample1_0.chunk3_flnc.lima.clips", + "02_LIMA/sample1_0.chunk3_flnc.lima.counts", + "02_LIMA/sample1_0.chunk3_flnc.lima.guess", + "02_LIMA/sample1_0.chunk3_flnc.lima.report", + "02_LIMA/sample1_0.chunk3_flnc.lima.summary", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.json", + "02_LIMA/sample1_0.chunk4_flnc.lima.clips", + "02_LIMA/sample1_0.chunk4_flnc.lima.counts", + "02_LIMA/sample1_0.chunk4_flnc.lima.guess", + "02_LIMA/sample1_0.chunk4_flnc.lima.report", + "02_LIMA/sample1_0.chunk4_flnc.lima.summary", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.json", + "02_LIMA/sample1_0.chunk5_flnc.lima.clips", + "02_LIMA/sample1_0.chunk5_flnc.lima.counts", + "02_LIMA/sample1_0.chunk5_flnc.lima.guess", + "02_LIMA/sample1_0.chunk5_flnc.lima.report", + "02_LIMA/sample1_0.chunk5_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk5.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample1_0.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk5.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_tails.fa.gz", + "06.1_GUNZIP", + "06.1_GUNZIP/sample1_0.chunk1_tama.fa", + "06.1_GUNZIP/sample1_0.chunk2_tama.fa", + "06.1_GUNZIP/sample1_0.chunk3_tama.fa", + "06.1_GUNZIP/sample1_0.chunk4_tama.fa", + "06.1_GUNZIP/sample1_0.chunk5_tama.fa", + "06.2_ULTRA", + "06.2_ULTRA/sample1_0.chunk1.bam", + "06.2_ULTRA/sample1_0.chunk2.bam", + "06.2_ULTRA/sample1_0.chunk3.bam", + "06.2_ULTRA/sample1_0.chunk4.bam", + "06.2_ULTRA/sample1_0.chunk5.bam", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample1.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample1.bed", + "09_GSTAMA_MERGE/sample1_gene_report.txt", + "09_GSTAMA_MERGE/sample1_merge.txt", + "09_GSTAMA_MERGE/sample1_trans_report.txt", + "ULTRA_INDEX", + "ULTRA_INDEX/all_splice_pairs_annotations.pickle", + "ULTRA_INDEX/all_splice_sites_annotations.pickle", + "ULTRA_INDEX/chr_to_id.pickle", + "ULTRA_INDEX/database.db", + "ULTRA_INDEX/exon_choordinates_to_id.pickle", + "ULTRA_INDEX/flank_choordinates.pickle", + "ULTRA_INDEX/gene_to_small_segments.pickle", + "ULTRA_INDEX/genome.gtf", + "ULTRA_INDEX/id_to_chr.pickle", + "ULTRA_INDEX/max_intron_chr.pickle", + "ULTRA_INDEX/parts_to_segments.pickle", + "ULTRA_INDEX/ref_exon_sequences.pickle", + "ULTRA_INDEX/ref_flank_sequences.pickle", + "ULTRA_INDEX/ref_part_sequences.pickle", + "ULTRA_INDEX/ref_segment_sequences.pickle", + "ULTRA_INDEX/refs_id_lengths.pickle", + "ULTRA_INDEX/refs_lengths.pickle", + "ULTRA_INDEX/segment_id_to_choordinates.pickle", + "ULTRA_INDEX/segment_to_gene.pickle", + "ULTRA_INDEX/segment_to_ref.pickle", + "ULTRA_INDEX/splices_to_transcripts.pickle", + "ULTRA_INDEX/transcripts_to_splices.pickle", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ccs-filter-graph.txt", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_ccs_report.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ccs-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct.png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample1_0.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_0.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_0.chunk2.bam.pbi:md5,bb903ad2f6a8802a84dbbd428c59ad14", + "sample1_0.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_0.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_0.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_0.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_0.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_0.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_0.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_0.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_0.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_0.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_0.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_0.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_0.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_0.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_0.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_0.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_0.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_0.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_0.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_0.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_0.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_0.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_0.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_0.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_0.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_0.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_0.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_0.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_0.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_0.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_0.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_0.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample1_0.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_0.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_0.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_0.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_0.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_0.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_0.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_0.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_0.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_0.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample1_0.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_0.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_0.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_0.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_0.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample1_0.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_0.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_0.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_0.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_0.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_0.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_0.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_0.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_0.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_0.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample1_0.chunk1_tama.fa:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk2_tama.fa:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk3_tama.fa:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk4_tama.fa:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk5_tama.fa:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_0.chunk1_local_density_error.txt:md5,4bd7bc1b618ccfaa1eb0673bbca68f54", + "sample1_0.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_0.chunk1_read.txt:md5,c52e8879bdc59f7541a543dc00821aaf", + "sample1_0.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_0.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_0.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_0.chunk2_local_density_error.txt:md5,60baad2f8d24b0a2a29bdb5022e79013", + "sample1_0.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_0.chunk2_read.txt:md5,e99b3c43cb7bd1b32b0ff3847b871ecd", + "sample1_0.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_0.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_0.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_0.chunk3_local_density_error.txt:md5,19157d0b4b2b3ad8972935a304403c9a", + "sample1_0.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_0.chunk3_read.txt:md5,38a0482b53811ad3bba71edb7ab39db2", + "sample1_0.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_0.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_0.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_0.chunk4_local_density_error.txt:md5,c55ae4bde350d182f7f1d7bd68b3c9eb", + "sample1_0.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_0.chunk4_read.txt:md5,0489136e2ba5e69a715682c33b4c3b6f", + "sample1_0.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_0.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_0.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk5_collapsed.bed:md5,3f15a3012bb1f6ec66516944e0bcb3a2", + "sample1_0.chunk5_local_density_error.txt:md5,afa3056df739987a700ae7eabe2d3b68", + "sample1_0.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_0.chunk5_read.txt:md5,949e6d547a1c9422f97abd564cf52775", + "sample1_0.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk5_trans_read.bed:md5,6aff9f4403259838f3514942c3634322", + "sample1_0.chunk5_trans_report.txt:md5,0b1e17e83b3f750289a35725da0cf3f3", + "sample1_0.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1.tsv:md5,54b9ee29a34d402185285211b673b9c4", + "sample1.bed:md5,032f95c838f2d6b1c7f80706f8f202bf", + "sample1_gene_report.txt:md5,c698958ea806a156847961b0c719a66c", + "sample1_merge.txt:md5,4bb6e07dac0acf3e8fea53e243d96f8b", + "sample1_trans_report.txt:md5,79b1382c0049c60fd4a04bf05fa6617c", + "database.db:md5,c0af58dc048c951aec5a2b087c1fdb35", + "genome.gtf:md5,42790347cfe144a957e5fd2a2a3b8d7f", + "ccs-filter-graph.txt:md5,9f35c8022cdae8ef48f9047e67111bd1", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_general_stats.txt:md5,f60e94deef7b1d8f6f4c5e67b325e6ba", + "multiqc_lima_counts.txt:md5,a2e8e8ca0c68cb43d2887b196d251ca4", + "multiqc_lima_summary.txt:md5,11e5253acb7b8d344a4747f5796cf995" + ] + ], + "timestamp": "2026-08-14T14:54:10.608656427", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_ccs.nf.test b/tests/inputs_ccs.nf.test new file mode 100644 index 0000000..eaaa511 --- /dev/null +++ b/tests/inputs_ccs.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs ccs" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_ccs" + + test("-profile test_inputs_ccs") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_ccs.nf.test.snap b/tests/inputs_ccs.nf.test.snap new file mode 100644 index 0000000..17e36b1 --- /dev/null +++ b/tests/inputs_ccs.nf.test.snap @@ -0,0 +1,398 @@ +{ + "-profile test_inputs_ccs": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + }, + "PBCCS": { + "pbccs": "6.4.0" + } + }, + [ + "01_PBCCS", + "01_PBCCS/sample1_0.chunk1.bam", + "01_PBCCS/sample1_0.chunk1.bam.pbi", + "01_PBCCS/sample1_0.chunk1.metrics.json.gz", + "01_PBCCS/sample1_0.chunk1.report.json", + "01_PBCCS/sample1_0.chunk1.report.txt", + "01_PBCCS/sample1_0.chunk2.bam", + "01_PBCCS/sample1_0.chunk2.bam.pbi", + "01_PBCCS/sample1_0.chunk2.metrics.json.gz", + "01_PBCCS/sample1_0.chunk2.report.json", + "01_PBCCS/sample1_0.chunk2.report.txt", + "01_PBCCS/sample1_0.chunk3.bam", + "01_PBCCS/sample1_0.chunk3.bam.pbi", + "01_PBCCS/sample1_0.chunk3.metrics.json.gz", + "01_PBCCS/sample1_0.chunk3.report.json", + "01_PBCCS/sample1_0.chunk3.report.txt", + "01_PBCCS/sample1_0.chunk4.bam", + "01_PBCCS/sample1_0.chunk4.bam.pbi", + "01_PBCCS/sample1_0.chunk4.metrics.json.gz", + "01_PBCCS/sample1_0.chunk4.report.json", + "01_PBCCS/sample1_0.chunk4.report.txt", + "01_PBCCS/sample1_0.chunk5.bam", + "01_PBCCS/sample1_0.chunk5.bam.pbi", + "01_PBCCS/sample1_0.chunk5.metrics.json.gz", + "01_PBCCS/sample1_0.chunk5.report.json", + "01_PBCCS/sample1_0.chunk5.report.txt", + "02_LIMA", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.json", + "02_LIMA/sample1_0.chunk1_flnc.lima.clips", + "02_LIMA/sample1_0.chunk1_flnc.lima.counts", + "02_LIMA/sample1_0.chunk1_flnc.lima.guess", + "02_LIMA/sample1_0.chunk1_flnc.lima.report", + "02_LIMA/sample1_0.chunk1_flnc.lima.summary", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.json", + "02_LIMA/sample1_0.chunk2_flnc.lima.clips", + "02_LIMA/sample1_0.chunk2_flnc.lima.counts", + "02_LIMA/sample1_0.chunk2_flnc.lima.guess", + "02_LIMA/sample1_0.chunk2_flnc.lima.report", + "02_LIMA/sample1_0.chunk2_flnc.lima.summary", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.json", + "02_LIMA/sample1_0.chunk3_flnc.lima.clips", + "02_LIMA/sample1_0.chunk3_flnc.lima.counts", + "02_LIMA/sample1_0.chunk3_flnc.lima.guess", + "02_LIMA/sample1_0.chunk3_flnc.lima.report", + "02_LIMA/sample1_0.chunk3_flnc.lima.summary", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.json", + "02_LIMA/sample1_0.chunk4_flnc.lima.clips", + "02_LIMA/sample1_0.chunk4_flnc.lima.counts", + "02_LIMA/sample1_0.chunk4_flnc.lima.guess", + "02_LIMA/sample1_0.chunk4_flnc.lima.report", + "02_LIMA/sample1_0.chunk4_flnc.lima.summary", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.json", + "02_LIMA/sample1_0.chunk5_flnc.lima.clips", + "02_LIMA/sample1_0.chunk5_flnc.lima.counts", + "02_LIMA/sample1_0.chunk5_flnc.lima.guess", + "02_LIMA/sample1_0.chunk5_flnc.lima.report", + "02_LIMA/sample1_0.chunk5_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk5.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample1_0.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk5.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample1_0.chunk1.bam", + "06_MINIMAP2/sample1_0.chunk1.bam.bai", + "06_MINIMAP2/sample1_0.chunk2.bam", + "06_MINIMAP2/sample1_0.chunk2.bam.bai", + "06_MINIMAP2/sample1_0.chunk3.bam", + "06_MINIMAP2/sample1_0.chunk3.bam.bai", + "06_MINIMAP2/sample1_0.chunk4.bam", + "06_MINIMAP2/sample1_0.chunk4.bam.bai", + "06_MINIMAP2/sample1_0.chunk5.bam", + "06_MINIMAP2/sample1_0.chunk5.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample1.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample1.bed", + "09_GSTAMA_MERGE/sample1_gene_report.txt", + "09_GSTAMA_MERGE/sample1_merge.txt", + "09_GSTAMA_MERGE/sample1_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ccs-filter-graph.txt", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_ccs_report.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ccs-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct.png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample1_0.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_0.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_0.chunk2.bam.pbi:md5,bb903ad2f6a8802a84dbbd428c59ad14", + "sample1_0.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_0.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_0.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_0.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_0.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_0.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_0.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_0.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_0.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_0.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_0.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_0.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_0.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_0.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_0.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_0.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_0.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_0.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_0.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_0.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_0.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_0.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_0.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_0.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_0.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_0.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_0.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_0.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_0.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_0.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_0.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_0.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample1_0.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_0.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_0.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_0.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_0.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_0.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_0.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_0.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_0.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_0.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample1_0.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_0.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_0.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_0.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_0.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample1_0.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_0.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_0.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_0.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_0.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_0.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_0.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_0.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_0.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_0.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample1_0.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_0.chunk1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample1_0.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_0.chunk1_read.txt:md5,bd4b21ad8ac7b2bec993b7b72501c2ab", + "sample1_0.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_0.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_0.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_0.chunk2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample1_0.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_0.chunk2_read.txt:md5,4ae8757dedd0f8cfb7c922dd7589a4f2", + "sample1_0.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_0.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_0.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_0.chunk3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample1_0.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_0.chunk3_read.txt:md5,3a2c866905dfcdb140e86340a95d90d2", + "sample1_0.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_0.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_0.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_0.chunk4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample1_0.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_0.chunk4_read.txt:md5,e8eb42852f61205870f89e015a2f987e", + "sample1_0.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_0.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_0.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample1_0.chunk5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample1_0.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_0.chunk5_read.txt:md5,6fc5c8520a8bb47cc549376f5e32ce3b", + "sample1_0.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample1_0.chunk5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample1_0.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1.tsv:md5,54b9ee29a34d402185285211b673b9c4", + "sample1.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample1_gene_report.txt:md5,c698958ea806a156847961b0c719a66c", + "sample1_merge.txt:md5,07cdfbf4070903d66ffe459f9ce94715", + "sample1_trans_report.txt:md5,e40712d885417415a654adaed0c34c08", + "ccs-filter-graph.txt:md5,9f35c8022cdae8ef48f9047e67111bd1", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_general_stats.txt:md5,f60e94deef7b1d8f6f4c5e67b325e6ba", + "multiqc_lima_counts.txt:md5,a2e8e8ca0c68cb43d2887b196d251ca4", + "multiqc_lima_summary.txt:md5,11e5253acb7b8d344a4747f5796cf995" + ] + ], + "timestamp": "2026-08-14T14:56:47.468798307", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_ccs_lima_refine_map.nf.test b/tests/inputs_ccs_lima_refine_map.nf.test new file mode 100644 index 0000000..0c658b9 --- /dev/null +++ b/tests/inputs_ccs_lima_refine_map.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs ccs lima refine map" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_ccs_lima_refine_map" + + test("-profile test_inputs_ccs_lima_refine_map") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_ccs_lima_refine_map.nf.test.snap b/tests/inputs_ccs_lima_refine_map.nf.test.snap new file mode 100644 index 0000000..12b06db --- /dev/null +++ b/tests/inputs_ccs_lima_refine_map.nf.test.snap @@ -0,0 +1,664 @@ +{ + "-profile test_inputs_ccs_lima_refine_map": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + }, + "PBCCS": { + "pbccs": "6.4.0" + } + }, + [ + "01_PBCCS", + "01_PBCCS/sample1_0.chunk1.bam", + "01_PBCCS/sample1_0.chunk1.bam.pbi", + "01_PBCCS/sample1_0.chunk1.metrics.json.gz", + "01_PBCCS/sample1_0.chunk1.report.json", + "01_PBCCS/sample1_0.chunk1.report.txt", + "01_PBCCS/sample1_0.chunk2.bam", + "01_PBCCS/sample1_0.chunk2.bam.pbi", + "01_PBCCS/sample1_0.chunk2.metrics.json.gz", + "01_PBCCS/sample1_0.chunk2.report.json", + "01_PBCCS/sample1_0.chunk2.report.txt", + "01_PBCCS/sample1_0.chunk3.bam", + "01_PBCCS/sample1_0.chunk3.bam.pbi", + "01_PBCCS/sample1_0.chunk3.metrics.json.gz", + "01_PBCCS/sample1_0.chunk3.report.json", + "01_PBCCS/sample1_0.chunk3.report.txt", + "01_PBCCS/sample1_0.chunk4.bam", + "01_PBCCS/sample1_0.chunk4.bam.pbi", + "01_PBCCS/sample1_0.chunk4.metrics.json.gz", + "01_PBCCS/sample1_0.chunk4.report.json", + "01_PBCCS/sample1_0.chunk4.report.txt", + "01_PBCCS/sample1_0.chunk5.bam", + "01_PBCCS/sample1_0.chunk5.bam.pbi", + "01_PBCCS/sample1_0.chunk5.metrics.json.gz", + "01_PBCCS/sample1_0.chunk5.report.json", + "01_PBCCS/sample1_0.chunk5.report.txt", + "02_LIMA", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.json", + "02_LIMA/sample1_0.chunk1_flnc.lima.clips", + "02_LIMA/sample1_0.chunk1_flnc.lima.counts", + "02_LIMA/sample1_0.chunk1_flnc.lima.guess", + "02_LIMA/sample1_0.chunk1_flnc.lima.report", + "02_LIMA/sample1_0.chunk1_flnc.lima.summary", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.json", + "02_LIMA/sample1_0.chunk2_flnc.lima.clips", + "02_LIMA/sample1_0.chunk2_flnc.lima.counts", + "02_LIMA/sample1_0.chunk2_flnc.lima.guess", + "02_LIMA/sample1_0.chunk2_flnc.lima.report", + "02_LIMA/sample1_0.chunk2_flnc.lima.summary", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.json", + "02_LIMA/sample1_0.chunk3_flnc.lima.clips", + "02_LIMA/sample1_0.chunk3_flnc.lima.counts", + "02_LIMA/sample1_0.chunk3_flnc.lima.guess", + "02_LIMA/sample1_0.chunk3_flnc.lima.report", + "02_LIMA/sample1_0.chunk3_flnc.lima.summary", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.json", + "02_LIMA/sample1_0.chunk4_flnc.lima.clips", + "02_LIMA/sample1_0.chunk4_flnc.lima.counts", + "02_LIMA/sample1_0.chunk4_flnc.lima.guess", + "02_LIMA/sample1_0.chunk4_flnc.lima.report", + "02_LIMA/sample1_0.chunk4_flnc.lima.summary", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.json", + "02_LIMA/sample1_0.chunk5_flnc.lima.clips", + "02_LIMA/sample1_0.chunk5_flnc.lima.counts", + "02_LIMA/sample1_0.chunk5_flnc.lima.guess", + "02_LIMA/sample1_0.chunk5_flnc.lima.report", + "02_LIMA/sample1_0.chunk5_flnc.lima.summary", + "02_LIMA/sample2_1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample2_1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample2_1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample2_1_flnc.consensusreadset.xml", + "02_LIMA/sample2_1_flnc.json", + "02_LIMA/sample2_1_flnc.lima.clips", + "02_LIMA/sample2_1_flnc.lima.counts", + "02_LIMA/sample2_1_flnc.lima.guess", + "02_LIMA/sample2_1_flnc.lima.report", + "02_LIMA/sample2_1_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk5.report.csv", + "03_ISOSEQ_REFINE/sample2_1.bam", + "03_ISOSEQ_REFINE/sample2_1.bam.pbi", + "03_ISOSEQ_REFINE/sample2_1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample2_1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample2_1.report.csv", + "03_ISOSEQ_REFINE/sample3_2.bam", + "03_ISOSEQ_REFINE/sample3_2.bam.pbi", + "03_ISOSEQ_REFINE/sample3_2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample3_2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample3_2.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample1_0.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk5.fasta", + "04_BAMTOOLS_CONVERT/sample2_1.fasta", + "04_BAMTOOLS_CONVERT/sample3_2.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.6_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.6_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.6_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_2.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_2.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_2.chunk.1_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample1_0.chunk1.bam", + "06_MINIMAP2/sample1_0.chunk1.bam.bai", + "06_MINIMAP2/sample1_0.chunk2.bam", + "06_MINIMAP2/sample1_0.chunk2.bam.bai", + "06_MINIMAP2/sample1_0.chunk3.bam", + "06_MINIMAP2/sample1_0.chunk3.bam.bai", + "06_MINIMAP2/sample1_0.chunk4.bam", + "06_MINIMAP2/sample1_0.chunk4.bam.bai", + "06_MINIMAP2/sample1_0.chunk5.bam", + "06_MINIMAP2/sample1_0.chunk5.bam.bai", + "06_MINIMAP2/sample2_1.chunk.1.bam", + "06_MINIMAP2/sample2_1.chunk.1.bam.bai", + "06_MINIMAP2/sample2_1.chunk.2.bam", + "06_MINIMAP2/sample2_1.chunk.2.bam.bai", + "06_MINIMAP2/sample2_1.chunk.3.bam", + "06_MINIMAP2/sample2_1.chunk.3.bam.bai", + "06_MINIMAP2/sample2_1.chunk.4.bam", + "06_MINIMAP2/sample2_1.chunk.4.bam.bai", + "06_MINIMAP2/sample2_1.chunk.5.bam", + "06_MINIMAP2/sample2_1.chunk.5.bam.bai", + "06_MINIMAP2/sample2_1.chunk.6.bam", + "06_MINIMAP2/sample2_1.chunk.6.bam.bai", + "06_MINIMAP2/sample3_2.chunk.1.bam", + "06_MINIMAP2/sample3_2.chunk.1.bam.bai", + "06_MINIMAP2/sample4_3.chunk.1.bam", + "06_MINIMAP2/sample4_3.chunk.1.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_variants.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample1.tsv", + "08_GSTAMA_FILELIST/sample2.tsv", + "08_GSTAMA_FILELIST/sample3.tsv", + "08_GSTAMA_FILELIST/sample4.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample1.bed", + "09_GSTAMA_MERGE/sample1_gene_report.txt", + "09_GSTAMA_MERGE/sample1_merge.txt", + "09_GSTAMA_MERGE/sample1_trans_report.txt", + "09_GSTAMA_MERGE/sample2.bed", + "09_GSTAMA_MERGE/sample2_gene_report.txt", + "09_GSTAMA_MERGE/sample2_merge.txt", + "09_GSTAMA_MERGE/sample2_trans_report.txt", + "09_GSTAMA_MERGE/sample3.bed", + "09_GSTAMA_MERGE/sample3_gene_report.txt", + "09_GSTAMA_MERGE/sample3_merge.txt", + "09_GSTAMA_MERGE/sample3_trans_report.txt", + "09_GSTAMA_MERGE/sample4.bed", + "09_GSTAMA_MERGE/sample4_gene_report.txt", + "09_GSTAMA_MERGE/sample4_merge.txt", + "09_GSTAMA_MERGE/sample4_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ccs-filter-graph.txt", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_ccs_report.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ccs-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct.png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample1_0.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_0.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_0.chunk2.bam.pbi:md5,bb903ad2f6a8802a84dbbd428c59ad14", + "sample1_0.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_0.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_0.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_0.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_0.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_0.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_0.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_0.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_0.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_0.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_0.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_0.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_0.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_0.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_0.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_0.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_0.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_0.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_0.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_0.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_0.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_0.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_0.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_0.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_0.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_0.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_0.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_0.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_0.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_0.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_0.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_0.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample2_1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,97895a364955b507a7ee695cccd85993", + "sample2_1_flnc.lima.clips:md5,fa03bc75bd78b2648a139fd67c69208f", + "sample2_1_flnc.lima.counts:md5,842c6a23ca2de504ced4538ad5111da1", + "sample2_1_flnc.lima.guess:md5,d3675af3ca8a908ee9e3c231668392d3", + "sample2_1_flnc.lima.report:md5,dc073985322ae0a003ccc7e0fa4db5e6", + "sample2_1_flnc.lima.summary:md5,bcbcaaaca418bdeb91141c81715ca420", + "sample1_0.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_0.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_0.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_0.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_0.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_0.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_0.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_0.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_0.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_0.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample2_1.bam.pbi:md5,5519b222440f9443228760a3ad91962f", + "sample2_1.report.csv:md5,d42a139e5d9b08396bdb087c01243ea9", + "sample3_2.bam.pbi:md5,f20c3a1c38a0642ef96a98c0645e47ff", + "sample3_2.report.csv:md5,8d350f8dba8c928ec8b693f47dc1c096", + "sample1_0.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_0.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_0.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_0.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_0.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample2_1.fasta:md5,c5c29b8da57e24222fded8814ea43fca", + "sample3_2.fasta:md5,81b607067bac48a5b53281e982acd623", + "sample1_0.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_0.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_0.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_0.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_0.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_0.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_0.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_0.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_0.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_0.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample2_1.chunk.1_tama.fa.gz:md5,eba6fd6a37715feb1f55acd2aba308fe", + "sample2_1.chunk.1_tama_polya_flnc_report.txt.gz:md5,8f4ccfb4bea6210fcd2677141043eaaf", + "sample2_1.chunk.1_tama_tails.fa.gz:md5,db050c0f7f02653fab9d3cb098874995", + "sample2_1.chunk.2_tama.fa.gz:md5,dba8219a7fd40d39e145358928e79718", + "sample2_1.chunk.2_tama_polya_flnc_report.txt.gz:md5,31719db0fd430cb6854da57d6882eb80", + "sample2_1.chunk.2_tama_tails.fa.gz:md5,5e667c1aa16049e36b9b9b185b672f90", + "sample2_1.chunk.3_tama.fa.gz:md5,2284da2407fb3d0c96280a5963c0f21d", + "sample2_1.chunk.3_tama_polya_flnc_report.txt.gz:md5,8d95867bcb53e018305c18ed5cc14c00", + "sample2_1.chunk.3_tama_tails.fa.gz:md5,63f2d71634e092e478909018f4c08fa9", + "sample2_1.chunk.4_tama.fa.gz:md5,c63152a17a861184fb1f2611dcbcce12", + "sample2_1.chunk.4_tama_polya_flnc_report.txt.gz:md5,7350ae2922384469f6c015a6e4898685", + "sample2_1.chunk.4_tama_tails.fa.gz:md5,7703b0eff06e6c63cbf7fc212f3089ce", + "sample2_1.chunk.5_tama.fa.gz:md5,89ea3e7f09fd3db800adc8e13ceff26b", + "sample2_1.chunk.5_tama_polya_flnc_report.txt.gz:md5,d3c83d0d228f4f3850e2af8cdecc763a", + "sample2_1.chunk.5_tama_tails.fa.gz:md5,0d92991493cf2ce045cd2a44ebca2f6a", + "sample2_1.chunk.6_tama.fa.gz:md5,34a80800ddc45859c430cf4156158413", + "sample2_1.chunk.6_tama_polya_flnc_report.txt.gz:md5,460c9b71e2bb758dad83331aca18d2fd", + "sample2_1.chunk.6_tama_tails.fa.gz:md5,a11e5f0f7370a708b31469a42b95b6c1", + "sample3_2.chunk.1_tama.fa.gz:md5,6ed270ddf8e79b541a51407a32889c9b", + "sample3_2.chunk.1_tama_polya_flnc_report.txt.gz:md5,db83ccbbc1326abd9638bc2adfaa8677", + "sample3_2.chunk.1_tama_tails.fa.gz:md5,3d91c6a6222dbab8823b6a506dc3555d", + "sample1_0.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_0.chunk1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample1_0.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_0.chunk1_read.txt:md5,bd4b21ad8ac7b2bec993b7b72501c2ab", + "sample1_0.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_0.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_0.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_0.chunk2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample1_0.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_0.chunk2_read.txt:md5,4ae8757dedd0f8cfb7c922dd7589a4f2", + "sample1_0.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_0.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_0.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_0.chunk3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample1_0.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_0.chunk3_read.txt:md5,3a2c866905dfcdb140e86340a95d90d2", + "sample1_0.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_0.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_0.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_0.chunk4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample1_0.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_0.chunk4_read.txt:md5,e8eb42852f61205870f89e015a2f987e", + "sample1_0.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_0.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_0.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample1_0.chunk5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample1_0.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_0.chunk5_read.txt:md5,6fc5c8520a8bb47cc549376f5e32ce3b", + "sample1_0.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample1_0.chunk5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample1_0.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.1_collapsed.bed:md5,2a5b07fa24ddcb51259063a76c52acee", + "sample2_1.chunk.1_local_density_error.txt:md5,b6fa52ea6fa7f3a7add75dec930cc6b3", + "sample2_1.chunk.1_polya.txt:md5,48e49820ebf548cf1547fd7dfd93b753", + "sample2_1.chunk.1_read.txt:md5,3a4d70008407cb42bac94ec94ffaecac", + "sample2_1.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.1_trans_read.bed:md5,ae71e848615d3f0ae550e6bc4639f44e", + "sample2_1.chunk.1_trans_report.txt:md5,3d21f4fda06970fa6ef67acd6f7ed9d5", + "sample2_1.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.2_collapsed.bed:md5,0f05bb1b7b5e40614382eb1817dd557e", + "sample2_1.chunk.2_local_density_error.txt:md5,4a46e426dcd85ca8c743ea3422f65188", + "sample2_1.chunk.2_polya.txt:md5,d21f8811d58b55d0d94d9d3f93c7fceb", + "sample2_1.chunk.2_read.txt:md5,3600aefaca5b22494e085a686d1b46cc", + "sample2_1.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.2_trans_read.bed:md5,628e3e88297ce40fca491345304dfba6", + "sample2_1.chunk.2_trans_report.txt:md5,983a121808b374b2f05166de960b0419", + "sample2_1.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.3_collapsed.bed:md5,4c80428bc3bd3a052209df58eb57eaf8", + "sample2_1.chunk.3_local_density_error.txt:md5,8c5967a572846420b98932b7fd98310c", + "sample2_1.chunk.3_polya.txt:md5,ee69a686a6dfad12f29e235afd72b377", + "sample2_1.chunk.3_read.txt:md5,7ac6ae4752631ee92442d3d4a86846a8", + "sample2_1.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.3_trans_read.bed:md5,2de626e8c3e8fa21b938e888229d6160", + "sample2_1.chunk.3_trans_report.txt:md5,52bcdea21e4f8bef847e2c21693c40ea", + "sample2_1.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.4_collapsed.bed:md5,116215ae754f236bca4c4115d6e7b124", + "sample2_1.chunk.4_local_density_error.txt:md5,65af1e6f5a1d39ad6b24bd1a63a6278a", + "sample2_1.chunk.4_polya.txt:md5,c9919cd20d7bbf4f593cd2844bd28550", + "sample2_1.chunk.4_read.txt:md5,4760b76910a567cf62a83f4b21d085aa", + "sample2_1.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.4_trans_read.bed:md5,6d4851ed8eb0b2df1d656dbb5a2ad3c6", + "sample2_1.chunk.4_trans_report.txt:md5,1029b53f7d59c97d87df970fb3e0501e", + "sample2_1.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.5_collapsed.bed:md5,35d2a8acdcd0a40330624f5bcf033206", + "sample2_1.chunk.5_local_density_error.txt:md5,e87053b8c7f58a350225a6d43be17d72", + "sample2_1.chunk.5_polya.txt:md5,8b4cc38336bfe6ff6d8eca74166d24a9", + "sample2_1.chunk.5_read.txt:md5,f441d3c36963cc277178b4e1af275d1b", + "sample2_1.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.5_trans_read.bed:md5,8175932eec00949b37030106d9e84621", + "sample2_1.chunk.5_trans_report.txt:md5,178e21fb7ea02d1b84682dc2e934c330", + "sample2_1.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.6_collapsed.bed:md5,93c66ee57dbf302a6b2d99600cc730c4", + "sample2_1.chunk.6_local_density_error.txt:md5,0b62cde5a47f0a4dc2c0e4c26235b241", + "sample2_1.chunk.6_polya.txt:md5,2cb46eac9b00a08095b1bd4e0244559d", + "sample2_1.chunk.6_read.txt:md5,9ea2721f96d5efe63bc35850bbf12520", + "sample2_1.chunk.6_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.6_trans_read.bed:md5,2080114fac4005105ed4b8f291afd4b9", + "sample2_1.chunk.6_trans_report.txt:md5,15ad4aa7c425624464a179cf4d434e2e", + "sample2_1.chunk.6_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.6_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3_2.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_2.chunk.1_local_density_error.txt:md5,25e666a9e8b3af9271532659a0b28013", + "sample3_2.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_2.chunk.1_read.txt:md5,f5bedd14060f896f268d1aff22da3c5b", + "sample3_2.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_2.chunk.1_trans_read.bed:md5,86f4b69ae68a2ac46a38b9d82946f63e", + "sample3_2.chunk.1_trans_report.txt:md5,41739b80f8a4b828e8d91883c514166d", + "sample3_2.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_2.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_3.chunk.1_collapsed.bed:md5,66cf1481b1e69fa4cf3b13f07efd8c40", + "sample4_3.chunk.1_local_density_error.txt:md5,2e2b91bbdd3225ebcd3402edf86a2cc6", + "sample4_3.chunk.1_polya.txt:md5,6fd5552e7b2152e3b46cdee04b140104", + "sample4_3.chunk.1_read.txt:md5,b0dc554a9b99c5f5b6fd3203f276c797", + "sample4_3.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_3.chunk.1_trans_read.bed:md5,347f03649d304377cb37dec40830d35c", + "sample4_3.chunk.1_trans_report.txt:md5,e2b7c12377d7a4424b253898f0f0bd7a", + "sample4_3.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_3.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1.tsv:md5,54b9ee29a34d402185285211b673b9c4", + "sample2.tsv:md5,b3caf3345018ed9163f7bf6930c7d15f", + "sample3.tsv:md5,0e6a11c7bf550d9d572f20d3d8dc243a", + "sample4.tsv:md5,91221b5d691643dec83d949483327929", + "sample1.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample1_gene_report.txt:md5,c698958ea806a156847961b0c719a66c", + "sample1_merge.txt:md5,07cdfbf4070903d66ffe459f9ce94715", + "sample1_trans_report.txt:md5,e40712d885417415a654adaed0c34c08", + "sample2.bed:md5,f587c4c86b185278b89f6495effde755", + "sample2_gene_report.txt:md5,66464ca0939f47523526aa60196255a5", + "sample2_merge.txt:md5,0cf12e5b93e8e0b112e947062ede095a", + "sample2_trans_report.txt:md5,999ef6a6bd746e7c3fee9253cd141c1b", + "sample3.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_gene_report.txt:md5,7e80acc9ecdfe2993a106025de81cb3f", + "sample3_merge.txt:md5,b97dae2c4f776976e9882c44c26f7eb4", + "sample3_trans_report.txt:md5,47347e08658badbba716b32eea38fa87", + "sample4.bed:md5,66cf1481b1e69fa4cf3b13f07efd8c40", + "sample4_gene_report.txt:md5,770f948f7311400501c66340df9653de", + "sample4_merge.txt:md5,95d1078bb33d7bdb54a3f012a70104be", + "sample4_trans_report.txt:md5,36b5850e8b8c9b187c2bbee88007533c", + "ccs-filter-graph.txt:md5,9f35c8022cdae8ef48f9047e67111bd1", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_general_stats.txt:md5,f60e94deef7b1d8f6f4c5e67b325e6ba", + "multiqc_lima_counts.txt:md5,d00757e4773f621db4f5459ca7a21088", + "multiqc_lima_summary.txt:md5,ab0445a6efcf301bc96362c62743c273" + ] + ], + "timestamp": "2026-08-14T15:01:04.99277429", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_ccs_lima_refine_map_mergeAll.nf.test b/tests/inputs_ccs_lima_refine_map_mergeAll.nf.test new file mode 100644 index 0000000..1c559bd --- /dev/null +++ b/tests/inputs_ccs_lima_refine_map_mergeAll.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs ccs lima refine map and merge all samples" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_ccs_lima_refine_map_mergeAll" + + test("-profile test_inputs_ccs_lima_refine_map_mergeAll") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_ccs_lima_refine_map_mergeAll.nf.test.snap b/tests/inputs_ccs_lima_refine_map_mergeAll.nf.test.snap new file mode 100644 index 0000000..be3c207 --- /dev/null +++ b/tests/inputs_ccs_lima_refine_map_mergeAll.nf.test.snap @@ -0,0 +1,677 @@ +{ + "-profile test_inputs_ccs_lima_refine_map_mergeAll": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_MERGE_ALL": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + }, + "PBCCS": { + "pbccs": "6.4.0" + } + }, + [ + "01_PBCCS", + "01_PBCCS/sample1_0.chunk1.bam", + "01_PBCCS/sample1_0.chunk1.bam.pbi", + "01_PBCCS/sample1_0.chunk1.metrics.json.gz", + "01_PBCCS/sample1_0.chunk1.report.json", + "01_PBCCS/sample1_0.chunk1.report.txt", + "01_PBCCS/sample1_0.chunk2.bam", + "01_PBCCS/sample1_0.chunk2.bam.pbi", + "01_PBCCS/sample1_0.chunk2.metrics.json.gz", + "01_PBCCS/sample1_0.chunk2.report.json", + "01_PBCCS/sample1_0.chunk2.report.txt", + "01_PBCCS/sample1_0.chunk3.bam", + "01_PBCCS/sample1_0.chunk3.bam.pbi", + "01_PBCCS/sample1_0.chunk3.metrics.json.gz", + "01_PBCCS/sample1_0.chunk3.report.json", + "01_PBCCS/sample1_0.chunk3.report.txt", + "01_PBCCS/sample1_0.chunk4.bam", + "01_PBCCS/sample1_0.chunk4.bam.pbi", + "01_PBCCS/sample1_0.chunk4.metrics.json.gz", + "01_PBCCS/sample1_0.chunk4.report.json", + "01_PBCCS/sample1_0.chunk4.report.txt", + "01_PBCCS/sample1_0.chunk5.bam", + "01_PBCCS/sample1_0.chunk5.bam.pbi", + "01_PBCCS/sample1_0.chunk5.metrics.json.gz", + "01_PBCCS/sample1_0.chunk5.report.json", + "01_PBCCS/sample1_0.chunk5.report.txt", + "02_LIMA", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.json", + "02_LIMA/sample1_0.chunk1_flnc.lima.clips", + "02_LIMA/sample1_0.chunk1_flnc.lima.counts", + "02_LIMA/sample1_0.chunk1_flnc.lima.guess", + "02_LIMA/sample1_0.chunk1_flnc.lima.report", + "02_LIMA/sample1_0.chunk1_flnc.lima.summary", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.json", + "02_LIMA/sample1_0.chunk2_flnc.lima.clips", + "02_LIMA/sample1_0.chunk2_flnc.lima.counts", + "02_LIMA/sample1_0.chunk2_flnc.lima.guess", + "02_LIMA/sample1_0.chunk2_flnc.lima.report", + "02_LIMA/sample1_0.chunk2_flnc.lima.summary", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.json", + "02_LIMA/sample1_0.chunk3_flnc.lima.clips", + "02_LIMA/sample1_0.chunk3_flnc.lima.counts", + "02_LIMA/sample1_0.chunk3_flnc.lima.guess", + "02_LIMA/sample1_0.chunk3_flnc.lima.report", + "02_LIMA/sample1_0.chunk3_flnc.lima.summary", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.json", + "02_LIMA/sample1_0.chunk4_flnc.lima.clips", + "02_LIMA/sample1_0.chunk4_flnc.lima.counts", + "02_LIMA/sample1_0.chunk4_flnc.lima.guess", + "02_LIMA/sample1_0.chunk4_flnc.lima.report", + "02_LIMA/sample1_0.chunk4_flnc.lima.summary", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.json", + "02_LIMA/sample1_0.chunk5_flnc.lima.clips", + "02_LIMA/sample1_0.chunk5_flnc.lima.counts", + "02_LIMA/sample1_0.chunk5_flnc.lima.guess", + "02_LIMA/sample1_0.chunk5_flnc.lima.report", + "02_LIMA/sample1_0.chunk5_flnc.lima.summary", + "02_LIMA/sample2_1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample2_1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample2_1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample2_1_flnc.consensusreadset.xml", + "02_LIMA/sample2_1_flnc.json", + "02_LIMA/sample2_1_flnc.lima.clips", + "02_LIMA/sample2_1_flnc.lima.counts", + "02_LIMA/sample2_1_flnc.lima.guess", + "02_LIMA/sample2_1_flnc.lima.report", + "02_LIMA/sample2_1_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk5.report.csv", + "03_ISOSEQ_REFINE/sample2_1.bam", + "03_ISOSEQ_REFINE/sample2_1.bam.pbi", + "03_ISOSEQ_REFINE/sample2_1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample2_1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample2_1.report.csv", + "03_ISOSEQ_REFINE/sample3_2.bam", + "03_ISOSEQ_REFINE/sample3_2.bam.pbi", + "03_ISOSEQ_REFINE/sample3_2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample3_2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample3_2.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample1_0.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk5.fasta", + "04_BAMTOOLS_CONVERT/sample2_1.fasta", + "04_BAMTOOLS_CONVERT/sample3_2.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.6_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.6_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_1.chunk.6_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_2.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_2.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_2.chunk.1_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample1_0.chunk1.bam", + "06_MINIMAP2/sample1_0.chunk1.bam.bai", + "06_MINIMAP2/sample1_0.chunk2.bam", + "06_MINIMAP2/sample1_0.chunk2.bam.bai", + "06_MINIMAP2/sample1_0.chunk3.bam", + "06_MINIMAP2/sample1_0.chunk3.bam.bai", + "06_MINIMAP2/sample1_0.chunk4.bam", + "06_MINIMAP2/sample1_0.chunk4.bam.bai", + "06_MINIMAP2/sample1_0.chunk5.bam", + "06_MINIMAP2/sample1_0.chunk5.bam.bai", + "06_MINIMAP2/sample2_1.chunk.1.bam", + "06_MINIMAP2/sample2_1.chunk.1.bam.bai", + "06_MINIMAP2/sample2_1.chunk.2.bam", + "06_MINIMAP2/sample2_1.chunk.2.bam.bai", + "06_MINIMAP2/sample2_1.chunk.3.bam", + "06_MINIMAP2/sample2_1.chunk.3.bam.bai", + "06_MINIMAP2/sample2_1.chunk.4.bam", + "06_MINIMAP2/sample2_1.chunk.4.bam.bai", + "06_MINIMAP2/sample2_1.chunk.5.bam", + "06_MINIMAP2/sample2_1.chunk.5.bam.bai", + "06_MINIMAP2/sample2_1.chunk.6.bam", + "06_MINIMAP2/sample2_1.chunk.6.bam.bai", + "06_MINIMAP2/sample3_2.chunk.1.bam", + "06_MINIMAP2/sample3_2.chunk.1.bam.bai", + "06_MINIMAP2/sample4_3.chunk.1.bam", + "06_MINIMAP2/sample4_3.chunk.1.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.5_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_read.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_1.chunk.6_variants.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_2.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_3.chunk.1_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/all_samples.tsv", + "08_GSTAMA_FILELIST/sample1.tsv", + "08_GSTAMA_FILELIST/sample2.tsv", + "08_GSTAMA_FILELIST/sample3.tsv", + "08_GSTAMA_FILELIST/sample4.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/all_samples.bed", + "09_GSTAMA_MERGE/all_samples_gene_report.txt", + "09_GSTAMA_MERGE/all_samples_merge.txt", + "09_GSTAMA_MERGE/all_samples_trans_report.txt", + "09_GSTAMA_MERGE/sample1.bed", + "09_GSTAMA_MERGE/sample1_gene_report.txt", + "09_GSTAMA_MERGE/sample1_merge.txt", + "09_GSTAMA_MERGE/sample1_trans_report.txt", + "09_GSTAMA_MERGE/sample2.bed", + "09_GSTAMA_MERGE/sample2_gene_report.txt", + "09_GSTAMA_MERGE/sample2_merge.txt", + "09_GSTAMA_MERGE/sample2_trans_report.txt", + "09_GSTAMA_MERGE/sample3.bed", + "09_GSTAMA_MERGE/sample3_gene_report.txt", + "09_GSTAMA_MERGE/sample3_merge.txt", + "09_GSTAMA_MERGE/sample3_trans_report.txt", + "09_GSTAMA_MERGE/sample4.bed", + "09_GSTAMA_MERGE/sample4_gene_report.txt", + "09_GSTAMA_MERGE/sample4_merge.txt", + "09_GSTAMA_MERGE/sample4_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ccs-filter-graph.txt", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_ccs_report.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ccs-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct.png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample1_0.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_0.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_0.chunk2.bam.pbi:md5,bb903ad2f6a8802a84dbbd428c59ad14", + "sample1_0.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_0.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_0.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_0.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_0.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_0.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_0.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_0.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_0.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_0.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_0.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_0.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_0.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_0.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_0.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_0.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_0.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_0.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_0.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_0.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_0.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_0.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_0.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_0.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_0.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_0.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_0.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_0.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_0.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_0.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_0.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_0.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample2_1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,97895a364955b507a7ee695cccd85993", + "sample2_1_flnc.lima.clips:md5,fa03bc75bd78b2648a139fd67c69208f", + "sample2_1_flnc.lima.counts:md5,842c6a23ca2de504ced4538ad5111da1", + "sample2_1_flnc.lima.guess:md5,d3675af3ca8a908ee9e3c231668392d3", + "sample2_1_flnc.lima.report:md5,dc073985322ae0a003ccc7e0fa4db5e6", + "sample2_1_flnc.lima.summary:md5,bcbcaaaca418bdeb91141c81715ca420", + "sample1_0.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_0.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_0.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_0.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_0.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_0.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_0.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_0.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_0.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_0.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample2_1.bam.pbi:md5,5519b222440f9443228760a3ad91962f", + "sample2_1.report.csv:md5,d42a139e5d9b08396bdb087c01243ea9", + "sample3_2.bam.pbi:md5,f20c3a1c38a0642ef96a98c0645e47ff", + "sample3_2.report.csv:md5,8d350f8dba8c928ec8b693f47dc1c096", + "sample1_0.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_0.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_0.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_0.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_0.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample2_1.fasta:md5,c5c29b8da57e24222fded8814ea43fca", + "sample3_2.fasta:md5,81b607067bac48a5b53281e982acd623", + "sample1_0.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_0.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_0.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_0.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_0.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_0.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_0.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_0.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_0.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_0.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample2_1.chunk.1_tama.fa.gz:md5,eba6fd6a37715feb1f55acd2aba308fe", + "sample2_1.chunk.1_tama_polya_flnc_report.txt.gz:md5,8f4ccfb4bea6210fcd2677141043eaaf", + "sample2_1.chunk.1_tama_tails.fa.gz:md5,db050c0f7f02653fab9d3cb098874995", + "sample2_1.chunk.2_tama.fa.gz:md5,dba8219a7fd40d39e145358928e79718", + "sample2_1.chunk.2_tama_polya_flnc_report.txt.gz:md5,31719db0fd430cb6854da57d6882eb80", + "sample2_1.chunk.2_tama_tails.fa.gz:md5,5e667c1aa16049e36b9b9b185b672f90", + "sample2_1.chunk.3_tama.fa.gz:md5,2284da2407fb3d0c96280a5963c0f21d", + "sample2_1.chunk.3_tama_polya_flnc_report.txt.gz:md5,8d95867bcb53e018305c18ed5cc14c00", + "sample2_1.chunk.3_tama_tails.fa.gz:md5,63f2d71634e092e478909018f4c08fa9", + "sample2_1.chunk.4_tama.fa.gz:md5,c63152a17a861184fb1f2611dcbcce12", + "sample2_1.chunk.4_tama_polya_flnc_report.txt.gz:md5,7350ae2922384469f6c015a6e4898685", + "sample2_1.chunk.4_tama_tails.fa.gz:md5,7703b0eff06e6c63cbf7fc212f3089ce", + "sample2_1.chunk.5_tama.fa.gz:md5,89ea3e7f09fd3db800adc8e13ceff26b", + "sample2_1.chunk.5_tama_polya_flnc_report.txt.gz:md5,d3c83d0d228f4f3850e2af8cdecc763a", + "sample2_1.chunk.5_tama_tails.fa.gz:md5,0d92991493cf2ce045cd2a44ebca2f6a", + "sample2_1.chunk.6_tama.fa.gz:md5,34a80800ddc45859c430cf4156158413", + "sample2_1.chunk.6_tama_polya_flnc_report.txt.gz:md5,460c9b71e2bb758dad83331aca18d2fd", + "sample2_1.chunk.6_tama_tails.fa.gz:md5,a11e5f0f7370a708b31469a42b95b6c1", + "sample3_2.chunk.1_tama.fa.gz:md5,6ed270ddf8e79b541a51407a32889c9b", + "sample3_2.chunk.1_tama_polya_flnc_report.txt.gz:md5,db83ccbbc1326abd9638bc2adfaa8677", + "sample3_2.chunk.1_tama_tails.fa.gz:md5,3d91c6a6222dbab8823b6a506dc3555d", + "sample1_0.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_0.chunk1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample1_0.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_0.chunk1_read.txt:md5,bd4b21ad8ac7b2bec993b7b72501c2ab", + "sample1_0.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_0.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_0.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_0.chunk2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample1_0.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_0.chunk2_read.txt:md5,4ae8757dedd0f8cfb7c922dd7589a4f2", + "sample1_0.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_0.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_0.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_0.chunk3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample1_0.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_0.chunk3_read.txt:md5,3a2c866905dfcdb140e86340a95d90d2", + "sample1_0.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_0.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_0.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_0.chunk4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample1_0.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_0.chunk4_read.txt:md5,e8eb42852f61205870f89e015a2f987e", + "sample1_0.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_0.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_0.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample1_0.chunk5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample1_0.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_0.chunk5_read.txt:md5,6fc5c8520a8bb47cc549376f5e32ce3b", + "sample1_0.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample1_0.chunk5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample1_0.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.1_collapsed.bed:md5,2a5b07fa24ddcb51259063a76c52acee", + "sample2_1.chunk.1_local_density_error.txt:md5,b6fa52ea6fa7f3a7add75dec930cc6b3", + "sample2_1.chunk.1_polya.txt:md5,48e49820ebf548cf1547fd7dfd93b753", + "sample2_1.chunk.1_read.txt:md5,3a4d70008407cb42bac94ec94ffaecac", + "sample2_1.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.1_trans_read.bed:md5,ae71e848615d3f0ae550e6bc4639f44e", + "sample2_1.chunk.1_trans_report.txt:md5,3d21f4fda06970fa6ef67acd6f7ed9d5", + "sample2_1.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.2_collapsed.bed:md5,0f05bb1b7b5e40614382eb1817dd557e", + "sample2_1.chunk.2_local_density_error.txt:md5,4a46e426dcd85ca8c743ea3422f65188", + "sample2_1.chunk.2_polya.txt:md5,d21f8811d58b55d0d94d9d3f93c7fceb", + "sample2_1.chunk.2_read.txt:md5,3600aefaca5b22494e085a686d1b46cc", + "sample2_1.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.2_trans_read.bed:md5,628e3e88297ce40fca491345304dfba6", + "sample2_1.chunk.2_trans_report.txt:md5,983a121808b374b2f05166de960b0419", + "sample2_1.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.3_collapsed.bed:md5,4c80428bc3bd3a052209df58eb57eaf8", + "sample2_1.chunk.3_local_density_error.txt:md5,8c5967a572846420b98932b7fd98310c", + "sample2_1.chunk.3_polya.txt:md5,ee69a686a6dfad12f29e235afd72b377", + "sample2_1.chunk.3_read.txt:md5,7ac6ae4752631ee92442d3d4a86846a8", + "sample2_1.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.3_trans_read.bed:md5,2de626e8c3e8fa21b938e888229d6160", + "sample2_1.chunk.3_trans_report.txt:md5,52bcdea21e4f8bef847e2c21693c40ea", + "sample2_1.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.4_collapsed.bed:md5,116215ae754f236bca4c4115d6e7b124", + "sample2_1.chunk.4_local_density_error.txt:md5,65af1e6f5a1d39ad6b24bd1a63a6278a", + "sample2_1.chunk.4_polya.txt:md5,c9919cd20d7bbf4f593cd2844bd28550", + "sample2_1.chunk.4_read.txt:md5,4760b76910a567cf62a83f4b21d085aa", + "sample2_1.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.4_trans_read.bed:md5,6d4851ed8eb0b2df1d656dbb5a2ad3c6", + "sample2_1.chunk.4_trans_report.txt:md5,1029b53f7d59c97d87df970fb3e0501e", + "sample2_1.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.5_collapsed.bed:md5,35d2a8acdcd0a40330624f5bcf033206", + "sample2_1.chunk.5_local_density_error.txt:md5,e87053b8c7f58a350225a6d43be17d72", + "sample2_1.chunk.5_polya.txt:md5,8b4cc38336bfe6ff6d8eca74166d24a9", + "sample2_1.chunk.5_read.txt:md5,f441d3c36963cc277178b4e1af275d1b", + "sample2_1.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.5_trans_read.bed:md5,8175932eec00949b37030106d9e84621", + "sample2_1.chunk.5_trans_report.txt:md5,178e21fb7ea02d1b84682dc2e934c330", + "sample2_1.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_1.chunk.6_collapsed.bed:md5,93c66ee57dbf302a6b2d99600cc730c4", + "sample2_1.chunk.6_local_density_error.txt:md5,0b62cde5a47f0a4dc2c0e4c26235b241", + "sample2_1.chunk.6_polya.txt:md5,2cb46eac9b00a08095b1bd4e0244559d", + "sample2_1.chunk.6_read.txt:md5,9ea2721f96d5efe63bc35850bbf12520", + "sample2_1.chunk.6_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_1.chunk.6_trans_read.bed:md5,2080114fac4005105ed4b8f291afd4b9", + "sample2_1.chunk.6_trans_report.txt:md5,15ad4aa7c425624464a179cf4d434e2e", + "sample2_1.chunk.6_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_1.chunk.6_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3_2.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_2.chunk.1_local_density_error.txt:md5,25e666a9e8b3af9271532659a0b28013", + "sample3_2.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_2.chunk.1_read.txt:md5,f5bedd14060f896f268d1aff22da3c5b", + "sample3_2.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_2.chunk.1_trans_read.bed:md5,86f4b69ae68a2ac46a38b9d82946f63e", + "sample3_2.chunk.1_trans_report.txt:md5,41739b80f8a4b828e8d91883c514166d", + "sample3_2.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_2.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_3.chunk.1_collapsed.bed:md5,66cf1481b1e69fa4cf3b13f07efd8c40", + "sample4_3.chunk.1_local_density_error.txt:md5,2e2b91bbdd3225ebcd3402edf86a2cc6", + "sample4_3.chunk.1_polya.txt:md5,6fd5552e7b2152e3b46cdee04b140104", + "sample4_3.chunk.1_read.txt:md5,b0dc554a9b99c5f5b6fd3203f276c797", + "sample4_3.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_3.chunk.1_trans_read.bed:md5,347f03649d304377cb37dec40830d35c", + "sample4_3.chunk.1_trans_report.txt:md5,e2b7c12377d7a4424b253898f0f0bd7a", + "sample4_3.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_3.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "all_samples.tsv:md5,c9dc869f5db1c0d02d8105182118a215", + "sample1.tsv:md5,54b9ee29a34d402185285211b673b9c4", + "sample2.tsv:md5,b3caf3345018ed9163f7bf6930c7d15f", + "sample3.tsv:md5,0e6a11c7bf550d9d572f20d3d8dc243a", + "sample4.tsv:md5,91221b5d691643dec83d949483327929", + "all_samples.bed:md5,f21b344431b2eb07ef36f1486c4fac2a", + "all_samples_gene_report.txt:md5,183fa061c4ce949280258798015cce68", + "all_samples_merge.txt:md5,ffd38c600edfa646eee2e110a0ec45a0", + "all_samples_trans_report.txt:md5,c1804fb1e0a38daf04ace73366c84982", + "sample1.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample1_gene_report.txt:md5,c698958ea806a156847961b0c719a66c", + "sample1_merge.txt:md5,07cdfbf4070903d66ffe459f9ce94715", + "sample1_trans_report.txt:md5,e40712d885417415a654adaed0c34c08", + "sample2.bed:md5,f587c4c86b185278b89f6495effde755", + "sample2_gene_report.txt:md5,66464ca0939f47523526aa60196255a5", + "sample2_merge.txt:md5,0cf12e5b93e8e0b112e947062ede095a", + "sample2_trans_report.txt:md5,999ef6a6bd746e7c3fee9253cd141c1b", + "sample3.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_gene_report.txt:md5,7e80acc9ecdfe2993a106025de81cb3f", + "sample3_merge.txt:md5,b97dae2c4f776976e9882c44c26f7eb4", + "sample3_trans_report.txt:md5,47347e08658badbba716b32eea38fa87", + "sample4.bed:md5,66cf1481b1e69fa4cf3b13f07efd8c40", + "sample4_gene_report.txt:md5,770f948f7311400501c66340df9653de", + "sample4_merge.txt:md5,95d1078bb33d7bdb54a3f012a70104be", + "sample4_trans_report.txt:md5,36b5850e8b8c9b187c2bbee88007533c", + "ccs-filter-graph.txt:md5,9f35c8022cdae8ef48f9047e67111bd1", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_general_stats.txt:md5,f60e94deef7b1d8f6f4c5e67b325e6ba", + "multiqc_lima_counts.txt:md5,d00757e4773f621db4f5459ca7a21088", + "multiqc_lima_summary.txt:md5,ab0445a6efcf301bc96362c62743c273" + ] + ], + "timestamp": "2026-08-14T15:04:51.339227064", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_ccs_map.nf.test b/tests/inputs_ccs_map.nf.test new file mode 100644 index 0000000..2326935 --- /dev/null +++ b/tests/inputs_ccs_map.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs ccs map" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_ccs_map" + + test("-profile test_inputs_ccs_map") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_ccs_map.nf.test.snap b/tests/inputs_ccs_map.nf.test.snap new file mode 100644 index 0000000..d6fcdf4 --- /dev/null +++ b/tests/inputs_ccs_map.nf.test.snap @@ -0,0 +1,508 @@ +{ + "-profile test_inputs_ccs_map": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + }, + "PBCCS": { + "pbccs": "6.4.0" + } + }, + [ + "01_PBCCS", + "01_PBCCS/sample1_0.chunk1.bam", + "01_PBCCS/sample1_0.chunk1.bam.pbi", + "01_PBCCS/sample1_0.chunk1.metrics.json.gz", + "01_PBCCS/sample1_0.chunk1.report.json", + "01_PBCCS/sample1_0.chunk1.report.txt", + "01_PBCCS/sample1_0.chunk2.bam", + "01_PBCCS/sample1_0.chunk2.bam.pbi", + "01_PBCCS/sample1_0.chunk2.metrics.json.gz", + "01_PBCCS/sample1_0.chunk2.report.json", + "01_PBCCS/sample1_0.chunk2.report.txt", + "01_PBCCS/sample1_0.chunk3.bam", + "01_PBCCS/sample1_0.chunk3.bam.pbi", + "01_PBCCS/sample1_0.chunk3.metrics.json.gz", + "01_PBCCS/sample1_0.chunk3.report.json", + "01_PBCCS/sample1_0.chunk3.report.txt", + "01_PBCCS/sample1_0.chunk4.bam", + "01_PBCCS/sample1_0.chunk4.bam.pbi", + "01_PBCCS/sample1_0.chunk4.metrics.json.gz", + "01_PBCCS/sample1_0.chunk4.report.json", + "01_PBCCS/sample1_0.chunk4.report.txt", + "01_PBCCS/sample1_0.chunk5.bam", + "01_PBCCS/sample1_0.chunk5.bam.pbi", + "01_PBCCS/sample1_0.chunk5.metrics.json.gz", + "01_PBCCS/sample1_0.chunk5.report.json", + "01_PBCCS/sample1_0.chunk5.report.txt", + "02_LIMA", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.json", + "02_LIMA/sample1_0.chunk1_flnc.lima.clips", + "02_LIMA/sample1_0.chunk1_flnc.lima.counts", + "02_LIMA/sample1_0.chunk1_flnc.lima.guess", + "02_LIMA/sample1_0.chunk1_flnc.lima.report", + "02_LIMA/sample1_0.chunk1_flnc.lima.summary", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.json", + "02_LIMA/sample1_0.chunk2_flnc.lima.clips", + "02_LIMA/sample1_0.chunk2_flnc.lima.counts", + "02_LIMA/sample1_0.chunk2_flnc.lima.guess", + "02_LIMA/sample1_0.chunk2_flnc.lima.report", + "02_LIMA/sample1_0.chunk2_flnc.lima.summary", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.json", + "02_LIMA/sample1_0.chunk3_flnc.lima.clips", + "02_LIMA/sample1_0.chunk3_flnc.lima.counts", + "02_LIMA/sample1_0.chunk3_flnc.lima.guess", + "02_LIMA/sample1_0.chunk3_flnc.lima.report", + "02_LIMA/sample1_0.chunk3_flnc.lima.summary", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.json", + "02_LIMA/sample1_0.chunk4_flnc.lima.clips", + "02_LIMA/sample1_0.chunk4_flnc.lima.counts", + "02_LIMA/sample1_0.chunk4_flnc.lima.guess", + "02_LIMA/sample1_0.chunk4_flnc.lima.report", + "02_LIMA/sample1_0.chunk4_flnc.lima.summary", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.json", + "02_LIMA/sample1_0.chunk5_flnc.lima.clips", + "02_LIMA/sample1_0.chunk5_flnc.lima.counts", + "02_LIMA/sample1_0.chunk5_flnc.lima.guess", + "02_LIMA/sample1_0.chunk5_flnc.lima.report", + "02_LIMA/sample1_0.chunk5_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk5.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample1_0.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk5.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample1_0.chunk1.bam", + "06_MINIMAP2/sample1_0.chunk1.bam.bai", + "06_MINIMAP2/sample1_0.chunk2.bam", + "06_MINIMAP2/sample1_0.chunk2.bam.bai", + "06_MINIMAP2/sample1_0.chunk3.bam", + "06_MINIMAP2/sample1_0.chunk3.bam.bai", + "06_MINIMAP2/sample1_0.chunk4.bam", + "06_MINIMAP2/sample1_0.chunk4.bam.bai", + "06_MINIMAP2/sample1_0.chunk5.bam", + "06_MINIMAP2/sample1_0.chunk5.bam.bai", + "06_MINIMAP2/sample4_1.chunk.1.bam", + "06_MINIMAP2/sample4_1.chunk.1.bam.bai", + "06_MINIMAP2/sample4_1.chunk.2.bam", + "06_MINIMAP2/sample4_1.chunk.2.bam.bai", + "06_MINIMAP2/sample4_1.chunk.3.bam", + "06_MINIMAP2/sample4_1.chunk.3.bam.bai", + "06_MINIMAP2/sample4_1.chunk.4.bam", + "06_MINIMAP2/sample4_1.chunk.4.bam.bai", + "06_MINIMAP2/sample4_1.chunk.5.bam", + "06_MINIMAP2/sample4_1.chunk.5.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample1.tsv", + "08_GSTAMA_FILELIST/sample4.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample1.bed", + "09_GSTAMA_MERGE/sample1_gene_report.txt", + "09_GSTAMA_MERGE/sample1_merge.txt", + "09_GSTAMA_MERGE/sample1_trans_report.txt", + "09_GSTAMA_MERGE/sample4.bed", + "09_GSTAMA_MERGE/sample4_gene_report.txt", + "09_GSTAMA_MERGE/sample4_merge.txt", + "09_GSTAMA_MERGE/sample4_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ccs-filter-graph.txt", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_ccs_report.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ccs-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct.png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample1_0.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_0.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_0.chunk2.bam.pbi:md5,bb903ad2f6a8802a84dbbd428c59ad14", + "sample1_0.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_0.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_0.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_0.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_0.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_0.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_0.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_0.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_0.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_0.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_0.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_0.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_0.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_0.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_0.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_0.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_0.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_0.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_0.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_0.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_0.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_0.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_0.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_0.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_0.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_0.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_0.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_0.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_0.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_0.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_0.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_0.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample1_0.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_0.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_0.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_0.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_0.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_0.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_0.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_0.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_0.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_0.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample1_0.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_0.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_0.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_0.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_0.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample1_0.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_0.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_0.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_0.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_0.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_0.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_0.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_0.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_0.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_0.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample1_0.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_0.chunk1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample1_0.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_0.chunk1_read.txt:md5,bd4b21ad8ac7b2bec993b7b72501c2ab", + "sample1_0.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_0.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_0.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_0.chunk2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample1_0.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_0.chunk2_read.txt:md5,4ae8757dedd0f8cfb7c922dd7589a4f2", + "sample1_0.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_0.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_0.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_0.chunk3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample1_0.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_0.chunk3_read.txt:md5,3a2c866905dfcdb140e86340a95d90d2", + "sample1_0.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_0.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_0.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_0.chunk4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample1_0.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_0.chunk4_read.txt:md5,e8eb42852f61205870f89e015a2f987e", + "sample1_0.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_0.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_0.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample1_0.chunk5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample1_0.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_0.chunk5_read.txt:md5,6fc5c8520a8bb47cc549376f5e32ce3b", + "sample1_0.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample1_0.chunk5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample1_0.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample4_1.chunk.1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample4_1.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample4_1.chunk.1_read.txt:md5,6ab436fef1e37907f89b19e07bfe3f1d", + "sample4_1.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample4_1.chunk.1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample4_1.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample4_1.chunk.2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample4_1.chunk.2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample4_1.chunk.2_read.txt:md5,b643a3a994835b5c99e9bfe630aff856", + "sample4_1.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample4_1.chunk.2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample4_1.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample4_1.chunk.3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample4_1.chunk.3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample4_1.chunk.3_read.txt:md5,d777caedc81cef340943c9e31cff3260", + "sample4_1.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample4_1.chunk.3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample4_1.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample4_1.chunk.4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample4_1.chunk.4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample4_1.chunk.4_read.txt:md5,c827cfe75cf841613fe213d6d04a393f", + "sample4_1.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample4_1.chunk.4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample4_1.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample4_1.chunk.5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample4_1.chunk.5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample4_1.chunk.5_read.txt:md5,ba943648c22434ac8ab663bb5ce2408e", + "sample4_1.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample4_1.chunk.5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample4_1.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1.tsv:md5,54b9ee29a34d402185285211b673b9c4", + "sample4.tsv:md5,a39cb9f60a457b556d93fe0c93d4323d", + "sample1.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample1_gene_report.txt:md5,c698958ea806a156847961b0c719a66c", + "sample1_merge.txt:md5,07cdfbf4070903d66ffe459f9ce94715", + "sample1_trans_report.txt:md5,e40712d885417415a654adaed0c34c08", + "sample4.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample4_gene_report.txt:md5,d8987c8661b20036f172062a0c1f598c", + "sample4_merge.txt:md5,be50affd437d4421c14e7b08c4b93a43", + "sample4_trans_report.txt:md5,c9318ad84afb393ce6fc27f258204c5f", + "ccs-filter-graph.txt:md5,9f35c8022cdae8ef48f9047e67111bd1", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_general_stats.txt:md5,f60e94deef7b1d8f6f4c5e67b325e6ba", + "multiqc_lima_counts.txt:md5,a2e8e8ca0c68cb43d2887b196d251ca4", + "multiqc_lima_summary.txt:md5,11e5253acb7b8d344a4747f5796cf995" + ] + ], + "timestamp": "2026-08-14T15:07:20.788039424", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_lima.nf.test b/tests/inputs_lima.nf.test new file mode 100644 index 0000000..40c0431 --- /dev/null +++ b/tests/inputs_lima.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs lima" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_lima" + + test("-profile test_inputs_lima") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_lima.nf.test.snap b/tests/inputs_lima.nf.test.snap new file mode 100644 index 0000000..6e3cfab --- /dev/null +++ b/tests/inputs_lima.nf.test.snap @@ -0,0 +1,268 @@ +{ + "-profile test_inputs_lima": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + } + }, + [ + "02_LIMA", + "02_LIMA/sample2_0_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample2_0_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample2_0_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample2_0_flnc.consensusreadset.xml", + "02_LIMA/sample2_0_flnc.json", + "02_LIMA/sample2_0_flnc.lima.clips", + "02_LIMA/sample2_0_flnc.lima.counts", + "02_LIMA/sample2_0_flnc.lima.guess", + "02_LIMA/sample2_0_flnc.lima.report", + "02_LIMA/sample2_0_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample2_0.bam", + "03_ISOSEQ_REFINE/sample2_0.bam.pbi", + "03_ISOSEQ_REFINE/sample2_0.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample2_0.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample2_0.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample2_0.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.6_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.6_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.6_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample2_0.chunk.1.bam", + "06_MINIMAP2/sample2_0.chunk.1.bam.bai", + "06_MINIMAP2/sample2_0.chunk.2.bam", + "06_MINIMAP2/sample2_0.chunk.2.bam.bai", + "06_MINIMAP2/sample2_0.chunk.3.bam", + "06_MINIMAP2/sample2_0.chunk.3.bam.bai", + "06_MINIMAP2/sample2_0.chunk.4.bam", + "06_MINIMAP2/sample2_0.chunk.4.bam.bai", + "06_MINIMAP2/sample2_0.chunk.5.bam", + "06_MINIMAP2/sample2_0.chunk.5.bam.bai", + "06_MINIMAP2/sample2_0.chunk.6.bam", + "06_MINIMAP2/sample2_0.chunk.6.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample2.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample2.bed", + "09_GSTAMA_MERGE/sample2_gene_report.txt", + "09_GSTAMA_MERGE/sample2_merge.txt", + "09_GSTAMA_MERGE/sample2_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample2_0_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,97895a364955b507a7ee695cccd85993", + "sample2_0_flnc.lima.clips:md5,fa03bc75bd78b2648a139fd67c69208f", + "sample2_0_flnc.lima.counts:md5,842c6a23ca2de504ced4538ad5111da1", + "sample2_0_flnc.lima.guess:md5,d3675af3ca8a908ee9e3c231668392d3", + "sample2_0_flnc.lima.report:md5,dc073985322ae0a003ccc7e0fa4db5e6", + "sample2_0_flnc.lima.summary:md5,bcbcaaaca418bdeb91141c81715ca420", + "sample2_0.bam.pbi:md5,5519b222440f9443228760a3ad91962f", + "sample2_0.report.csv:md5,d42a139e5d9b08396bdb087c01243ea9", + "sample2_0.fasta:md5,c5c29b8da57e24222fded8814ea43fca", + "sample2_0.chunk.1_tama.fa.gz:md5,eba6fd6a37715feb1f55acd2aba308fe", + "sample2_0.chunk.1_tama_polya_flnc_report.txt.gz:md5,8f4ccfb4bea6210fcd2677141043eaaf", + "sample2_0.chunk.1_tama_tails.fa.gz:md5,db050c0f7f02653fab9d3cb098874995", + "sample2_0.chunk.2_tama.fa.gz:md5,dba8219a7fd40d39e145358928e79718", + "sample2_0.chunk.2_tama_polya_flnc_report.txt.gz:md5,31719db0fd430cb6854da57d6882eb80", + "sample2_0.chunk.2_tama_tails.fa.gz:md5,5e667c1aa16049e36b9b9b185b672f90", + "sample2_0.chunk.3_tama.fa.gz:md5,2284da2407fb3d0c96280a5963c0f21d", + "sample2_0.chunk.3_tama_polya_flnc_report.txt.gz:md5,8d95867bcb53e018305c18ed5cc14c00", + "sample2_0.chunk.3_tama_tails.fa.gz:md5,63f2d71634e092e478909018f4c08fa9", + "sample2_0.chunk.4_tama.fa.gz:md5,c63152a17a861184fb1f2611dcbcce12", + "sample2_0.chunk.4_tama_polya_flnc_report.txt.gz:md5,7350ae2922384469f6c015a6e4898685", + "sample2_0.chunk.4_tama_tails.fa.gz:md5,7703b0eff06e6c63cbf7fc212f3089ce", + "sample2_0.chunk.5_tama.fa.gz:md5,89ea3e7f09fd3db800adc8e13ceff26b", + "sample2_0.chunk.5_tama_polya_flnc_report.txt.gz:md5,d3c83d0d228f4f3850e2af8cdecc763a", + "sample2_0.chunk.5_tama_tails.fa.gz:md5,0d92991493cf2ce045cd2a44ebca2f6a", + "sample2_0.chunk.6_tama.fa.gz:md5,34a80800ddc45859c430cf4156158413", + "sample2_0.chunk.6_tama_polya_flnc_report.txt.gz:md5,460c9b71e2bb758dad83331aca18d2fd", + "sample2_0.chunk.6_tama_tails.fa.gz:md5,a11e5f0f7370a708b31469a42b95b6c1", + "sample2_0.chunk.1_collapsed.bed:md5,2a5b07fa24ddcb51259063a76c52acee", + "sample2_0.chunk.1_local_density_error.txt:md5,b6fa52ea6fa7f3a7add75dec930cc6b3", + "sample2_0.chunk.1_polya.txt:md5,48e49820ebf548cf1547fd7dfd93b753", + "sample2_0.chunk.1_read.txt:md5,3a4d70008407cb42bac94ec94ffaecac", + "sample2_0.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.1_trans_read.bed:md5,ae71e848615d3f0ae550e6bc4639f44e", + "sample2_0.chunk.1_trans_report.txt:md5,3d21f4fda06970fa6ef67acd6f7ed9d5", + "sample2_0.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.2_collapsed.bed:md5,0f05bb1b7b5e40614382eb1817dd557e", + "sample2_0.chunk.2_local_density_error.txt:md5,4a46e426dcd85ca8c743ea3422f65188", + "sample2_0.chunk.2_polya.txt:md5,d21f8811d58b55d0d94d9d3f93c7fceb", + "sample2_0.chunk.2_read.txt:md5,3600aefaca5b22494e085a686d1b46cc", + "sample2_0.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.2_trans_read.bed:md5,628e3e88297ce40fca491345304dfba6", + "sample2_0.chunk.2_trans_report.txt:md5,983a121808b374b2f05166de960b0419", + "sample2_0.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.3_collapsed.bed:md5,4c80428bc3bd3a052209df58eb57eaf8", + "sample2_0.chunk.3_local_density_error.txt:md5,8c5967a572846420b98932b7fd98310c", + "sample2_0.chunk.3_polya.txt:md5,ee69a686a6dfad12f29e235afd72b377", + "sample2_0.chunk.3_read.txt:md5,7ac6ae4752631ee92442d3d4a86846a8", + "sample2_0.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.3_trans_read.bed:md5,2de626e8c3e8fa21b938e888229d6160", + "sample2_0.chunk.3_trans_report.txt:md5,52bcdea21e4f8bef847e2c21693c40ea", + "sample2_0.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.4_collapsed.bed:md5,116215ae754f236bca4c4115d6e7b124", + "sample2_0.chunk.4_local_density_error.txt:md5,65af1e6f5a1d39ad6b24bd1a63a6278a", + "sample2_0.chunk.4_polya.txt:md5,c9919cd20d7bbf4f593cd2844bd28550", + "sample2_0.chunk.4_read.txt:md5,4760b76910a567cf62a83f4b21d085aa", + "sample2_0.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.4_trans_read.bed:md5,6d4851ed8eb0b2df1d656dbb5a2ad3c6", + "sample2_0.chunk.4_trans_report.txt:md5,1029b53f7d59c97d87df970fb3e0501e", + "sample2_0.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.5_collapsed.bed:md5,35d2a8acdcd0a40330624f5bcf033206", + "sample2_0.chunk.5_local_density_error.txt:md5,e87053b8c7f58a350225a6d43be17d72", + "sample2_0.chunk.5_polya.txt:md5,8b4cc38336bfe6ff6d8eca74166d24a9", + "sample2_0.chunk.5_read.txt:md5,f441d3c36963cc277178b4e1af275d1b", + "sample2_0.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.5_trans_read.bed:md5,8175932eec00949b37030106d9e84621", + "sample2_0.chunk.5_trans_report.txt:md5,178e21fb7ea02d1b84682dc2e934c330", + "sample2_0.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.6_collapsed.bed:md5,93c66ee57dbf302a6b2d99600cc730c4", + "sample2_0.chunk.6_local_density_error.txt:md5,0b62cde5a47f0a4dc2c0e4c26235b241", + "sample2_0.chunk.6_polya.txt:md5,2cb46eac9b00a08095b1bd4e0244559d", + "sample2_0.chunk.6_read.txt:md5,9ea2721f96d5efe63bc35850bbf12520", + "sample2_0.chunk.6_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.6_trans_read.bed:md5,2080114fac4005105ed4b8f291afd4b9", + "sample2_0.chunk.6_trans_report.txt:md5,15ad4aa7c425624464a179cf4d434e2e", + "sample2_0.chunk.6_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.6_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2.tsv:md5,5ee80b0a439ee6023faff9a0d555cfd8", + "sample2.bed:md5,f587c4c86b185278b89f6495effde755", + "sample2_gene_report.txt:md5,17339982516a152b251fbe50d3bf9569", + "sample2_merge.txt:md5,82ed3779f378f72e292426fea41f7d65", + "sample2_trans_report.txt:md5,e8b352938adad13964a8dbbb4f0d0cea", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_lima_counts.txt:md5,d00757e4773f621db4f5459ca7a21088", + "multiqc_lima_summary.txt:md5,26fd02b7a09876ee334251e5afabc5b1" + ] + ], + "timestamp": "2026-08-14T15:09:26.452960648", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_lima_refine_map.nf.test b/tests/inputs_lima_refine_map.nf.test new file mode 100644 index 0000000..d5aaf0e --- /dev/null +++ b/tests/inputs_lima_refine_map.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs lima refine map" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_lima_refine_map" + + test("-profile test_inputs_lima_refine_map") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_lima_refine_map.nf.test.snap b/tests/inputs_lima_refine_map.nf.test.snap new file mode 100644 index 0000000..a85918e --- /dev/null +++ b/tests/inputs_lima_refine_map.nf.test.snap @@ -0,0 +1,343 @@ +{ + "-profile test_inputs_lima_refine_map": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + } + }, + [ + "02_LIMA", + "02_LIMA/sample2_0_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample2_0_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample2_0_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample2_0_flnc.consensusreadset.xml", + "02_LIMA/sample2_0_flnc.json", + "02_LIMA/sample2_0_flnc.lima.clips", + "02_LIMA/sample2_0_flnc.lima.counts", + "02_LIMA/sample2_0_flnc.lima.guess", + "02_LIMA/sample2_0_flnc.lima.report", + "02_LIMA/sample2_0_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample2_0.bam", + "03_ISOSEQ_REFINE/sample2_0.bam.pbi", + "03_ISOSEQ_REFINE/sample2_0.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample2_0.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample2_0.report.csv", + "03_ISOSEQ_REFINE/sample3_1.bam", + "03_ISOSEQ_REFINE/sample3_1.bam.pbi", + "03_ISOSEQ_REFINE/sample3_1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample3_1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample3_1.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample2_0.fasta", + "04_BAMTOOLS_CONVERT/sample3_1.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.6_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.6_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_0.chunk.6_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_1.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_1.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_1.chunk.1_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample2_0.chunk.1.bam", + "06_MINIMAP2/sample2_0.chunk.1.bam.bai", + "06_MINIMAP2/sample2_0.chunk.2.bam", + "06_MINIMAP2/sample2_0.chunk.2.bam.bai", + "06_MINIMAP2/sample2_0.chunk.3.bam", + "06_MINIMAP2/sample2_0.chunk.3.bam.bai", + "06_MINIMAP2/sample2_0.chunk.4.bam", + "06_MINIMAP2/sample2_0.chunk.4.bam.bai", + "06_MINIMAP2/sample2_0.chunk.5.bam", + "06_MINIMAP2/sample2_0.chunk.5.bam.bai", + "06_MINIMAP2/sample2_0.chunk.6.bam", + "06_MINIMAP2/sample2_0.chunk.6.bam.bai", + "06_MINIMAP2/sample3_1.chunk.1.bam", + "06_MINIMAP2/sample3_1.chunk.1.bam.bai", + "06_MINIMAP2/sample4_2.chunk.1.bam", + "06_MINIMAP2/sample4_2.chunk.1.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.5_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_read.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_0.chunk.6_variants.txt", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_1.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_2.chunk.1_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample2.tsv", + "08_GSTAMA_FILELIST/sample3.tsv", + "08_GSTAMA_FILELIST/sample4.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample2.bed", + "09_GSTAMA_MERGE/sample2_gene_report.txt", + "09_GSTAMA_MERGE/sample2_merge.txt", + "09_GSTAMA_MERGE/sample2_trans_report.txt", + "09_GSTAMA_MERGE/sample3.bed", + "09_GSTAMA_MERGE/sample3_gene_report.txt", + "09_GSTAMA_MERGE/sample3_merge.txt", + "09_GSTAMA_MERGE/sample3_trans_report.txt", + "09_GSTAMA_MERGE/sample4.bed", + "09_GSTAMA_MERGE/sample4_gene_report.txt", + "09_GSTAMA_MERGE/sample4_merge.txt", + "09_GSTAMA_MERGE/sample4_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample2_0_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,97895a364955b507a7ee695cccd85993", + "sample2_0_flnc.lima.clips:md5,fa03bc75bd78b2648a139fd67c69208f", + "sample2_0_flnc.lima.counts:md5,842c6a23ca2de504ced4538ad5111da1", + "sample2_0_flnc.lima.guess:md5,d3675af3ca8a908ee9e3c231668392d3", + "sample2_0_flnc.lima.report:md5,dc073985322ae0a003ccc7e0fa4db5e6", + "sample2_0_flnc.lima.summary:md5,bcbcaaaca418bdeb91141c81715ca420", + "sample2_0.bam.pbi:md5,5519b222440f9443228760a3ad91962f", + "sample2_0.report.csv:md5,d42a139e5d9b08396bdb087c01243ea9", + "sample3_1.bam.pbi:md5,afb9a61ed9f3aa3f589af5c48a2f9f45", + "sample3_1.report.csv:md5,8d350f8dba8c928ec8b693f47dc1c096", + "sample2_0.fasta:md5,c5c29b8da57e24222fded8814ea43fca", + "sample3_1.fasta:md5,81b607067bac48a5b53281e982acd623", + "sample2_0.chunk.1_tama.fa.gz:md5,eba6fd6a37715feb1f55acd2aba308fe", + "sample2_0.chunk.1_tama_polya_flnc_report.txt.gz:md5,8f4ccfb4bea6210fcd2677141043eaaf", + "sample2_0.chunk.1_tama_tails.fa.gz:md5,db050c0f7f02653fab9d3cb098874995", + "sample2_0.chunk.2_tama.fa.gz:md5,dba8219a7fd40d39e145358928e79718", + "sample2_0.chunk.2_tama_polya_flnc_report.txt.gz:md5,31719db0fd430cb6854da57d6882eb80", + "sample2_0.chunk.2_tama_tails.fa.gz:md5,5e667c1aa16049e36b9b9b185b672f90", + "sample2_0.chunk.3_tama.fa.gz:md5,2284da2407fb3d0c96280a5963c0f21d", + "sample2_0.chunk.3_tama_polya_flnc_report.txt.gz:md5,8d95867bcb53e018305c18ed5cc14c00", + "sample2_0.chunk.3_tama_tails.fa.gz:md5,63f2d71634e092e478909018f4c08fa9", + "sample2_0.chunk.4_tama.fa.gz:md5,c63152a17a861184fb1f2611dcbcce12", + "sample2_0.chunk.4_tama_polya_flnc_report.txt.gz:md5,7350ae2922384469f6c015a6e4898685", + "sample2_0.chunk.4_tama_tails.fa.gz:md5,7703b0eff06e6c63cbf7fc212f3089ce", + "sample2_0.chunk.5_tama.fa.gz:md5,89ea3e7f09fd3db800adc8e13ceff26b", + "sample2_0.chunk.5_tama_polya_flnc_report.txt.gz:md5,d3c83d0d228f4f3850e2af8cdecc763a", + "sample2_0.chunk.5_tama_tails.fa.gz:md5,0d92991493cf2ce045cd2a44ebca2f6a", + "sample2_0.chunk.6_tama.fa.gz:md5,34a80800ddc45859c430cf4156158413", + "sample2_0.chunk.6_tama_polya_flnc_report.txt.gz:md5,460c9b71e2bb758dad83331aca18d2fd", + "sample2_0.chunk.6_tama_tails.fa.gz:md5,a11e5f0f7370a708b31469a42b95b6c1", + "sample3_1.chunk.1_tama.fa.gz:md5,6ed270ddf8e79b541a51407a32889c9b", + "sample3_1.chunk.1_tama_polya_flnc_report.txt.gz:md5,db83ccbbc1326abd9638bc2adfaa8677", + "sample3_1.chunk.1_tama_tails.fa.gz:md5,3d91c6a6222dbab8823b6a506dc3555d", + "sample2_0.chunk.1_collapsed.bed:md5,2a5b07fa24ddcb51259063a76c52acee", + "sample2_0.chunk.1_local_density_error.txt:md5,b6fa52ea6fa7f3a7add75dec930cc6b3", + "sample2_0.chunk.1_polya.txt:md5,48e49820ebf548cf1547fd7dfd93b753", + "sample2_0.chunk.1_read.txt:md5,3a4d70008407cb42bac94ec94ffaecac", + "sample2_0.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.1_trans_read.bed:md5,ae71e848615d3f0ae550e6bc4639f44e", + "sample2_0.chunk.1_trans_report.txt:md5,3d21f4fda06970fa6ef67acd6f7ed9d5", + "sample2_0.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.2_collapsed.bed:md5,0f05bb1b7b5e40614382eb1817dd557e", + "sample2_0.chunk.2_local_density_error.txt:md5,4a46e426dcd85ca8c743ea3422f65188", + "sample2_0.chunk.2_polya.txt:md5,d21f8811d58b55d0d94d9d3f93c7fceb", + "sample2_0.chunk.2_read.txt:md5,3600aefaca5b22494e085a686d1b46cc", + "sample2_0.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.2_trans_read.bed:md5,628e3e88297ce40fca491345304dfba6", + "sample2_0.chunk.2_trans_report.txt:md5,983a121808b374b2f05166de960b0419", + "sample2_0.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.3_collapsed.bed:md5,4c80428bc3bd3a052209df58eb57eaf8", + "sample2_0.chunk.3_local_density_error.txt:md5,8c5967a572846420b98932b7fd98310c", + "sample2_0.chunk.3_polya.txt:md5,ee69a686a6dfad12f29e235afd72b377", + "sample2_0.chunk.3_read.txt:md5,7ac6ae4752631ee92442d3d4a86846a8", + "sample2_0.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.3_trans_read.bed:md5,2de626e8c3e8fa21b938e888229d6160", + "sample2_0.chunk.3_trans_report.txt:md5,52bcdea21e4f8bef847e2c21693c40ea", + "sample2_0.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.4_collapsed.bed:md5,116215ae754f236bca4c4115d6e7b124", + "sample2_0.chunk.4_local_density_error.txt:md5,65af1e6f5a1d39ad6b24bd1a63a6278a", + "sample2_0.chunk.4_polya.txt:md5,c9919cd20d7bbf4f593cd2844bd28550", + "sample2_0.chunk.4_read.txt:md5,4760b76910a567cf62a83f4b21d085aa", + "sample2_0.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.4_trans_read.bed:md5,6d4851ed8eb0b2df1d656dbb5a2ad3c6", + "sample2_0.chunk.4_trans_report.txt:md5,1029b53f7d59c97d87df970fb3e0501e", + "sample2_0.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.5_collapsed.bed:md5,35d2a8acdcd0a40330624f5bcf033206", + "sample2_0.chunk.5_local_density_error.txt:md5,e87053b8c7f58a350225a6d43be17d72", + "sample2_0.chunk.5_polya.txt:md5,8b4cc38336bfe6ff6d8eca74166d24a9", + "sample2_0.chunk.5_read.txt:md5,f441d3c36963cc277178b4e1af275d1b", + "sample2_0.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.5_trans_read.bed:md5,8175932eec00949b37030106d9e84621", + "sample2_0.chunk.5_trans_report.txt:md5,178e21fb7ea02d1b84682dc2e934c330", + "sample2_0.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_0.chunk.6_collapsed.bed:md5,93c66ee57dbf302a6b2d99600cc730c4", + "sample2_0.chunk.6_local_density_error.txt:md5,0b62cde5a47f0a4dc2c0e4c26235b241", + "sample2_0.chunk.6_polya.txt:md5,2cb46eac9b00a08095b1bd4e0244559d", + "sample2_0.chunk.6_read.txt:md5,9ea2721f96d5efe63bc35850bbf12520", + "sample2_0.chunk.6_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_0.chunk.6_trans_read.bed:md5,2080114fac4005105ed4b8f291afd4b9", + "sample2_0.chunk.6_trans_report.txt:md5,15ad4aa7c425624464a179cf4d434e2e", + "sample2_0.chunk.6_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_0.chunk.6_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3_1.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_1.chunk.1_local_density_error.txt:md5,25e666a9e8b3af9271532659a0b28013", + "sample3_1.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_1.chunk.1_read.txt:md5,f5bedd14060f896f268d1aff22da3c5b", + "sample3_1.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_1.chunk.1_trans_read.bed:md5,86f4b69ae68a2ac46a38b9d82946f63e", + "sample3_1.chunk.1_trans_report.txt:md5,41739b80f8a4b828e8d91883c514166d", + "sample3_1.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_1.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_2.chunk.1_collapsed.bed:md5,66cf1481b1e69fa4cf3b13f07efd8c40", + "sample4_2.chunk.1_local_density_error.txt:md5,2e2b91bbdd3225ebcd3402edf86a2cc6", + "sample4_2.chunk.1_polya.txt:md5,6fd5552e7b2152e3b46cdee04b140104", + "sample4_2.chunk.1_read.txt:md5,b0dc554a9b99c5f5b6fd3203f276c797", + "sample4_2.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_2.chunk.1_trans_read.bed:md5,347f03649d304377cb37dec40830d35c", + "sample4_2.chunk.1_trans_report.txt:md5,e2b7c12377d7a4424b253898f0f0bd7a", + "sample4_2.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_2.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2.tsv:md5,5ee80b0a439ee6023faff9a0d555cfd8", + "sample3.tsv:md5,d40c004ff91279dd1227faf5a1706c0f", + "sample4.tsv:md5,3e3ef986b8eaaef1c062c5e3af27bcff", + "sample2.bed:md5,f587c4c86b185278b89f6495effde755", + "sample2_gene_report.txt:md5,17339982516a152b251fbe50d3bf9569", + "sample2_merge.txt:md5,82ed3779f378f72e292426fea41f7d65", + "sample2_trans_report.txt:md5,e8b352938adad13964a8dbbb4f0d0cea", + "sample3.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_gene_report.txt:md5,275b49b66d41e337e420d73b40771851", + "sample3_merge.txt:md5,3988810f4afbeef5060e5f52555c8931", + "sample3_trans_report.txt:md5,d752c2a0cdcc8ca32ff5a54288bfc68c", + "sample4.bed:md5,66cf1481b1e69fa4cf3b13f07efd8c40", + "sample4_gene_report.txt:md5,88c1ef0edb49837b8c47806378a874a3", + "sample4_merge.txt:md5,48efa1d4c1bb408a8b26ba7c98cd2732", + "sample4_trans_report.txt:md5,02bc1176559b12d63fd186b3345e6007", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_lima_counts.txt:md5,d00757e4773f621db4f5459ca7a21088", + "multiqc_lima_summary.txt:md5,26fd02b7a09876ee334251e5afabc5b1" + ] + ], + "timestamp": "2026-08-14T15:11:45.900102927", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_map.nf.test b/tests/inputs_map.nf.test new file mode 100644 index 0000000..64eabf8 --- /dev/null +++ b/tests/inputs_map.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs map" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_map" + + test("-profile test_inputs_map") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_map.nf.test.snap b/tests/inputs_map.nf.test.snap new file mode 100644 index 0000000..f9a65c0 --- /dev/null +++ b/tests/inputs_map.nf.test.snap @@ -0,0 +1,153 @@ +{ + "-profile test_inputs_map": { + "content": [ + { + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + } + }, + [ + "06_MINIMAP2", + "06_MINIMAP2/sample4_0.chunk.1.bam", + "06_MINIMAP2/sample4_0.chunk.1.bam.bai", + "06_MINIMAP2/sample4_0.chunk.2.bam", + "06_MINIMAP2/sample4_0.chunk.2.bam.bai", + "06_MINIMAP2/sample4_0.chunk.3.bam", + "06_MINIMAP2/sample4_0.chunk.3.bam.bai", + "06_MINIMAP2/sample4_0.chunk.4.bam", + "06_MINIMAP2/sample4_0.chunk.4.bam.bai", + "06_MINIMAP2/sample4_0.chunk.5.bam", + "06_MINIMAP2/sample4_0.chunk.5.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_0.chunk.5_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample4.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample4.bed", + "09_GSTAMA_MERGE/sample4_gene_report.txt", + "09_GSTAMA_MERGE/sample4_merge.txt", + "09_GSTAMA_MERGE/sample4_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample4_0.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample4_0.chunk.1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample4_0.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample4_0.chunk.1_read.txt:md5,6ab436fef1e37907f89b19e07bfe3f1d", + "sample4_0.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_0.chunk.1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample4_0.chunk.1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample4_0.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_0.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_0.chunk.2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample4_0.chunk.2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample4_0.chunk.2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample4_0.chunk.2_read.txt:md5,b643a3a994835b5c99e9bfe630aff856", + "sample4_0.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_0.chunk.2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample4_0.chunk.2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample4_0.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_0.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_0.chunk.3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample4_0.chunk.3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample4_0.chunk.3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample4_0.chunk.3_read.txt:md5,d777caedc81cef340943c9e31cff3260", + "sample4_0.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_0.chunk.3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample4_0.chunk.3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample4_0.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_0.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_0.chunk.4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample4_0.chunk.4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample4_0.chunk.4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample4_0.chunk.4_read.txt:md5,c827cfe75cf841613fe213d6d04a393f", + "sample4_0.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_0.chunk.4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample4_0.chunk.4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample4_0.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_0.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_0.chunk.5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample4_0.chunk.5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample4_0.chunk.5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample4_0.chunk.5_read.txt:md5,ba943648c22434ac8ab663bb5ce2408e", + "sample4_0.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_0.chunk.5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample4_0.chunk.5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample4_0.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_0.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4.tsv:md5,38c9ea6c3c83932247b42fab1d07dbb3", + "sample4.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample4_gene_report.txt:md5,7e90720244d58d56e21c4c0285c576f3", + "sample4_merge.txt:md5,b91e9f22a1bd14324f3e378cdfb454c7", + "sample4_trans_report.txt:md5,27bc45fb5f585849fee71da6e951c99c", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" + ] + ], + "timestamp": "2026-08-14T15:12:33.973495948", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_multi_lib.nf.test b/tests/inputs_multi_lib.nf.test new file mode 100644 index 0000000..b30565e --- /dev/null +++ b/tests/inputs_multi_lib.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs multi_lib" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_multi_lib" + + test("-profile test_inputs_multi_lib") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_multi_lib.nf.test.snap b/tests/inputs_multi_lib.nf.test.snap new file mode 100644 index 0000000..0824702 --- /dev/null +++ b/tests/inputs_multi_lib.nf.test.snap @@ -0,0 +1,944 @@ +{ + "-profile test_inputs_multi_lib": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + }, + "PBCCS": { + "pbccs": "6.4.0" + } + }, + [ + "01_PBCCS", + "01_PBCCS/sample1_0.chunk1.bam", + "01_PBCCS/sample1_0.chunk1.bam.pbi", + "01_PBCCS/sample1_0.chunk1.metrics.json.gz", + "01_PBCCS/sample1_0.chunk1.report.json", + "01_PBCCS/sample1_0.chunk1.report.txt", + "01_PBCCS/sample1_0.chunk2.bam", + "01_PBCCS/sample1_0.chunk2.bam.pbi", + "01_PBCCS/sample1_0.chunk2.metrics.json.gz", + "01_PBCCS/sample1_0.chunk2.report.json", + "01_PBCCS/sample1_0.chunk2.report.txt", + "01_PBCCS/sample1_0.chunk3.bam", + "01_PBCCS/sample1_0.chunk3.bam.pbi", + "01_PBCCS/sample1_0.chunk3.metrics.json.gz", + "01_PBCCS/sample1_0.chunk3.report.json", + "01_PBCCS/sample1_0.chunk3.report.txt", + "01_PBCCS/sample1_0.chunk4.bam", + "01_PBCCS/sample1_0.chunk4.bam.pbi", + "01_PBCCS/sample1_0.chunk4.metrics.json.gz", + "01_PBCCS/sample1_0.chunk4.report.json", + "01_PBCCS/sample1_0.chunk4.report.txt", + "01_PBCCS/sample1_0.chunk5.bam", + "01_PBCCS/sample1_0.chunk5.bam.pbi", + "01_PBCCS/sample1_0.chunk5.metrics.json.gz", + "01_PBCCS/sample1_0.chunk5.report.json", + "01_PBCCS/sample1_0.chunk5.report.txt", + "01_PBCCS/sample1_1.chunk1.bam", + "01_PBCCS/sample1_1.chunk1.bam.pbi", + "01_PBCCS/sample1_1.chunk1.metrics.json.gz", + "01_PBCCS/sample1_1.chunk1.report.json", + "01_PBCCS/sample1_1.chunk1.report.txt", + "01_PBCCS/sample1_1.chunk2.bam", + "01_PBCCS/sample1_1.chunk2.bam.pbi", + "01_PBCCS/sample1_1.chunk2.metrics.json.gz", + "01_PBCCS/sample1_1.chunk2.report.json", + "01_PBCCS/sample1_1.chunk2.report.txt", + "01_PBCCS/sample1_1.chunk3.bam", + "01_PBCCS/sample1_1.chunk3.bam.pbi", + "01_PBCCS/sample1_1.chunk3.metrics.json.gz", + "01_PBCCS/sample1_1.chunk3.report.json", + "01_PBCCS/sample1_1.chunk3.report.txt", + "01_PBCCS/sample1_1.chunk4.bam", + "01_PBCCS/sample1_1.chunk4.bam.pbi", + "01_PBCCS/sample1_1.chunk4.metrics.json.gz", + "01_PBCCS/sample1_1.chunk4.report.json", + "01_PBCCS/sample1_1.chunk4.report.txt", + "01_PBCCS/sample1_1.chunk5.bam", + "01_PBCCS/sample1_1.chunk5.bam.pbi", + "01_PBCCS/sample1_1.chunk5.metrics.json.gz", + "01_PBCCS/sample1_1.chunk5.report.json", + "01_PBCCS/sample1_1.chunk5.report.txt", + "02_LIMA", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.json", + "02_LIMA/sample1_0.chunk1_flnc.lima.clips", + "02_LIMA/sample1_0.chunk1_flnc.lima.counts", + "02_LIMA/sample1_0.chunk1_flnc.lima.guess", + "02_LIMA/sample1_0.chunk1_flnc.lima.report", + "02_LIMA/sample1_0.chunk1_flnc.lima.summary", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.json", + "02_LIMA/sample1_0.chunk2_flnc.lima.clips", + "02_LIMA/sample1_0.chunk2_flnc.lima.counts", + "02_LIMA/sample1_0.chunk2_flnc.lima.guess", + "02_LIMA/sample1_0.chunk2_flnc.lima.report", + "02_LIMA/sample1_0.chunk2_flnc.lima.summary", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.json", + "02_LIMA/sample1_0.chunk3_flnc.lima.clips", + "02_LIMA/sample1_0.chunk3_flnc.lima.counts", + "02_LIMA/sample1_0.chunk3_flnc.lima.guess", + "02_LIMA/sample1_0.chunk3_flnc.lima.report", + "02_LIMA/sample1_0.chunk3_flnc.lima.summary", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.json", + "02_LIMA/sample1_0.chunk4_flnc.lima.clips", + "02_LIMA/sample1_0.chunk4_flnc.lima.counts", + "02_LIMA/sample1_0.chunk4_flnc.lima.guess", + "02_LIMA/sample1_0.chunk4_flnc.lima.report", + "02_LIMA/sample1_0.chunk4_flnc.lima.summary", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.json", + "02_LIMA/sample1_0.chunk5_flnc.lima.clips", + "02_LIMA/sample1_0.chunk5_flnc.lima.counts", + "02_LIMA/sample1_0.chunk5_flnc.lima.guess", + "02_LIMA/sample1_0.chunk5_flnc.lima.report", + "02_LIMA/sample1_0.chunk5_flnc.lima.summary", + "02_LIMA/sample1_1.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_1.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_1.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_1.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_1.chunk1_flnc.json", + "02_LIMA/sample1_1.chunk1_flnc.lima.clips", + "02_LIMA/sample1_1.chunk1_flnc.lima.counts", + "02_LIMA/sample1_1.chunk1_flnc.lima.guess", + "02_LIMA/sample1_1.chunk1_flnc.lima.report", + "02_LIMA/sample1_1.chunk1_flnc.lima.summary", + "02_LIMA/sample1_1.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_1.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_1.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_1.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_1.chunk2_flnc.json", + "02_LIMA/sample1_1.chunk2_flnc.lima.clips", + "02_LIMA/sample1_1.chunk2_flnc.lima.counts", + "02_LIMA/sample1_1.chunk2_flnc.lima.guess", + "02_LIMA/sample1_1.chunk2_flnc.lima.report", + "02_LIMA/sample1_1.chunk2_flnc.lima.summary", + "02_LIMA/sample1_1.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_1.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_1.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_1.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_1.chunk3_flnc.json", + "02_LIMA/sample1_1.chunk3_flnc.lima.clips", + "02_LIMA/sample1_1.chunk3_flnc.lima.counts", + "02_LIMA/sample1_1.chunk3_flnc.lima.guess", + "02_LIMA/sample1_1.chunk3_flnc.lima.report", + "02_LIMA/sample1_1.chunk3_flnc.lima.summary", + "02_LIMA/sample1_1.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_1.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_1.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_1.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_1.chunk4_flnc.json", + "02_LIMA/sample1_1.chunk4_flnc.lima.clips", + "02_LIMA/sample1_1.chunk4_flnc.lima.counts", + "02_LIMA/sample1_1.chunk4_flnc.lima.guess", + "02_LIMA/sample1_1.chunk4_flnc.lima.report", + "02_LIMA/sample1_1.chunk4_flnc.lima.summary", + "02_LIMA/sample1_1.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_1.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_1.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_1.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_1.chunk5_flnc.json", + "02_LIMA/sample1_1.chunk5_flnc.lima.clips", + "02_LIMA/sample1_1.chunk5_flnc.lima.counts", + "02_LIMA/sample1_1.chunk5_flnc.lima.guess", + "02_LIMA/sample1_1.chunk5_flnc.lima.report", + "02_LIMA/sample1_1.chunk5_flnc.lima.summary", + "02_LIMA/sample2_3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample2_3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample2_3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample2_3_flnc.consensusreadset.xml", + "02_LIMA/sample2_3_flnc.json", + "02_LIMA/sample2_3_flnc.lima.clips", + "02_LIMA/sample2_3_flnc.lima.counts", + "02_LIMA/sample2_3_flnc.lima.guess", + "02_LIMA/sample2_3_flnc.lima.report", + "02_LIMA/sample2_3_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk5.report.csv", + "03_ISOSEQ_REFINE/sample1_1.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_1.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_1.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_1.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_1.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_1.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_1.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_1.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_1.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_1.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_1.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_1.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_1.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_1.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_1.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_1.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_1.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_1.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_1.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_1.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_1.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_1.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_1.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_1.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_1.chunk5.report.csv", + "03_ISOSEQ_REFINE/sample2_3.bam", + "03_ISOSEQ_REFINE/sample2_3.bam.pbi", + "03_ISOSEQ_REFINE/sample2_3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample2_3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample2_3.report.csv", + "03_ISOSEQ_REFINE/sample3_4.bam", + "03_ISOSEQ_REFINE/sample3_4.bam.pbi", + "03_ISOSEQ_REFINE/sample3_4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample3_4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample3_4.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample1_0.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk5.fasta", + "04_BAMTOOLS_CONVERT/sample1_1.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_1.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_1.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_1.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_1.chunk5.fasta", + "04_BAMTOOLS_CONVERT/sample2_3.fasta", + "04_BAMTOOLS_CONVERT/sample3_4.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_1.chunk5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.5_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.6_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.6_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample2_3.chunk.6_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_4.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_4.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_4.chunk.1_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample1_0.chunk1.bam", + "06_MINIMAP2/sample1_0.chunk1.bam.bai", + "06_MINIMAP2/sample1_0.chunk2.bam", + "06_MINIMAP2/sample1_0.chunk2.bam.bai", + "06_MINIMAP2/sample1_0.chunk3.bam", + "06_MINIMAP2/sample1_0.chunk3.bam.bai", + "06_MINIMAP2/sample1_0.chunk4.bam", + "06_MINIMAP2/sample1_0.chunk4.bam.bai", + "06_MINIMAP2/sample1_0.chunk5.bam", + "06_MINIMAP2/sample1_0.chunk5.bam.bai", + "06_MINIMAP2/sample1_1.chunk1.bam", + "06_MINIMAP2/sample1_1.chunk1.bam.bai", + "06_MINIMAP2/sample1_1.chunk2.bam", + "06_MINIMAP2/sample1_1.chunk2.bam.bai", + "06_MINIMAP2/sample1_1.chunk3.bam", + "06_MINIMAP2/sample1_1.chunk3.bam.bai", + "06_MINIMAP2/sample1_1.chunk4.bam", + "06_MINIMAP2/sample1_1.chunk4.bam.bai", + "06_MINIMAP2/sample1_1.chunk5.bam", + "06_MINIMAP2/sample1_1.chunk5.bam.bai", + "06_MINIMAP2/sample1_2.chunk.1.bam", + "06_MINIMAP2/sample1_2.chunk.1.bam.bai", + "06_MINIMAP2/sample2_3.chunk.1.bam", + "06_MINIMAP2/sample2_3.chunk.1.bam.bai", + "06_MINIMAP2/sample2_3.chunk.2.bam", + "06_MINIMAP2/sample2_3.chunk.2.bam.bai", + "06_MINIMAP2/sample2_3.chunk.3.bam", + "06_MINIMAP2/sample2_3.chunk.3.bam.bai", + "06_MINIMAP2/sample2_3.chunk.4.bam", + "06_MINIMAP2/sample2_3.chunk.4.bam.bai", + "06_MINIMAP2/sample2_3.chunk.5.bam", + "06_MINIMAP2/sample2_3.chunk.5.bam.bai", + "06_MINIMAP2/sample2_3.chunk.6.bam", + "06_MINIMAP2/sample2_3.chunk.6.bam.bai", + "06_MINIMAP2/sample3_4.chunk.1.bam", + "06_MINIMAP2/sample3_4.chunk.1.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_1.chunk5_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_2.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.5_variants.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_polya.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_read.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_varcov.txt", + "07_GSTAMA_COLLAPSE/sample2_3.chunk.6_variants.txt", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_4.chunk.1_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample1.tsv", + "08_GSTAMA_FILELIST/sample2.tsv", + "08_GSTAMA_FILELIST/sample3.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample1.bed", + "09_GSTAMA_MERGE/sample1_gene_report.txt", + "09_GSTAMA_MERGE/sample1_merge.txt", + "09_GSTAMA_MERGE/sample1_trans_report.txt", + "09_GSTAMA_MERGE/sample2.bed", + "09_GSTAMA_MERGE/sample2_gene_report.txt", + "09_GSTAMA_MERGE/sample2_merge.txt", + "09_GSTAMA_MERGE/sample2_trans_report.txt", + "09_GSTAMA_MERGE/sample3.bed", + "09_GSTAMA_MERGE/sample3_gene_report.txt", + "09_GSTAMA_MERGE/sample3_merge.txt", + "09_GSTAMA_MERGE/sample3_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ccs-filter-graph.txt", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_ccs_report.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ccs-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct.png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample1_0.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_0.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_0.chunk2.bam.pbi:md5,bb903ad2f6a8802a84dbbd428c59ad14", + "sample1_0.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_0.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_0.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_0.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_0.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_0.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_0.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_1.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_1.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_1.chunk2.bam.pbi:md5,632bbb1c10e2c5ae2f01164f5113e75d", + "sample1_1.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_1.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_1.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_1.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_1.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_1.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_1.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_0.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_0.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_0.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_0.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_0.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_0.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_0.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_0.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_0.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_0.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_0.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_0.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_0.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_0.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_0.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_0.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_0.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_0.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_0.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_0.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_0.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_0.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_0.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_0.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_0.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample1_1.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_1.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_1.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_1.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_1.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_1.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_1.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_1.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_1.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_1.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_1.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_1.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_1.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_1.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_1.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_1.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_1.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_1.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_1.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_1.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_1.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_1.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_1.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_1.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_1.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_1.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_1.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_1.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_1.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_1.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample2_3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,70c14fdeca211ae732560cdb9bd2c059", + "sample2_3_flnc.lima.clips:md5,fa03bc75bd78b2648a139fd67c69208f", + "sample2_3_flnc.lima.counts:md5,842c6a23ca2de504ced4538ad5111da1", + "sample2_3_flnc.lima.guess:md5,d3675af3ca8a908ee9e3c231668392d3", + "sample2_3_flnc.lima.report:md5,dc073985322ae0a003ccc7e0fa4db5e6", + "sample2_3_flnc.lima.summary:md5,bcbcaaaca418bdeb91141c81715ca420", + "sample1_0.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_0.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_0.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_0.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_0.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_0.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_0.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_0.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_0.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_0.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample1_1.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_1.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_1.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_1.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_1.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_1.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_1.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_1.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_1.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_1.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample2_3.bam.pbi:md5,5519b222440f9443228760a3ad91962f", + "sample2_3.report.csv:md5,d42a139e5d9b08396bdb087c01243ea9", + "sample3_4.bam.pbi:md5,f20c3a1c38a0642ef96a98c0645e47ff", + "sample3_4.report.csv:md5,8d350f8dba8c928ec8b693f47dc1c096", + "sample1_0.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_0.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_0.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_0.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_0.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample1_1.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_1.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_1.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_1.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_1.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample2_3.fasta:md5,c5c29b8da57e24222fded8814ea43fca", + "sample3_4.fasta:md5,81b607067bac48a5b53281e982acd623", + "sample1_0.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_0.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_0.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_0.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_0.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_0.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_0.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_0.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_0.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_0.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample1_1.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_1.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_1.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_1.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_1.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_1.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_1.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_1.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_1.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_1.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_1.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_1.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_1.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_1.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_1.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample2_3.chunk.1_tama.fa.gz:md5,eba6fd6a37715feb1f55acd2aba308fe", + "sample2_3.chunk.1_tama_polya_flnc_report.txt.gz:md5,8f4ccfb4bea6210fcd2677141043eaaf", + "sample2_3.chunk.1_tama_tails.fa.gz:md5,db050c0f7f02653fab9d3cb098874995", + "sample2_3.chunk.2_tama.fa.gz:md5,dba8219a7fd40d39e145358928e79718", + "sample2_3.chunk.2_tama_polya_flnc_report.txt.gz:md5,31719db0fd430cb6854da57d6882eb80", + "sample2_3.chunk.2_tama_tails.fa.gz:md5,5e667c1aa16049e36b9b9b185b672f90", + "sample2_3.chunk.3_tama.fa.gz:md5,2284da2407fb3d0c96280a5963c0f21d", + "sample2_3.chunk.3_tama_polya_flnc_report.txt.gz:md5,8d95867bcb53e018305c18ed5cc14c00", + "sample2_3.chunk.3_tama_tails.fa.gz:md5,63f2d71634e092e478909018f4c08fa9", + "sample2_3.chunk.4_tama.fa.gz:md5,c63152a17a861184fb1f2611dcbcce12", + "sample2_3.chunk.4_tama_polya_flnc_report.txt.gz:md5,7350ae2922384469f6c015a6e4898685", + "sample2_3.chunk.4_tama_tails.fa.gz:md5,7703b0eff06e6c63cbf7fc212f3089ce", + "sample2_3.chunk.5_tama.fa.gz:md5,89ea3e7f09fd3db800adc8e13ceff26b", + "sample2_3.chunk.5_tama_polya_flnc_report.txt.gz:md5,d3c83d0d228f4f3850e2af8cdecc763a", + "sample2_3.chunk.5_tama_tails.fa.gz:md5,0d92991493cf2ce045cd2a44ebca2f6a", + "sample2_3.chunk.6_tama.fa.gz:md5,34a80800ddc45859c430cf4156158413", + "sample2_3.chunk.6_tama_polya_flnc_report.txt.gz:md5,460c9b71e2bb758dad83331aca18d2fd", + "sample2_3.chunk.6_tama_tails.fa.gz:md5,a11e5f0f7370a708b31469a42b95b6c1", + "sample3_4.chunk.1_tama.fa.gz:md5,6ed270ddf8e79b541a51407a32889c9b", + "sample3_4.chunk.1_tama_polya_flnc_report.txt.gz:md5,db83ccbbc1326abd9638bc2adfaa8677", + "sample3_4.chunk.1_tama_tails.fa.gz:md5,3d91c6a6222dbab8823b6a506dc3555d", + "sample1_0.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_0.chunk1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample1_0.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_0.chunk1_read.txt:md5,bd4b21ad8ac7b2bec993b7b72501c2ab", + "sample1_0.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_0.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_0.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_0.chunk2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample1_0.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_0.chunk2_read.txt:md5,4ae8757dedd0f8cfb7c922dd7589a4f2", + "sample1_0.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_0.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_0.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_0.chunk3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample1_0.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_0.chunk3_read.txt:md5,3a2c866905dfcdb140e86340a95d90d2", + "sample1_0.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_0.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_0.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_0.chunk4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample1_0.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_0.chunk4_read.txt:md5,e8eb42852f61205870f89e015a2f987e", + "sample1_0.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_0.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_0.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample1_0.chunk5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample1_0.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_0.chunk5_read.txt:md5,6fc5c8520a8bb47cc549376f5e32ce3b", + "sample1_0.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample1_0.chunk5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample1_0.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_1.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_1.chunk1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample1_1.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_1.chunk1_read.txt:md5,bd4b21ad8ac7b2bec993b7b72501c2ab", + "sample1_1.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_1.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_1.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_1.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_1.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_1.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_1.chunk2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample1_1.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_1.chunk2_read.txt:md5,4ae8757dedd0f8cfb7c922dd7589a4f2", + "sample1_1.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_1.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_1.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_1.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_1.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_1.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_1.chunk3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample1_1.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_1.chunk3_read.txt:md5,3a2c866905dfcdb140e86340a95d90d2", + "sample1_1.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_1.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_1.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_1.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_1.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_1.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_1.chunk4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample1_1.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_1.chunk4_read.txt:md5,e8eb42852f61205870f89e015a2f987e", + "sample1_1.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_1.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_1.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_1.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_1.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_1.chunk5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample1_1.chunk5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample1_1.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_1.chunk5_read.txt:md5,6fc5c8520a8bb47cc549376f5e32ce3b", + "sample1_1.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_1.chunk5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample1_1.chunk5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample1_1.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_1.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_2.chunk.1_collapsed.bed:md5,66cf1481b1e69fa4cf3b13f07efd8c40", + "sample1_2.chunk.1_local_density_error.txt:md5,2e2b91bbdd3225ebcd3402edf86a2cc6", + "sample1_2.chunk.1_polya.txt:md5,6fd5552e7b2152e3b46cdee04b140104", + "sample1_2.chunk.1_read.txt:md5,b0dc554a9b99c5f5b6fd3203f276c797", + "sample1_2.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_2.chunk.1_trans_read.bed:md5,347f03649d304377cb37dec40830d35c", + "sample1_2.chunk.1_trans_report.txt:md5,e2b7c12377d7a4424b253898f0f0bd7a", + "sample1_2.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_2.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_3.chunk.1_collapsed.bed:md5,2a5b07fa24ddcb51259063a76c52acee", + "sample2_3.chunk.1_local_density_error.txt:md5,b6fa52ea6fa7f3a7add75dec930cc6b3", + "sample2_3.chunk.1_polya.txt:md5,48e49820ebf548cf1547fd7dfd93b753", + "sample2_3.chunk.1_read.txt:md5,3a4d70008407cb42bac94ec94ffaecac", + "sample2_3.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_3.chunk.1_trans_read.bed:md5,ae71e848615d3f0ae550e6bc4639f44e", + "sample2_3.chunk.1_trans_report.txt:md5,3d21f4fda06970fa6ef67acd6f7ed9d5", + "sample2_3.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_3.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_3.chunk.2_collapsed.bed:md5,0f05bb1b7b5e40614382eb1817dd557e", + "sample2_3.chunk.2_local_density_error.txt:md5,4a46e426dcd85ca8c743ea3422f65188", + "sample2_3.chunk.2_polya.txt:md5,d21f8811d58b55d0d94d9d3f93c7fceb", + "sample2_3.chunk.2_read.txt:md5,3600aefaca5b22494e085a686d1b46cc", + "sample2_3.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_3.chunk.2_trans_read.bed:md5,628e3e88297ce40fca491345304dfba6", + "sample2_3.chunk.2_trans_report.txt:md5,983a121808b374b2f05166de960b0419", + "sample2_3.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_3.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_3.chunk.3_collapsed.bed:md5,4c80428bc3bd3a052209df58eb57eaf8", + "sample2_3.chunk.3_local_density_error.txt:md5,8c5967a572846420b98932b7fd98310c", + "sample2_3.chunk.3_polya.txt:md5,ee69a686a6dfad12f29e235afd72b377", + "sample2_3.chunk.3_read.txt:md5,7ac6ae4752631ee92442d3d4a86846a8", + "sample2_3.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_3.chunk.3_trans_read.bed:md5,2de626e8c3e8fa21b938e888229d6160", + "sample2_3.chunk.3_trans_report.txt:md5,52bcdea21e4f8bef847e2c21693c40ea", + "sample2_3.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_3.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_3.chunk.4_collapsed.bed:md5,116215ae754f236bca4c4115d6e7b124", + "sample2_3.chunk.4_local_density_error.txt:md5,65af1e6f5a1d39ad6b24bd1a63a6278a", + "sample2_3.chunk.4_polya.txt:md5,c9919cd20d7bbf4f593cd2844bd28550", + "sample2_3.chunk.4_read.txt:md5,4760b76910a567cf62a83f4b21d085aa", + "sample2_3.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_3.chunk.4_trans_read.bed:md5,6d4851ed8eb0b2df1d656dbb5a2ad3c6", + "sample2_3.chunk.4_trans_report.txt:md5,1029b53f7d59c97d87df970fb3e0501e", + "sample2_3.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_3.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_3.chunk.5_collapsed.bed:md5,35d2a8acdcd0a40330624f5bcf033206", + "sample2_3.chunk.5_local_density_error.txt:md5,e87053b8c7f58a350225a6d43be17d72", + "sample2_3.chunk.5_polya.txt:md5,8b4cc38336bfe6ff6d8eca74166d24a9", + "sample2_3.chunk.5_read.txt:md5,f441d3c36963cc277178b4e1af275d1b", + "sample2_3.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_3.chunk.5_trans_read.bed:md5,8175932eec00949b37030106d9e84621", + "sample2_3.chunk.5_trans_report.txt:md5,178e21fb7ea02d1b84682dc2e934c330", + "sample2_3.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_3.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample2_3.chunk.6_collapsed.bed:md5,93c66ee57dbf302a6b2d99600cc730c4", + "sample2_3.chunk.6_local_density_error.txt:md5,0b62cde5a47f0a4dc2c0e4c26235b241", + "sample2_3.chunk.6_polya.txt:md5,2cb46eac9b00a08095b1bd4e0244559d", + "sample2_3.chunk.6_read.txt:md5,9ea2721f96d5efe63bc35850bbf12520", + "sample2_3.chunk.6_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample2_3.chunk.6_trans_read.bed:md5,2080114fac4005105ed4b8f291afd4b9", + "sample2_3.chunk.6_trans_report.txt:md5,15ad4aa7c425624464a179cf4d434e2e", + "sample2_3.chunk.6_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample2_3.chunk.6_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3_4.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_4.chunk.1_local_density_error.txt:md5,25e666a9e8b3af9271532659a0b28013", + "sample3_4.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_4.chunk.1_read.txt:md5,f5bedd14060f896f268d1aff22da3c5b", + "sample3_4.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_4.chunk.1_trans_read.bed:md5,86f4b69ae68a2ac46a38b9d82946f63e", + "sample3_4.chunk.1_trans_report.txt:md5,41739b80f8a4b828e8d91883c514166d", + "sample3_4.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_4.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1.tsv:md5,3b0f241d363c76e54928b95fc393a74b", + "sample2.tsv:md5,3cf1a0545f1bc2cf9cf866e5bb767194", + "sample3.tsv:md5,c45dc7318d66250898c3cbb574950b68", + "sample1.bed:md5,a07da2b53c2068a8992b180b6e6109ef", + "sample1_gene_report.txt:md5,d79df2c95355b6b45111fed3fe1477de", + "sample1_merge.txt:md5,43c2126ff07d1fd408c5dd0efc40f2bd", + "sample1_trans_report.txt:md5,b80aa7caa6883c1989730805c7d2c07d", + "sample2.bed:md5,f587c4c86b185278b89f6495effde755", + "sample2_gene_report.txt:md5,dbae995f09715084c1a4db52133589cf", + "sample2_merge.txt:md5,088759020eeab65733b1d238fa6337cd", + "sample2_trans_report.txt:md5,a5d853548d3fe402a3539db80c239473", + "sample3.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_gene_report.txt:md5,62c484ca9861d15630839679d789cedc", + "sample3_merge.txt:md5,3279ae7633478e5abc277a32211023b3", + "sample3_trans_report.txt:md5,6370921b9331122615415760360112fc", + "ccs-filter-graph.txt:md5,ba008b5846eef8b5fba1028bef4754d1", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_general_stats.txt:md5,2fa069b074cad309312a2cc03006d98d", + "multiqc_lima_counts.txt:md5,d00757e4773f621db4f5459ca7a21088", + "multiqc_lima_summary.txt:md5,4aa9cb449edee79805d6caaf23fe5fd2" + ] + ], + "timestamp": "2026-08-14T15:17:15.255981647", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_refine.nf.test b/tests/inputs_refine.nf.test new file mode 100644 index 0000000..41fc011 --- /dev/null +++ b/tests/inputs_refine.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs refine" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_refine" + + test("-profile test_inputs_refine") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_refine.nf.test.snap b/tests/inputs_refine.nf.test.snap new file mode 100644 index 0000000..5f82c7b --- /dev/null +++ b/tests/inputs_refine.nf.test.snap @@ -0,0 +1,126 @@ +{ + "-profile test_inputs_refine": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + } + }, + [ + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample3_0.bam", + "03_ISOSEQ_REFINE/sample3_0.bam.pbi", + "03_ISOSEQ_REFINE/sample3_0.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample3_0.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample3_0.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample3_0.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.2_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample3_0.chunk.1.bam", + "06_MINIMAP2/sample3_0.chunk.1.bam.bai", + "06_MINIMAP2/sample3_0.chunk.2.bam", + "06_MINIMAP2/sample3_0.chunk.2.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample3.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample3.bed", + "09_GSTAMA_MERGE/sample3_gene_report.txt", + "09_GSTAMA_MERGE/sample3_merge.txt", + "09_GSTAMA_MERGE/sample3_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample3_0.bam.pbi:md5,afb9a61ed9f3aa3f589af5c48a2f9f45", + "sample3_0.report.csv:md5,8d350f8dba8c928ec8b693f47dc1c096", + "sample3_0.fasta:md5,81b607067bac48a5b53281e982acd623", + "sample3_0.chunk.1_tama.fa.gz:md5,547bcdc2de2cffc24b5fcc1b5a13bb2f", + "sample3_0.chunk.1_tama_polya_flnc_report.txt.gz:md5,d5181d0e3cd99b207032729e345bec15", + "sample3_0.chunk.1_tama_tails.fa.gz:md5,db16b89e4737e9a27ca5d8ac7816abba", + "sample3_0.chunk.2_tama.fa.gz:md5,eeabbdacda87cf5bfa23b530d4e1a838", + "sample3_0.chunk.2_tama_polya_flnc_report.txt.gz:md5,8e2996f18473044831036113c804b1c3", + "sample3_0.chunk.2_tama_tails.fa.gz:md5,397d55c45160ffe3a2596a77ec3104f4", + "sample3_0.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_0.chunk.1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample3_0.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_0.chunk.1_read.txt:md5,f3fd6b182d7255f35339a0507cd55564", + "sample3_0.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_0.chunk.1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample3_0.chunk.1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample3_0.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_0.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3_0.chunk.2_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_0.chunk.2_local_density_error.txt:md5,50da2e01c5aeb64595e8aba8957a74d7", + "sample3_0.chunk.2_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_0.chunk.2_read.txt:md5,e8b06298d18b442a1b5b2fe1d2fb94e0", + "sample3_0.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_0.chunk.2_trans_read.bed:md5,244ba6d15cbf8bd84d6e3b5d005017dd", + "sample3_0.chunk.2_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample3_0.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_0.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3.tsv:md5,13594e213bd42a105685200e9d4afbfa", + "sample3.bed:md5,2376959ce39530c95f0782741d058662", + "sample3_gene_report.txt:md5,9fc021aed668882970918e34c80f33a5", + "sample3_merge.txt:md5,4d9f5af63bf3cbeec576b19fdaddfa56", + "sample3_trans_report.txt:md5,166e969a66faeb156a59250cc2c1d228", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" + ] + ], + "timestamp": "2026-08-14T15:18:11.073851011", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/inputs_refine_map.nf.test b/tests/inputs_refine_map.nf.test new file mode 100644 index 0000000..80e47a1 --- /dev/null +++ b/tests/inputs_refine_map.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline inputs refine map" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_inputs_refine_map" + + test("-profile test_inputs_refine_map") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/inputs_refine_map.nf.test.snap b/tests/inputs_refine_map.nf.test.snap new file mode 100644 index 0000000..43c4da4 --- /dev/null +++ b/tests/inputs_refine_map.nf.test.snap @@ -0,0 +1,236 @@ +{ + "-profile test_inputs_refine_map": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + } + }, + [ + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample3_0.bam", + "03_ISOSEQ_REFINE/sample3_0.bam.pbi", + "03_ISOSEQ_REFINE/sample3_0.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample3_0.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample3_0.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample3_0.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample3_0.chunk.2_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample3_0.chunk.1.bam", + "06_MINIMAP2/sample3_0.chunk.1.bam.bai", + "06_MINIMAP2/sample3_0.chunk.2.bam", + "06_MINIMAP2/sample3_0.chunk.2.bam.bai", + "06_MINIMAP2/sample4_1.chunk.1.bam", + "06_MINIMAP2/sample4_1.chunk.1.bam.bai", + "06_MINIMAP2/sample4_1.chunk.2.bam", + "06_MINIMAP2/sample4_1.chunk.2.bam.bai", + "06_MINIMAP2/sample4_1.chunk.3.bam", + "06_MINIMAP2/sample4_1.chunk.3.bam.bai", + "06_MINIMAP2/sample4_1.chunk.4.bam", + "06_MINIMAP2/sample4_1.chunk.4.bam.bai", + "06_MINIMAP2/sample4_1.chunk.5.bam", + "06_MINIMAP2/sample4_1.chunk.5.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample3_0.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.1_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.2_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.3_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.4_variants.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_polya.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_read.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample4_1.chunk.5_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample3.tsv", + "08_GSTAMA_FILELIST/sample4.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample3.bed", + "09_GSTAMA_MERGE/sample3_gene_report.txt", + "09_GSTAMA_MERGE/sample3_merge.txt", + "09_GSTAMA_MERGE/sample3_trans_report.txt", + "09_GSTAMA_MERGE/sample4.bed", + "09_GSTAMA_MERGE/sample4_gene_report.txt", + "09_GSTAMA_MERGE/sample4_merge.txt", + "09_GSTAMA_MERGE/sample4_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample3_0.bam.pbi:md5,afb9a61ed9f3aa3f589af5c48a2f9f45", + "sample3_0.report.csv:md5,8d350f8dba8c928ec8b693f47dc1c096", + "sample3_0.fasta:md5,81b607067bac48a5b53281e982acd623", + "sample3_0.chunk.1_tama.fa.gz:md5,547bcdc2de2cffc24b5fcc1b5a13bb2f", + "sample3_0.chunk.1_tama_polya_flnc_report.txt.gz:md5,d5181d0e3cd99b207032729e345bec15", + "sample3_0.chunk.1_tama_tails.fa.gz:md5,db16b89e4737e9a27ca5d8ac7816abba", + "sample3_0.chunk.2_tama.fa.gz:md5,eeabbdacda87cf5bfa23b530d4e1a838", + "sample3_0.chunk.2_tama_polya_flnc_report.txt.gz:md5,8e2996f18473044831036113c804b1c3", + "sample3_0.chunk.2_tama_tails.fa.gz:md5,397d55c45160ffe3a2596a77ec3104f4", + "sample3_0.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_0.chunk.1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample3_0.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_0.chunk.1_read.txt:md5,f3fd6b182d7255f35339a0507cd55564", + "sample3_0.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_0.chunk.1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample3_0.chunk.1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample3_0.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_0.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3_0.chunk.2_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample3_0.chunk.2_local_density_error.txt:md5,50da2e01c5aeb64595e8aba8957a74d7", + "sample3_0.chunk.2_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample3_0.chunk.2_read.txt:md5,e8b06298d18b442a1b5b2fe1d2fb94e0", + "sample3_0.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample3_0.chunk.2_trans_read.bed:md5,244ba6d15cbf8bd84d6e3b5d005017dd", + "sample3_0.chunk.2_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample3_0.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample3_0.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample4_1.chunk.1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample4_1.chunk.1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample4_1.chunk.1_read.txt:md5,6ab436fef1e37907f89b19e07bfe3f1d", + "sample4_1.chunk.1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample4_1.chunk.1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample4_1.chunk.1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample4_1.chunk.2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample4_1.chunk.2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample4_1.chunk.2_read.txt:md5,b643a3a994835b5c99e9bfe630aff856", + "sample4_1.chunk.2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample4_1.chunk.2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample4_1.chunk.2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample4_1.chunk.3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample4_1.chunk.3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample4_1.chunk.3_read.txt:md5,d777caedc81cef340943c9e31cff3260", + "sample4_1.chunk.3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample4_1.chunk.3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample4_1.chunk.3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample4_1.chunk.4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample4_1.chunk.4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample4_1.chunk.4_read.txt:md5,c827cfe75cf841613fe213d6d04a393f", + "sample4_1.chunk.4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample4_1.chunk.4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample4_1.chunk.4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample4_1.chunk.5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample4_1.chunk.5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample4_1.chunk.5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample4_1.chunk.5_read.txt:md5,ba943648c22434ac8ab663bb5ce2408e", + "sample4_1.chunk.5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample4_1.chunk.5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample4_1.chunk.5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample4_1.chunk.5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample4_1.chunk.5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample3.tsv:md5,13594e213bd42a105685200e9d4afbfa", + "sample4.tsv:md5,a39cb9f60a457b556d93fe0c93d4323d", + "sample3.bed:md5,2376959ce39530c95f0782741d058662", + "sample3_gene_report.txt:md5,9fc021aed668882970918e34c80f33a5", + "sample3_merge.txt:md5,4d9f5af63bf3cbeec576b19fdaddfa56", + "sample3_trans_report.txt:md5,166e969a66faeb156a59250cc2c1d228", + "sample4.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample4_gene_report.txt:md5,d8987c8661b20036f172062a0c1f598c", + "sample4_merge.txt:md5,be50affd437d4421c14e7b08c4b93a43", + "sample4_trans_report.txt:md5,c9318ad84afb393ce6fc27f258204c5f", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" + ] + ], + "timestamp": "2026-08-14T15:19:28.888109344", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/minimap2.nf.test b/tests/minimap2.nf.test new file mode 100644 index 0000000..c60b4cf --- /dev/null +++ b/tests/minimap2.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline - Minimap2 path" + script "../main.nf" + tag "pipeline" + tag "pipeline_isoseq" + profile "test_minimap2" + + test("-profile test_minimap2") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeFromYamlMap("${outputDir}/pipeline_info/nf_core_isoseq_software_mqc_versions.yml", "Workflow"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/minimap2.nf.test.snap b/tests/minimap2.nf.test.snap new file mode 100644 index 0000000..c5c0e3b --- /dev/null +++ b/tests/minimap2.nf.test.snap @@ -0,0 +1,398 @@ +{ + "-profile test_minimap2": { + "content": [ + { + "BAMTOOLS_CONVERT": { + "bamtools": "2.5.2" + }, + "GSTAMA_COLLAPSE": { + "gstama": 20211103 + }, + "GSTAMA_MERGE": { + "gstama": "0.0.1" + }, + "GSTAMA_POLYACLEANUP": { + "gstama": 20211103 + }, + "ISOSEQ_REFINE": { + "isoseq": "4.0.0" + }, + "LIMA": { + "lima": "2.12.0" + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.30-r1287" + }, + "PBCCS": { + "pbccs": "6.4.0" + } + }, + [ + "01_PBCCS", + "01_PBCCS/sample1_0.chunk1.bam", + "01_PBCCS/sample1_0.chunk1.bam.pbi", + "01_PBCCS/sample1_0.chunk1.metrics.json.gz", + "01_PBCCS/sample1_0.chunk1.report.json", + "01_PBCCS/sample1_0.chunk1.report.txt", + "01_PBCCS/sample1_0.chunk2.bam", + "01_PBCCS/sample1_0.chunk2.bam.pbi", + "01_PBCCS/sample1_0.chunk2.metrics.json.gz", + "01_PBCCS/sample1_0.chunk2.report.json", + "01_PBCCS/sample1_0.chunk2.report.txt", + "01_PBCCS/sample1_0.chunk3.bam", + "01_PBCCS/sample1_0.chunk3.bam.pbi", + "01_PBCCS/sample1_0.chunk3.metrics.json.gz", + "01_PBCCS/sample1_0.chunk3.report.json", + "01_PBCCS/sample1_0.chunk3.report.txt", + "01_PBCCS/sample1_0.chunk4.bam", + "01_PBCCS/sample1_0.chunk4.bam.pbi", + "01_PBCCS/sample1_0.chunk4.metrics.json.gz", + "01_PBCCS/sample1_0.chunk4.report.json", + "01_PBCCS/sample1_0.chunk4.report.txt", + "01_PBCCS/sample1_0.chunk5.bam", + "01_PBCCS/sample1_0.chunk5.bam.pbi", + "01_PBCCS/sample1_0.chunk5.metrics.json.gz", + "01_PBCCS/sample1_0.chunk5.report.json", + "01_PBCCS/sample1_0.chunk5.report.txt", + "02_LIMA", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk1_flnc.json", + "02_LIMA/sample1_0.chunk1_flnc.lima.clips", + "02_LIMA/sample1_0.chunk1_flnc.lima.counts", + "02_LIMA/sample1_0.chunk1_flnc.lima.guess", + "02_LIMA/sample1_0.chunk1_flnc.lima.report", + "02_LIMA/sample1_0.chunk1_flnc.lima.summary", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk2_flnc.json", + "02_LIMA/sample1_0.chunk2_flnc.lima.clips", + "02_LIMA/sample1_0.chunk2_flnc.lima.counts", + "02_LIMA/sample1_0.chunk2_flnc.lima.guess", + "02_LIMA/sample1_0.chunk2_flnc.lima.report", + "02_LIMA/sample1_0.chunk2_flnc.lima.summary", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk3_flnc.json", + "02_LIMA/sample1_0.chunk3_flnc.lima.clips", + "02_LIMA/sample1_0.chunk3_flnc.lima.counts", + "02_LIMA/sample1_0.chunk3_flnc.lima.guess", + "02_LIMA/sample1_0.chunk3_flnc.lima.report", + "02_LIMA/sample1_0.chunk3_flnc.lima.summary", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk4_flnc.json", + "02_LIMA/sample1_0.chunk4_flnc.lima.clips", + "02_LIMA/sample1_0.chunk4_flnc.lima.counts", + "02_LIMA/sample1_0.chunk4_flnc.lima.guess", + "02_LIMA/sample1_0.chunk4_flnc.lima.report", + "02_LIMA/sample1_0.chunk4_flnc.lima.summary", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi", + "02_LIMA/sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.consensusreadset.xml", + "02_LIMA/sample1_0.chunk5_flnc.json", + "02_LIMA/sample1_0.chunk5_flnc.lima.clips", + "02_LIMA/sample1_0.chunk5_flnc.lima.counts", + "02_LIMA/sample1_0.chunk5_flnc.lima.guess", + "02_LIMA/sample1_0.chunk5_flnc.lima.report", + "02_LIMA/sample1_0.chunk5_flnc.lima.summary", + "03_ISOSEQ_REFINE", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk1.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk1.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk1.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk1.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk2.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk2.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk2.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk2.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk3.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk3.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk3.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk3.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk4.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk4.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk4.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk4.report.csv", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam", + "03_ISOSEQ_REFINE/sample1_0.chunk5.bam.pbi", + "03_ISOSEQ_REFINE/sample1_0.chunk5.consensusreadset.xml", + "03_ISOSEQ_REFINE/sample1_0.chunk5.filter_summary.report.json", + "03_ISOSEQ_REFINE/sample1_0.chunk5.report.csv", + "04_BAMTOOLS_CONVERT", + "04_BAMTOOLS_CONVERT/sample1_0.chunk1.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk2.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk3.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk4.fasta", + "04_BAMTOOLS_CONVERT/sample1_0.chunk5.fasta", + "05_GSTAMA_POLYACLEANUP", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk1_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk2_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk3_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk4_tama_tails.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama.fa.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_polya_flnc_report.txt.gz", + "05_GSTAMA_POLYACLEANUP/sample1_0.chunk5_tama_tails.fa.gz", + "06_MINIMAP2", + "06_MINIMAP2/sample1_0.chunk1.bam", + "06_MINIMAP2/sample1_0.chunk1.bam.bai", + "06_MINIMAP2/sample1_0.chunk2.bam", + "06_MINIMAP2/sample1_0.chunk2.bam.bai", + "06_MINIMAP2/sample1_0.chunk3.bam", + "06_MINIMAP2/sample1_0.chunk3.bam.bai", + "06_MINIMAP2/sample1_0.chunk4.bam", + "06_MINIMAP2/sample1_0.chunk4.bam.bai", + "06_MINIMAP2/sample1_0.chunk5.bam", + "06_MINIMAP2/sample1_0.chunk5.bam.bai", + "07_GSTAMA_COLLAPSE", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk1_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk2_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk3_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk4_variants.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_collapsed.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_local_density_error.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_polya.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_read.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_strand_check.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_read.bed", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_trans_report.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_varcov.txt", + "07_GSTAMA_COLLAPSE/sample1_0.chunk5_variants.txt", + "08_GSTAMA_FILELIST", + "08_GSTAMA_FILELIST/sample1.tsv", + "09_GSTAMA_MERGE", + "09_GSTAMA_MERGE/sample1.bed", + "09_GSTAMA_MERGE/sample1_gene_report.txt", + "09_GSTAMA_MERGE/sample1_merge.txt", + "09_GSTAMA_MERGE/sample1_trans_report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ccs-filter-graph.txt", + "multiqc/multiqc_data/lima-filter-graph.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_ccs_report.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_lima_counts.txt", + "multiqc/multiqc_data/multiqc_lima_summary.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct-log.pdf", + "multiqc/multiqc_plots/pdf/ccs-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-cnt.pdf", + "multiqc/multiqc_plots/pdf/lima-filter-graph-pct.pdf", + "multiqc/multiqc_plots/pdf/multiqc_lima_counts.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ccs-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct-log.png", + "multiqc/multiqc_plots/png/ccs-filter-graph-pct.png", + "multiqc/multiqc_plots/png/lima-filter-graph-cnt.png", + "multiqc/multiqc_plots/png/lima-filter-graph-pct.png", + "multiqc/multiqc_plots/png/multiqc_lima_counts.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct-log.svg", + "multiqc/multiqc_plots/svg/ccs-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-cnt.svg", + "multiqc/multiqc_plots/svg/lima-filter-graph-pct.svg", + "multiqc/multiqc_plots/svg/multiqc_lima_counts.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_isoseq_software_mqc_versions.yml" + ], + [ + "sample1_0.chunk1.bam.pbi:md5,99f47d228b98c2b94c24d74d47104d3c", + "sample1_0.chunk1.report.txt:md5,5e2f87fae296a25c6135ca66fe34b371", + "sample1_0.chunk2.bam.pbi:md5,bb903ad2f6a8802a84dbbd428c59ad14", + "sample1_0.chunk2.report.txt:md5,4160e01a1516a67d6b023216c4aa3e78", + "sample1_0.chunk3.bam.pbi:md5,4f811a1688870c272ddb0ac599da7afd", + "sample1_0.chunk3.report.txt:md5,48fdb9fdc1a8605094174fd255d55319", + "sample1_0.chunk4.bam.pbi:md5,0193629d8ce1c5d223f8a827fec3103a", + "sample1_0.chunk4.report.txt:md5,4f586f8642858074e802d9b19c5b9872", + "sample1_0.chunk5.bam.pbi:md5,ff2f347c97451b1582e210b6a41c3ae9", + "sample1_0.chunk5.report.txt:md5,a8dddb323068b43935cb7ccae165c373", + "sample1_0.chunk1_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eef826677543ae5713de3213521e9e60", + "sample1_0.chunk1_flnc.lima.clips:md5,454496196732c3f4880d7f8996b52892", + "sample1_0.chunk1_flnc.lima.counts:md5,01bd4f886883d97a723ac130516126ef", + "sample1_0.chunk1_flnc.lima.guess:md5,5a2ed97558c76fbfc42f6132512dac96", + "sample1_0.chunk1_flnc.lima.report:md5,6238b8b855d29d8bdf3be414f50ef5e1", + "sample1_0.chunk1_flnc.lima.summary:md5,574763ef859d52867dc7c6335e7d723a", + "sample1_0.chunk2_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,f5c93b964437f8145bfb76fb689b9f4d", + "sample1_0.chunk2_flnc.lima.clips:md5,d6df63c3e3234ae443bc8713092ffb98", + "sample1_0.chunk2_flnc.lima.counts:md5,8e9699fa9f37c7c3c57c1eb92ea687b3", + "sample1_0.chunk2_flnc.lima.guess:md5,e6a608f7ad88a5977f37f378a7a1affb", + "sample1_0.chunk2_flnc.lima.report:md5,548df65673730979dd840eaa1a3f07ea", + "sample1_0.chunk2_flnc.lima.summary:md5,c258654f45e0be1aa1bc8f42c7fb2a4d", + "sample1_0.chunk3_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,eefd71b0d91a110bd59e7da537c78594", + "sample1_0.chunk3_flnc.lima.clips:md5,d1fde602e417a5e3736e2cc99483fe12", + "sample1_0.chunk3_flnc.lima.counts:md5,d1991b775c90482e41f2706c20277c8f", + "sample1_0.chunk3_flnc.lima.guess:md5,8c88e61dbe378bb2e970e1c29cd3c4c1", + "sample1_0.chunk3_flnc.lima.report:md5,48ef78d4b532addb48e4903924df5447", + "sample1_0.chunk3_flnc.lima.summary:md5,365c6ebbeecec1ad1309ded9cf480272", + "sample1_0.chunk4_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,feef4bffeb5f3e492d2ef75c06ca2260", + "sample1_0.chunk4_flnc.lima.clips:md5,633d02e7df637ddef9d5769ee7523639", + "sample1_0.chunk4_flnc.lima.counts:md5,96aebefa4474767d7031e39d95a4d1c0", + "sample1_0.chunk4_flnc.lima.guess:md5,374642ac513d7216f80c1d5a03b4c7b7", + "sample1_0.chunk4_flnc.lima.report:md5,1643f293c8d4f547e3182b2428d92ccb", + "sample1_0.chunk4_flnc.lima.summary:md5,fd432c63d1d5806d77c5092e366260ca", + "sample1_0.chunk5_flnc.NEB_5p--NEB_Clontech_3p.bam.pbi:md5,80f011eacaa234d23407f5997a778c2b", + "sample1_0.chunk5_flnc.lima.clips:md5,ab0d851c6bae9ba9cf84a27d50fbba20", + "sample1_0.chunk5_flnc.lima.counts:md5,2cd73105100cc69258a7431a5f5658a4", + "sample1_0.chunk5_flnc.lima.guess:md5,08fdcaf443f65132f8ae831309dc713b", + "sample1_0.chunk5_flnc.lima.report:md5,b98c98088e3e59765ad93aabe304e62d", + "sample1_0.chunk5_flnc.lima.summary:md5,77bdbf2e0bce1597c974746aa1222df5", + "sample1_0.chunk1.bam.pbi:md5,075844de75d07585438c8d87ca33c48d", + "sample1_0.chunk1.report.csv:md5,44eeeb49c3f86a52f40ffbd8320e3a06", + "sample1_0.chunk2.bam.pbi:md5,0cf113907eb46d6fea3e0609fbe4b3a8", + "sample1_0.chunk2.report.csv:md5,3c000f3c2dceccec8e68e2101ccb29a0", + "sample1_0.chunk3.bam.pbi:md5,75f2d0541d4c3c63775f006065249e5c", + "sample1_0.chunk3.report.csv:md5,3f71153a4389c184848fbf9076dedfca", + "sample1_0.chunk4.bam.pbi:md5,8e4d1255cd4c09280efb0f4ce29e2a9b", + "sample1_0.chunk4.report.csv:md5,10438a332df3673df211529f3b55a635", + "sample1_0.chunk5.bam.pbi:md5,1ee46b52dcf1ff0c1ba34b1331b349d1", + "sample1_0.chunk5.report.csv:md5,7dbdca744ba863b362410c4fb0fbb6ab", + "sample1_0.chunk1.fasta:md5,32d548c6d7840dccf2542194aed84aee", + "sample1_0.chunk2.fasta:md5,e59d9e3cc7163e0a7ba5f93f9a91a894", + "sample1_0.chunk3.fasta:md5,6b7855f3ed392e3ea313d1fe732cfacf", + "sample1_0.chunk4.fasta:md5,b955c90a945211d89e03069a751aed43", + "sample1_0.chunk5.fasta:md5,0e126b8c3002e5fa600ef48732fa6183", + "sample1_0.chunk1_tama.fa.gz:md5,123d1c8aa61372b00708bf187525a7e8", + "sample1_0.chunk1_tama_polya_flnc_report.txt.gz:md5,6a47612bcb322b4a5e33f55d52c683f2", + "sample1_0.chunk1_tama_tails.fa.gz:md5,b5265bd73fb2e18d3642e271caf81f38", + "sample1_0.chunk2_tama.fa.gz:md5,1124febf474adbbb35051e091199b74a", + "sample1_0.chunk2_tama_polya_flnc_report.txt.gz:md5,dd8fc1193f0269bc000c005c445245ef", + "sample1_0.chunk2_tama_tails.fa.gz:md5,e1dddbef670a07cc9a6f37269c474aa1", + "sample1_0.chunk3_tama.fa.gz:md5,5c831ec6cfb2061fc5e158c524689947", + "sample1_0.chunk3_tama_polya_flnc_report.txt.gz:md5,81accd783a26ce65839b56b1b75ad1c7", + "sample1_0.chunk3_tama_tails.fa.gz:md5,8182e5590ec98c390f20b2a4812bd608", + "sample1_0.chunk4_tama.fa.gz:md5,5e2b0b58badab17820a2823261f62a4e", + "sample1_0.chunk4_tama_polya_flnc_report.txt.gz:md5,aeeee9ec5e28c503ff485160de11c7e1", + "sample1_0.chunk4_tama_tails.fa.gz:md5,725faa67458d60450123fd5837083e4e", + "sample1_0.chunk5_tama.fa.gz:md5,098f3846cf39d3d7b5b1f2e2a8269778", + "sample1_0.chunk5_tama_polya_flnc_report.txt.gz:md5,e1ab002d18f3e66637354e605bf0230d", + "sample1_0.chunk5_tama_tails.fa.gz:md5,63aa1ecd22740aa311500f4f537a0082", + "sample1_0.chunk1_collapsed.bed:md5,33f6bd7b72aa2957bbf0ceffc9ff1b32", + "sample1_0.chunk1_local_density_error.txt:md5,bde56c7c2c791918943ea8d6c8c2169a", + "sample1_0.chunk1_polya.txt:md5,628ea62b918fc4f31e109f724d714a66", + "sample1_0.chunk1_read.txt:md5,bd4b21ad8ac7b2bec993b7b72501c2ab", + "sample1_0.chunk1_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk1_trans_read.bed:md5,19cdf0d7d935665da0f96b936c6affc6", + "sample1_0.chunk1_trans_report.txt:md5,35610244e9d495e6f5dee1c6ae0580f8", + "sample1_0.chunk1_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk1_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk2_collapsed.bed:md5,05f7568e3d2f390e44f9f985b27247e2", + "sample1_0.chunk2_local_density_error.txt:md5,7247a67bea9392c73ed5c4288bc66672", + "sample1_0.chunk2_polya.txt:md5,434e6f3327bbeecd708dc6cc1edaa118", + "sample1_0.chunk2_read.txt:md5,4ae8757dedd0f8cfb7c922dd7589a4f2", + "sample1_0.chunk2_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk2_trans_read.bed:md5,928ee441099b8c0d3c44054524603e94", + "sample1_0.chunk2_trans_report.txt:md5,e0ae3f827531d7316f9397b4dbdb0667", + "sample1_0.chunk2_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk2_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk3_collapsed.bed:md5,844806f6d1979d68a3b9096267d7bf07", + "sample1_0.chunk3_local_density_error.txt:md5,cda740cdf5b59aed316d23d97cccb9f4", + "sample1_0.chunk3_polya.txt:md5,f5872c789c84037abd230f3e3053429e", + "sample1_0.chunk3_read.txt:md5,3a2c866905dfcdb140e86340a95d90d2", + "sample1_0.chunk3_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk3_trans_read.bed:md5,c4e132389c86dc844e76f78c3724ed8d", + "sample1_0.chunk3_trans_report.txt:md5,eb6a4b39128ce0c19a96b5df9bb00010", + "sample1_0.chunk3_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk3_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk4_collapsed.bed:md5,1abee63ee6b2ecd8a579fd293e9787bb", + "sample1_0.chunk4_local_density_error.txt:md5,d35f24d3f83e2513bfd055cf3e438037", + "sample1_0.chunk4_polya.txt:md5,9b1bb126d5f3ba8b1605fadec4f28d15", + "sample1_0.chunk4_read.txt:md5,e8eb42852f61205870f89e015a2f987e", + "sample1_0.chunk4_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk4_trans_read.bed:md5,340aa905ab34937cf34d8434ad00ecc9", + "sample1_0.chunk4_trans_report.txt:md5,0c43e570ac23818b1c183d48588deab1", + "sample1_0.chunk4_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk4_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1_0.chunk5_collapsed.bed:md5,1a8baa8613f6bdd0a0fa1ad7c38b7aaa", + "sample1_0.chunk5_local_density_error.txt:md5,2a87123d2eb92f00ac730924b19dc2f8", + "sample1_0.chunk5_polya.txt:md5,b5e129f170b71a74aae74120730ffdb1", + "sample1_0.chunk5_read.txt:md5,6fc5c8520a8bb47cc549376f5e32ce3b", + "sample1_0.chunk5_strand_check.txt:md5,42cc52b2660b1e0b84e1c9ab37a965ec", + "sample1_0.chunk5_trans_read.bed:md5,6f43624e2fad10e896ecd93011ae92ae", + "sample1_0.chunk5_trans_report.txt:md5,5d6c4748d0b86d7b29cdf0d1f3e3cdf5", + "sample1_0.chunk5_varcov.txt:md5,7b77861fe5e8e953d6d193ace2467e12", + "sample1_0.chunk5_variants.txt:md5,a4c518e1dfb7ff762bd7e5c3d7370986", + "sample1.tsv:md5,54b9ee29a34d402185285211b673b9c4", + "sample1.bed:md5,4928c5cc59c23dd25486a22a9a5e9bed", + "sample1_gene_report.txt:md5,c698958ea806a156847961b0c719a66c", + "sample1_merge.txt:md5,07cdfbf4070903d66ffe459f9ce94715", + "sample1_trans_report.txt:md5,e40712d885417415a654adaed0c34c08", + "ccs-filter-graph.txt:md5,9f35c8022cdae8ef48f9047e67111bd1", + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "multiqc_general_stats.txt:md5,f60e94deef7b1d8f6f4c5e67b325e6ba", + "multiqc_lima_counts.txt:md5,a2e8e8ca0c68cb43d2887b196d251ca4", + "multiqc_lima_summary.txt:md5,11e5253acb7b8d344a4747f5796cf995" + ] + ], + "timestamp": "2026-08-14T15:21:28.964625469", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + } +} \ No newline at end of file diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 0000000..3af4a96 --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,15 @@ +/* +======================================================================================== + Nextflow config file for running nf-test tests +======================================================================================== +*/ + +// TODO nf-core: Specify any additional parameters here +// Or any resources requirements +params { + modules_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/isoseq/' +} + +// Fixes S3 access issues on self-hosted runners +aws.client.anonymous = true diff --git a/workflows/isoseq.nf b/workflows/isoseq.nf index 22b5b17..f7270df 100644 --- a/workflows/isoseq.nf +++ b/workflows/isoseq.nf @@ -3,29 +3,12 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { paramsSummaryMap } from 'plugin/nf-validation' +include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_isoseq_pipeline' -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - CONFIG FILES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() -ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) -//ch_multiqc_config = [ -// file("$projectDir/assets/multiqc_config.yml" , checkIfExists: true), -// file("$projectDir/assets/nf-core-isoseq_logo_light.png", checkIfExists: true) -// ] -//ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT LOCAL MODULES/SUBWORKFLOWS @@ -35,15 +18,18 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { SET_CHUNK_NUM_CHANNEL } from '../subworkflows/local/set_chunk_num_channel' -include { SET_VALUE_CHANNEL as SET_FASTA_CHANNEL } from '../subworkflows/local/set_value_channel' -include { SET_VALUE_CHANNEL as SET_GTF_CHANNEL } from '../subworkflows/local/set_value_channel' -include { SET_VALUE_CHANNEL as SET_PRIMERS_CHANNEL } from '../subworkflows/local/set_value_channel' +include { SET_CHUNK_NUM_CHANNEL } from '../subworkflows/local/set_chunk_num_channel/main' +include { SET_VALUE_CHANNEL as SET_FASTA_CHANNEL } from '../subworkflows/local/set_value_channel/main' +include { SET_VALUE_CHANNEL as SET_GTF_CHANNEL } from '../subworkflows/local/set_value_channel/main' +include { SET_VALUE_CHANNEL as SET_PRIMERS_CHANNEL } from '../subworkflows/local/set_value_channel/main' +include { CHUNKER as CHUNKER_BAMTOOLS_OUT } from '../subworkflows/local/chunker/main' +include { CHUNKER as CHUNKER_INPUT_FASTAS } from '../subworkflows/local/chunker/main' // // MODULE: Local to the pipeline // -include { GSTAMA_FILELIST } from '../modules/local/gstama/filelist/main' +include { GSTAMA_FILELIST } from '../modules/local/gstama/filelist/main' +include { GSTAMA_FILELIST as GSTAMA_FILELIST_ALL } from '../modules/local/gstama/filelist/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -54,19 +40,19 @@ include { GSTAMA_FILELIST } from '../modules/local/gstama/filelist/main' // // MODULE: Installed directly from nf-core/modules // -include { PBCCS } from '../modules/nf-core/pbccs/main' -include { LIMA } from '../modules/nf-core/lima/main' -include { ISOSEQ_REFINE } from '../modules/nf-core/isoseq/refine/main' -include { BAMTOOLS_CONVERT } from '../modules/nf-core/bamtools/convert/main' -include { GSTAMA_POLYACLEANUP } from '../modules/nf-core/gstama/polyacleanup/main' -include { GUNZIP } from '../modules/nf-core/gunzip/main' -include { MINIMAP2_ALIGN } from '../modules/nf-core/minimap2/align/main' -include { GNU_SORT } from '../modules/nf-core/gnu/sort/main' -include { ULTRA_INDEX } from '../modules/nf-core/ultra/index/main' -include { ULTRA_ALIGN } from '../modules/nf-core/ultra/align/main' -include { GSTAMA_COLLAPSE } from '../modules/nf-core/gstama/collapse/main' -include { GSTAMA_MERGE } from '../modules/nf-core/gstama/merge/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' addParams( options: [publish_files : ['_versions.yml':'']] ) +include { PBCCS } from '../modules/nf-core/pbccs/main' +include { LIMA } from '../modules/nf-core/lima/main' +include { ISOSEQ_REFINE } from '../modules/nf-core/isoseq/refine/main' +include { BAMTOOLS_CONVERT } from '../modules/nf-core/bamtools/convert/main' +include { GSTAMA_POLYACLEANUP } from '../modules/nf-core/gstama/polyacleanup/main' +include { GUNZIP } from '../modules/nf-core/gunzip/main' +include { MINIMAP2_ALIGN } from '../modules/nf-core/minimap2/align/main' +include { GNU_SORT } from '../modules/nf-core/gnu/sort/main' +include { ULTRA_INDEX } from '../modules/nf-core/ultra/index/main' +include { ULTRA_ALIGN } from '../modules/nf-core/ultra/align/main' +include { GSTAMA_COLLAPSE } from '../modules/nf-core/gstama/collapse/main' +include { GSTAMA_MERGE } from '../modules/nf-core/gstama/merge/main' +include { GSTAMA_MERGE as GSTAMA_MERGE_ALL } from '../modules/nf-core/gstama/merge/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -77,89 +63,150 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoft workflow ISOSEQ { take: - ch_samplesheet - + ch_samplesheet // channel: samplesheet read in from --input + multiqc_config + multiqc_logo + multiqc_methods_description + outdir main: - // - // SET UP VERSIONS CHANNELS - // - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + // Set version and multiqc channels + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() - // - // START PIPELINE - // - // Prepare channels for: - SET_FASTA_CHANNEL(params.fasta) // - genome fasta - SET_PRIMERS_CHANNEL(params.primers) // - primers fasta + // Value channels initialization + SET_FASTA_CHANNEL(params.fasta) // genome fasta + ch_primers = channel.empty() // primers fasta + if (params.primers) { + SET_PRIMERS_CHANNEL(params.primers) // primers fasta + ch_primers = SET_PRIMERS_CHANNEL.out.data + } if (params.aligner == "ultra") { - SET_GTF_CHANNEL(params.gtf) // - genome gtf + SET_GTF_CHANNEL(params.gtf) // genome gtf } - -// ISOSEQ pipeline entrypoint ################################################################## - if (params.entrypoint == "isoseq") { - - SET_CHUNK_NUM_CHANNEL(params.input, params.chunk) // - PBCCS parallelization - - PBCCS(ch_samplesheet, SET_CHUNK_NUM_CHANNEL.out.chunk_num, params.chunk) // Generate CCS from raw reads - PBCCS.out.bam // Update meta: update id (+chunkX) and store former id - .map { - def chk = (it[1] =~ /.*\.(chunk\d+)\.bam/)[ 0 ][ 1 ] - def id_former = it[0].id - def id_new = it[0].id + "." + chk - return [ [id:id_new, id_former:id_former, single_end:true], it[1] ] + // Dispatch inputs to redistribute them to their ad hoc starting point + ch_samplesheet + .branch { meta, _seq_data, _pbi -> + ccs : meta.start_from == "ccs" + lima : meta.start_from == "lima" + refine : meta.start_from == "refine" + mapping: meta.start_from == "mapping" } - .set { ch_pbccs_bam_updated } - - LIMA(ch_pbccs_bam_updated, SET_PRIMERS_CHANNEL.out.data) // Remove primers from CCS - ISOSEQ_REFINE(LIMA.out.bam, SET_PRIMERS_CHANNEL.out.data) // Discard CCS without polyA tails, remove it from the other - BAMTOOLS_CONVERT(ISOSEQ_REFINE.out.bam) // Convert bam to fasta - GSTAMA_POLYACLEANUP(BAMTOOLS_CONVERT.out.data) // Clean polyA tails from reads - } - - -// MAP pipeline entrypoint ################################################################## - if (params.entrypoint == "isoseq") { - ch_reads_to_map = GSTAMA_POLYACLEANUP.out.fasta - } - else if (params.entrypoint == "map") { - ch_reads_to_map = ch_samplesheet - } - + .set { ch_seq_data } + // ch_seq_data.ccs.view { it -> "BRANCH: ccs : $it" } + // ch_seq_data.lima.view { it -> "BRANCH: lima : $it" } + // ch_seq_data.refine.view { it -> "BRANCH: refine : $it" } + // ch_seq_data.mapping.view{ it -> "BRANCH: mapping: $it" } + + // PBCCS: prepare and run ccs + SET_CHUNK_NUM_CHANNEL(params.input, params.chunk_ccs) // - PBCCS parallelization + + PBCCS( + ch_seq_data.ccs, + SET_CHUNK_NUM_CHANNEL.out.chunk_num, + params.chunk_ccs) // Generate CCS from raw reads + + PBCCS.out.bam // Update meta: update id (+chunkX) and store former id + .map { meta, file -> + def chk = (file =~ /.*\.(chunk\d+)\.bam/)[0][1] + def id_former = meta.id + def id_new = meta.id + "." + chk + return [ [id:id_new, id_former:id_former, single_end:true], file ] + } + .set { ch_pbccs_out_bam_updated } + + // LIMA: Add the samplesheet's LIMA inputs to the queue and run lima + ch_pbccs_out_bam_updated + .concat(ch_seq_data.lima.map { meta, bam, _pbi -> [ meta, bam ] }) + .set { ch_lima_input } + // ch_lima_input.view { meta, bam -> println("ch_lima_input: $meta | $bam") } + LIMA(ch_lima_input, ch_primers) // Remove primers from CCS + + // LIMA: Add the samplesheet's refine inputs to the queue and run isoseq refine + LIMA.out.bam + .concat(ch_seq_data.refine.map { meta, bam, _pbi -> [ meta, bam ] }) + .set { ch_isoseq_refine_input } + // ch_isoseq_refine_input.view { meta, bam -> println("ch_isoseq_refine_input: $meta | $bam") } + ISOSEQ_REFINE(ch_isoseq_refine_input, ch_primers) // Discard CCS without polyA tails, remove it from the other + + // Convert bam files to fasta + BAMTOOLS_CONVERT(ISOSEQ_REFINE.out.bam) // Convert bam to fasta + // BAMTOOLS_CONVERT.out.data.view { meta, fa -> println("BAMTOOLS_CONVERT.out.data: $meta | $fa") } + + // Split fastas into chunks + CHUNKER_BAMTOOLS_OUT(BAMTOOLS_CONVERT.out.data, params.chunk_mapping, false, false) // false, false == no need to decompress input, don't compress output + // CHUNKER_BAMTOOLS_OUT.out.fastas.view { meta, fa -> println("CHUNKER_BAMTOOLS_OUT.out.fasta: $meta | $fa") } + + // GSTAMA_POLYACLEANUP: Convert to fasta and run polyAcleanup + GSTAMA_POLYACLEANUP(CHUNKER_BAMTOOLS_OUT.out.fastas) // Clean polyA tails from reads + // GSTAMA_POLYACLEANUP.out.fasta.view { meta, fa -> println("GSTAMA_POLYACLEANUP.out.fasta: $meta | $fa") } + + // Split user fasta and add them the main channel + CHUNKER_INPUT_FASTAS(ch_seq_data.mapping.map { meta, fasta, _pbi -> [ meta, fasta ] }, params.chunk_mapping, true, false) + // CHUNKER_INPUT_FASTAS.out.fastas.view { meta, fa -> println("CHUNKER_INPUT_FASTAS.out.fasta: $meta | $fa") } + + // MAPPING: Split samplesheet's fasta files, add them to the queue and run mapping + GSTAMA_POLYACLEANUP.out.fasta + .concat(CHUNKER_INPUT_FASTAS.out.fastas) + .set { ch_input_fastas } + // ch_input_fastas.view { meta, fa -> println("ch_input_fastas.out.fasta: $meta | $fa") } // Align FLNCs: User can choose between minimap2 and uLTRA aligners if (params.aligner == "ultra") { - GNU_SORT(SET_GTF_CHANNEL.out.data.map { it -> [ [id:'genome'], it ] } ) // Sort GTF on sequence and start, uLTRA index fails with topological sort - ULTRA_INDEX(SET_FASTA_CHANNEL.out.data, GNU_SORT.out.sorted.map { it[1] }) // Index GTF file before alignment - GUNZIP(ch_reads_to_map) // uncompress fastas (gz not supported by uLTRA) - ULTRA_ALIGN(GUNZIP.out.gunzip, SET_FASTA_CHANNEL.out.data, ULTRA_INDEX.out.index) // Align read against genome - GSTAMA_COLLAPSE(ULTRA_ALIGN.out.bam, SET_FASTA_CHANNEL.out.data) // Clean gene models + GNU_SORT(SET_GTF_CHANNEL.out.data.map { it -> [ [id:'genome'], it, 'gtf' ] } ) // Sort GTF on sequence and start, uLTRA index fails with topological sort + ULTRA_INDEX( // Index GTF file before alignment + SET_FASTA_CHANNEL.out.data.map { it -> [ [id:'genome'], it ] }, + GNU_SORT.out.sorted) + GUNZIP(ch_input_fastas) // uncompress fastas (gz not supported by uLTRA) + + // The ultra index channel must be the same size as the reads/GUNZIP channel. + // join: gather all index files into one channel + // combine: duplicates index tuples to match number of reads + // map: remove read and its meta as we don't need them + ch_ultra_index = + ULTRA_INDEX.out.pickle + .join(ULTRA_INDEX.out.database) + .combine(GUNZIP.out.gunzip) + .map { meta1, pickle, db, _meta2, _reads -> [ meta1, pickle, db ] } + + ULTRA_ALIGN( + GUNZIP.out.gunzip, + SET_FASTA_CHANNEL.out.data.map { it -> [ [id:'genome'], it ] }, + ch_ultra_index) // Align read against genome + GSTAMA_COLLAPSE(ULTRA_ALIGN.out.bam, SET_FASTA_CHANNEL.out.data) // Clean gene models } else if (params.aligner == "minimap2") { MINIMAP2_ALIGN( // Align read against genome - ch_reads_to_map, - [ [id:"Dummy"], file(params.fasta) ], - Channel.value(true), - Channel.value("bai"), - Channel.value(false), - Channel.value(false)) + ch_input_fastas, + [ [id:'genome'], file(params.fasta) ], + channel.value(true), + channel.value("bai"), + channel.value(false), + channel.value(false)) GSTAMA_COLLAPSE(MINIMAP2_ALIGN.out.bam, SET_FASTA_CHANNEL.out.data) // Clean gene models } GSTAMA_COLLAPSE.out.bed // replace id with the former sample id and group files by sample - .map { [ [id:it[0].id_former], it[1] ] } + .map { meta, file -> + def sample = meta.id_former.replaceAll(/_\d+/, '') + [ + [ id:sample ], + file + ] + } .groupTuple() .set { ch_tcollapse } - cap_value = params.capped == true ? Channel.value("capped") : Channel.value("no_cap") + // ch_tcollapse.view { meta, fa -> println("ch_tcollapse: $meta | $fa") } + + cap_value = params.capped == true ? channel.value("capped") : channel.value("no_cap") GSTAMA_FILELIST( // Generate the filelist file needed by TAMA merge ch_tcollapse, cap_value, - Channel.value("1,1,1")) + channel.value("1,1,1")) ch_tcollapse // Synchronized bed files produced by TAMA collapse with file list file generated by GSTAMA_FILELIST .join( GSTAMA_FILELIST.out.tsv ) @@ -167,86 +214,95 @@ workflow ISOSEQ { GSTAMA_MERGE(ch_tmerge_in.map { [ it[0], it[1] ] }, ch_tmerge_in.map { it[2] }) // Merge all bed files from one sample into a uniq bed file + // Merge all bed files from all samples into a uniq bed file + ( params.tama_merge_all ? GSTAMA_MERGE.out.bed : channel.empty() ) + .map { _meta, bed -> [ [ id: "all_samples" ], bed ] } + .groupTuple() + .filter { _meta, beds -> beds.size() > 1 } // Only merge if there are more than one bed file + .set { ch_merge_all_filelist_input } - // - // MODULE: Pipeline reporting - // - if (params.entrypoint == "isoseq") { - ch_versions = ch_versions.mix(PBCCS.out.versions) - ch_versions = ch_versions.mix(LIMA.out.versions) - ch_versions = ch_versions.mix(ISOSEQ_REFINE.out.versions) - ch_versions = ch_versions.mix(BAMTOOLS_CONVERT.out.versions) - ch_versions = ch_versions.mix(GSTAMA_POLYACLEANUP.out.versions) - } + GSTAMA_FILELIST_ALL( + ch_merge_all_filelist_input, + cap_value, + channel.value("1,1,1") + ) - if (params.aligner == "ultra") { - ch_versions = ch_versions.mix(GNU_SORT.out.versions) - ch_versions = ch_versions.mix(ULTRA_INDEX.out.versions) - ch_versions = ch_versions.mix(ULTRA_ALIGN.out.versions) - } - else if (params.aligner == "minimap2") { - ch_versions = ch_versions.mix(MINIMAP2_ALIGN.out.versions) - } + ch_merge_all_filelist_input + .join( GSTAMA_FILELIST_ALL.out.tsv ) + .set { ch_tmerge_all_in } - ch_versions = ch_versions.mix(GSTAMA_COLLAPSE.out.versions) - ch_versions = ch_versions.mix(GSTAMA_MERGE.out.versions) + GSTAMA_MERGE_ALL( + ch_tmerge_all_in.map { meta, beds, _list -> [ meta, beds ] }, + ch_tmerge_all_in.map { _meta, _beds, list -> list } + ) // - // MODULE: CUSTOM_DUMPSOFTWAREVERSIONS + // Collate and save software versions // - CUSTOM_DUMPSOFTWAREVERSIONS ( - ch_versions.unique().collectFile(name: 'collated_versions.yml') - ) + def topic_versions = channel.topic("versions") + .distinct() + .branch { entry -> + versions_file: entry instanceof Path + versions_tuple: true + } + + def topic_versions_string = topic_versions.versions_tuple + .map { process, tool, version -> + [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ] + } + .groupTuple(by:0) + .map { process, tool_versions -> + tool_versions.unique().sort() + "${process}:\n${tool_versions.join('\n')}" + } + def ch_collated_versions = softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file)) + .mix(topic_versions_string) + .collectFile( + storeDir: "${outdir}/pipeline_info", + name: 'nf_core_' + 'isoseq_software_' + 'mqc_' + 'versions.yml', + sort: true, + newLine: true + ) // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( - "$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() - summary_params = paramsSummaryMap( workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - - ch_multiqc_files = Channel.empty() - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - // ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) - if (params.entrypoint == "isoseq") { - ch_multiqc_files = ch_multiqc_files.mix(PBCCS.out.report_json.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(LIMA.out.summary.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(LIMA.out.counts.collect{it[1]}.ifEmpty([])) - } - - ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) - + ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_files = ch_multiqc_files.mix( ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - // ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - // ch_multiqc_files = ch_multiqc_files.mix( - // ch_methods_description.collectFile( - // name: 'methods_description_mqc.yaml', - // sort: true - // ) - // ) + ch_multiqc_custom_methods_description = multiqc_methods_description ? + file(multiqc_methods_description, checkIfExists: true) : + file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = channel.value( + methodsDescriptionText(ch_multiqc_custom_methods_description)) + + ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) + ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true)) + + ch_multiqc_files = ch_multiqc_files.mix(PBCCS.out.report_json.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(LIMA.out.summary.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(LIMA.out.counts.collect{it[1]}.ifEmpty([])) MULTIQC ( - ch_multiqc_files.collect(), - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList(), - channel.empty(), - channel.empty() + ch_multiqc_files.flatten().collect().map { files -> + [ + [ id: 'isoseq' ], + files, + multiqc_config + ? file(multiqc_config, checkIfExists: true) + : file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true), + multiqc_logo ? file(multiqc_logo, checkIfExists: true) : [], + [], + [], + ] + } ) emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + multiqc_report = MULTIQC.out.report.map { _meta, report -> [report] }.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] }
    Process Name \\", - " \\ Software Version
    CUSTOM_DUMPSOFTWAREVERSIONSpython3.11.7
    yaml5.4.1
    TOOL1tool10.11.9
    TOOL2tool21.9
    WorkflowNextflow
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls