From bb12704abaa28a72da15b180eb28144babda5ec0 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 3 Jun 2025 11:01:52 +0000 Subject: [PATCH 01/64] Template update for nf-core/tools version 3.3.1 --- .editorconfig | 37 ----- .github/CONTRIBUTING.md | 2 +- .github/actions/get-shards/action.yml | 69 +++++++++ .github/actions/nf-test/action.yml | 113 ++++++++++++++ .github/workflows/awsfulltest.yml | 4 +- .github/workflows/awstest.yml | 2 +- .github/workflows/ci.yml | 88 ----------- .github/workflows/clean-up.yml | 2 +- .github/workflows/download_pipeline.yml | 20 +-- .../{fix-linting.yml => fix_linting.yml} | 4 +- .github/workflows/linting.yml | 15 +- .github/workflows/linting_comment.yml | 4 +- .github/workflows/nf-test.yml | 142 ++++++++++++++++++ .github/workflows/release-announcements.yml | 2 +- ...mment.yml => template-version-comment.yml} | 2 +- .nf-core.yml | 6 +- .pre-commit-config.yaml | 26 +++- .prettierrc.yml | 5 + CHANGELOG.md | 2 +- README.md | 7 +- conf/base.config | 5 +- nextflow.config | 19 ++- nf-test.config | 24 +++ ro-crate-metadata.json | 22 +-- .../utils_nfcore_pixelator_pipeline/main.nf | 1 - tests/.nftignore | 2 + tests/default.nf.test | 35 +++++ tests/nextflow.config | 12 ++ 28 files changed, 486 insertions(+), 186 deletions(-) delete mode 100644 .editorconfig create mode 100644 .github/actions/get-shards/action.yml create mode 100644 .github/actions/nf-test/action.yml delete mode 100644 .github/workflows/ci.yml rename .github/workflows/{fix-linting.yml => fix_linting.yml} (96%) create mode 100644 .github/workflows/nf-test.yml rename .github/workflows/{template_version_comment.yml => template-version-comment.yml} (95%) create mode 100644 nf-test.config create mode 100644 tests/.nftignore create mode 100644 tests/default.nf.test create mode 100644 tests/nextflow.config diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 6d9b74cc..00000000 --- a/.editorconfig +++ /dev/null @@ -1,37 +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 - -# ignore ro-crate metadata files -[**/ro-crate-metadata.json] -insert_final_newline = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e091e270..08165cfd 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -78,7 +78,7 @@ If you wish to contribute a new step, please use the following coding standards: 5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines 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`. +8. If applicable, add a new test in the `tests` directory. ### Default values diff --git a/.github/actions/get-shards/action.yml b/.github/actions/get-shards/action.yml new file mode 100644 index 00000000..34085279 --- /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@v1 + 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 00000000..243e7823 --- /dev/null +++ b/.github/actions/nf-test/action.yml @@ -0,0 +1,113 @@ +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@v2 + with: + version: "${{ env.NXF_VERSION }}" + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: "3.13" + + - name: Install nf-test + uses: nf-core/setup-nf-test@v1 + with: + version: "${{ env.NFT_VER }}" + install-pdiff: true + + - name: Setup apptainer + if: contains(inputs.profile, 'singularity') + uses: eWaterCycle/setup-apptainer@main + + - 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@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3 + with: + auto-update-conda: true + conda-solver: libmamba + conda-remove-defaults: true + + # TODO Skip failing conda tests and document their failures + # https://github.com/nf-core/modules/issues/7017 + - name: Run nf-test + shell: bash + env: + NFT_DIFF: ${{ env.NFT_DIFF }} + NFT_DIFF_ARGS: ${{ env.NFT_DIFF_ARGS }} + 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 d2891c02..5add772b 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,7 +14,7 @@ jobs: run-platform: name: Run AWS full tests # 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/pixelator' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' + if: github.repository == 'nf-core/pixelator' && 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: Set revision variable @@ -40,7 +40,7 @@ jobs: } profiles: test_full - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: Seqera Platform debug log file path: | diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 052d90a9..95cc749e 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -25,7 +25,7 @@ jobs: } profiles: test - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: Seqera Platform debug log file path: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 8b73af73..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,88 +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] - workflow_dispatch: - -env: - NXF_ANSI_LOG: false - NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity - NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity - -concurrency: - group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" - cancel-in-progress: true - -jobs: - test: - name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" - # 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/pixelator') }}" - runs-on: ubuntu-latest - strategy: - matrix: - NXF_VER: - - "24.04.2" - - "latest-everything" - profile: - - "conda" - - "docker" - - "singularity" - test_name: - - "test" - isMaster: - - ${{ github.base_ref == 'master' }} - # Exclude conda and singularity on dev - exclude: - - isMaster: false - profile: "conda" - - isMaster: false - profile: "singularity" - steps: - - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - with: - fetch-depth: 0 - - - name: Set up Nextflow - uses: nf-core/setup-nextflow@v2 - with: - version: "${{ matrix.NXF_VER }}" - - - name: Set up Apptainer - if: matrix.profile == 'singularity' - uses: eWaterCycle/setup-apptainer@main - - - name: Set up Singularity - if: matrix.profile == 'singularity' - run: | - mkdir -p $NXF_SINGULARITY_CACHEDIR - mkdir -p $NXF_SINGULARITY_LIBRARYDIR - - - name: Set up Miniconda - if: matrix.profile == 'conda' - uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 - with: - miniconda-version: "latest" - auto-update-conda: true - conda-solver: libmamba - channels: conda-forge,bioconda - - - name: Set up Conda - if: matrix.profile == 'conda' - run: | - echo $(realpath $CONDA)/condabin >> $GITHUB_PATH - echo $(realpath python) >> $GITHUB_PATH - - - name: Clean up Disk space - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" - continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} - run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 0b6b1f27..ac030fd5 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@5bef64f19d7facfb25b37b414482c7164d639639 # v9 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 ab06316e..999bcc38 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -12,14 +12,6 @@ on: required: true default: "dev" pull_request: - types: - - opened - - edited - - synchronize - branches: - - main - - master - pull_request_target: branches: - main - master @@ -52,9 +44,9 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" architecture: "x64" - name: Setup Apptainer @@ -120,6 +112,7 @@ jobs: 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 }} @@ -132,3 +125,10 @@ jobs: else echo "The pipeline can be downloaded successfully!" fi + + - name: Upload Nextflow logfile for debugging purposes + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + 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 96% rename from .github/workflows/fix-linting.yml rename to .github/workflows/fix_linting.yml index c13cea31..777ee611 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix_linting.yml @@ -32,9 +32,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" - name: Install pre-commit run: pip install pre-commit diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index dbd52d5a..f2d7d1dd 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -3,9 +3,6 @@ name: nf-core linting # 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] @@ -17,9 +14,9 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Set up Python 3.12 - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" - name: Install pre-commit run: pip install pre-commit @@ -36,13 +33,13 @@ jobs: - name: Install Nextflow uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: - python-version: "3.12" + python-version: "3.13" architecture: "x64" - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.1.0 + uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml @@ -74,7 +71,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 95b6b6af..7e8050fb 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@20319c5641d495c8a52e688b7dc5fada6c3a9fbc # v8 + uses: dawidd6/action-download-artifact@4c1e823582f43b179e2cbb49c3eade4e41f992e2 # v10 with: workflow: linting.yml workflow_conclusion: completed @@ -21,7 +21,7 @@ jobs: run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT - name: Post PR comment - uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ steps.pr_number.outputs.pr_number }} diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml new file mode 100644 index 00000000..f03aea0c --- /dev/null +++ b/.github/workflows/nf-test.yml @@ -0,0 +1,142 @@ +name: Run nf-test +on: + push: + paths-ignore: + - "docs/**" + - "**/meta.yml" + - "**/*.md" + - "**/*.png" + - "**/*.svg" + 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.2" + 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=$-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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + 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=$-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: + - "24.04.2" + - "latest-everything" + env: + NXF_ANSI_LOG: false + TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + with: + fetch-depth: 0 + + - name: Run nf-test + uses: ./.github/actions/nf-test + env: + NFT_DIFF: ${{ env.NFT_DIFF }} + NFT_DIFF_ARGS: ${{ env.NFT_DIFF_ARGS }} + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + with: + profile: ${{ matrix.profile }} + shard: ${{ matrix.shard }} + total_shards: ${{ env.TOTAL_SHARDS }} + confirm-pass: + needs: [nf-test] + if: always() + runs-on: # use self-hosted runners + - runs-on=$-confirm-pass + - runner=2cpu-linux-x64 + steps: + - name: One or more tests failed + 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: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner + if: always() + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 76a9e67e..4abaf484 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -30,7 +30,7 @@ jobs: bsky-post: runs-on: ubuntu-latest steps: - - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.0 + - uses: zentered/bluesky-post-action@4aa83560bb3eac05dbad1e5f221ee339118abdd2 # v0.2.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 similarity index 95% rename from .github/workflows/template_version_comment.yml rename to .github/workflows/template-version-comment.yml index 537529bc..beb5c77f 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template-version-comment.yml @@ -14,7 +14,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Read template version from .nf-core.yml - uses: nichmor/minimal-read-yaml@v0.0.2 + uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml diff --git a/.nf-core.yml b/.nf-core.yml index 1b537f15..c869d168 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,13 +1,13 @@ lint: - actions_ci: false files_exist: - assets/multiqc_config.yml - conf/igenomes.config - conf/igenomes_ignored.config files_unchanged: - assets/nf-core-pixelator_logo_light.png + - .github/PULL_REQUEST_TEMPLATE.md multiqc_config: false -nf_core_version: 3.2.1 +nf_core_version: 3.3.1 repository_type: pipeline template: author: Pixelgen Technologies AB @@ -21,4 +21,4 @@ template: - fastqc - multiqc - igenomes - version: 1.5.0dev + version: 2.0.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1dec8650..9d0b248d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,10 +4,24 @@ repos: hooks: - id: prettier additional_dependencies: - - prettier@3.2.5 - - - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "3.1.2" + - prettier@3.5.0 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 hooks: - - id: editorconfig-checker - alias: ec + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/nf-core/.*| + subworkflows/nf-core/.*| + .*\.snap$ + )$ + - id: end-of-file-fixer + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/nf-core/.*| + subworkflows/nf-core/.*| + .*\.snap$ + )$ diff --git a/.prettierrc.yml b/.prettierrc.yml index c81f9a76..07dbd8bb 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 2d500624..83bed6c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ 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). -## v1.5.0dev - [date] +## v2.0.0 - [date] Initial release of nf-core/pixelator, created with the [nf-core](https://nf-co.re/) template. diff --git a/README.md b/README.md index 539057b6..a9f87c3a 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,14 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/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/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.04.2-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-3.3.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.1) [![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/pixelator) -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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 @@ -28,7 +29,7 @@ --> + workflows use the "tube map" design for that. See https://nf-co.re/docs/guidelines/graphic_design/workflow_diagrams#examples for examples. --> ## Usage diff --git a/conf/base.config b/conf/base.config index 9029cad3..476423e9 100644 --- a/conf/base.config +++ b/conf/base.config @@ -15,7 +15,7 @@ process { 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) ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' @@ -59,4 +59,7 @@ process { errorStrategy = 'retry' maxRetries = 2 } + withLabel: process_gpu { + ext.use_gpu = { workflow.profile.contains('gpu') } + } } diff --git a/nextflow.config b/nextflow.config index d619a835..b8b2bb29 100644 --- a/nextflow.config +++ b/nextflow.config @@ -148,16 +148,25 @@ profiles { ] } } + 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' } } -// Load nf-core custom profiles from different Institutions -includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" +// 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/pixelator 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" + // Load nf-core/pixelator custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs -// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/pixelator.config" : "/dev/null" +// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/pixelator.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 @@ -230,13 +239,13 @@ manifest { mainScript = 'main.nf' defaultBranch = 'master' nextflowVersion = '!>=24.04.2' - version = '1.5.0dev' + version = '2.0.0' doi = '' } // Nextflow plugins plugins { - id 'nf-schema@2.2.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 00000000..889df760 --- /dev/null +++ b/nf-test.config @@ -0,0 +1,24 @@ +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/**/*', 'subworkflows/nf-core/**/*' + + // 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 'nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore' + + // load the necessary plugins + plugins { + load "nft-utils@0.0.3" + } +} diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index b585a016..11f2fe8e 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -21,9 +21,9 @@ { "@id": "./", "@type": "Dataset", - "creativeWorkStatus": "InProgress", - "datePublished": "2025-04-30T12:28:12+00:00", - "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/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/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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)\n\n## Introduction\n\n**nf-core/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n\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/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.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\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", + "creativeWorkStatus": "Stable", + "datePublished": "2025-06-03T11:01:47+00:00", + "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/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/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.04.2-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-3.3.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.1)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n\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/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.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\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" @@ -93,7 +93,7 @@ }, "mentions": [ { - "@id": "#16e6378e-c610-4e90-9521-3b3f7e80dc18" + "@id": "#0895c683-f0fb-4c11-9e1c-2b34ce657682" } ], "name": "nf-core/pixelator" @@ -122,7 +122,7 @@ } ], "dateCreated": "", - "dateModified": "2025-04-30T12:28:12Z", + "dateModified": "2025-06-03T11:01:47Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -142,8 +142,8 @@ "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/pixelator", "https://nf-co.re/pixelator/dev/"], - "version": ["1.5.0dev"] + "url": ["https://github.com/nf-core/pixelator", "https://nf-co.re/pixelator/2.0.0/"], + "version": ["2.0.0"] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -158,11 +158,11 @@ "version": "!>=24.04.2" }, { - "@id": "#16e6378e-c610-4e90-9521-3b3f7e80dc18", + "@id": "#0895c683-f0fb-4c11-9e1c-2b34ce657682", "@type": "TestSuite", "instance": [ { - "@id": "#7aa51786-df7c-4656-ba01-1fd8bd341186" + "@id": "#7dab22de-8732-49dd-b502-3f0cb2accb6f" } ], "mainEntity": { @@ -171,10 +171,10 @@ "name": "Test suite for nf-core/pixelator" }, { - "@id": "#7aa51786-df7c-4656-ba01-1fd8bd341186", + "@id": "#7dab22de-8732-49dd-b502-3f0cb2accb6f", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/pixelator", - "resource": "repos/nf-core/pixelator/actions/workflows/ci.yml", + "resource": "repos/nf-core/pixelator/actions/workflows/nf-test.yml", "runsOn": { "@id": "https://w3id.org/ro/terms/test#GithubService" }, diff --git a/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf b/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf index b115d73e..b2f97bbe 100644 --- a/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_pixelator_pipeline/main.nf @@ -219,4 +219,3 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } - diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 00000000..73eb92f7 --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,2 @@ +.DS_Store +pipeline_info/*.{html,json,txt,yml} diff --git a/tests/default.nf.test b/tests/default.nf.test new file mode 100644 index 00000000..9f3ae19d --- /dev/null +++ b/tests/default.nf.test @@ -0,0 +1,35 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + tag "pipeline" + + test("-profile test") { + + 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( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pixelator_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 00000000..0a0a201f --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,12 @@ +/* +======================================================================================== + 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/' +params.pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/pixelator' + +aws.client.anonymous = true // fixes S3 access issues on self-hosted runners From 52687c82d2c9ca62d243617705456fddcdb4f41e Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 24 Jun 2025 13:13:32 +0200 Subject: [PATCH 02/64] Update to pixelator 0.21.0 --- modules/local/collect_metadata/main.nf | 4 ++-- modules/local/pixelator/list_options/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/amplicon/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/analysis/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/annotate/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/collapse/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/demux/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/graph/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/layout/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/qc/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/report/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/amplicon/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/analysis/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/collapse/main.nf | 4 ++-- .../local/pixelator/single-cell-pna/combine_collapse/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/demux/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/graph/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/layout/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/report/main.nf | 4 ++-- 19 files changed, 38 insertions(+), 38 deletions(-) diff --git a/modules/local/collect_metadata/main.nf b/modules/local/collect_metadata/main.nf index 2685fb77..ca626c9c 100644 --- a/modules/local/collect_metadata/main.nf +++ b/modules/local/collect_metadata/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_COLLECT_METADATA { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" output: path "metadata.json", emit: metadata diff --git a/modules/local/pixelator/list_options/main.nf b/modules/local/pixelator/list_options/main.nf index 23ac82af..84d76250 100644 --- a/modules/local/pixelator/list_options/main.nf +++ b/modules/local/pixelator/list_options/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LIST_OPTIONS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" output: path "design_options.txt", emit: designs diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf index b104b506..dd512cd5 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_AMPLICON { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/analysis/main.nf b/modules/local/pixelator/single-cell-mpx/analysis/main.nf index c5a97dae..b2e9c327 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/main.nf +++ b/modules/local/pixelator/single-cell-mpx/analysis/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANALYSIS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/annotate/main.nf b/modules/local/pixelator/single-cell-mpx/annotate/main.nf index 079a82ec..c86988b7 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/main.nf +++ b/modules/local/pixelator/single-cell-mpx/annotate/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANNOTATE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(dataset), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/collapse/main.nf b/modules/local/pixelator/single-cell-mpx/collapse/main.nf index 968e34ab..bb990cd9 100644 --- a/modules/local/pixelator/single-cell-mpx/collapse/main.nf +++ b/modules/local/pixelator/single-cell-mpx/collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_COLLAPSE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/demux/main.nf b/modules/local/pixelator/single-cell-mpx/demux/main.nf index 4ef56c6f..e4a40548 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/main.nf +++ b/modules/local/pixelator/single-cell-mpx/demux/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_DEMUX { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/graph/main.nf b/modules/local/pixelator/single-cell-mpx/graph/main.nf index 3b9dcf02..e3c0eb56 100644 --- a/modules/local/pixelator/single-cell-mpx/graph/main.nf +++ b/modules/local/pixelator/single-cell-mpx/graph/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_GRAPH { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(edge_list) diff --git a/modules/local/pixelator/single-cell-mpx/layout/main.nf b/modules/local/pixelator/single-cell-mpx/layout/main.nf index 2c9079af..60ba2551 100644 --- a/modules/local/pixelator/single-cell-mpx/layout/main.nf +++ b/modules/local/pixelator/single-cell-mpx/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LAYOUT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/qc/main.nf b/modules/local/pixelator/single-cell-mpx/qc/main.nf index f96d1fef..310934af 100644 --- a/modules/local/pixelator/single-cell-mpx/qc/main.nf +++ b/modules/local/pixelator/single-cell-mpx/qc/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_QC { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/report/main.nf b/modules/local/pixelator/single-cell-mpx/report/main.nf index 774b2afc..b118d5f2 100644 --- a/modules/local/pixelator/single-cell-mpx/report/main.nf +++ b/modules/local/pixelator/single-cell-mpx/report/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_REPORT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/amplicon/main.nf b/modules/local/pixelator/single-cell-pna/amplicon/main.nf index 35cbe1b2..f6c5d089 100644 --- a/modules/local/pixelator/single-cell-pna/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-pna/amplicon/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_AMPLICON { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(reads, arity: '1..*') diff --git a/modules/local/pixelator/single-cell-pna/analysis/main.nf b/modules/local/pixelator/single-cell-pna/analysis/main.nf index 34459110..8ef47bac 100644 --- a/modules/local/pixelator/single-cell-pna/analysis/main.nf +++ b/modules/local/pixelator/single-cell-pna/analysis/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_ANALYSIS { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/collapse/main.nf b/modules/local/pixelator/single-cell-pna/collapse/main.nf index 306fd8a1..6c40d150 100644 --- a/modules/local/pixelator/single-cell-pna/collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/collapse/main.nf @@ -7,8 +7,8 @@ process PIXELATOR_PNA_COLLAPSE { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf index d9ba053a..fcbaa4e5 100644 --- a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_COMBINE_COLLAPSE { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(parquet_files, stageAs: "parquet/*"), path(json_report_files, stageAs: "reports/*") diff --git a/modules/local/pixelator/single-cell-pna/demux/main.nf b/modules/local/pixelator/single-cell-pna/demux/main.nf index ae0de739..bfc1fc61 100644 --- a/modules/local/pixelator/single-cell-pna/demux/main.nf +++ b/modules/local/pixelator/single-cell-pna/demux/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_DEMUX { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/graph/main.nf b/modules/local/pixelator/single-cell-pna/graph/main.nf index 7809e5eb..2608228a 100644 --- a/modules/local/pixelator/single-cell-pna/graph/main.nf +++ b/modules/local/pixelator/single-cell-pna/graph/main.nf @@ -4,8 +4,8 @@ process PIXELATOR_PNA_GRAPH { label 'process_long' container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(edge_list), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/layout/main.nf b/modules/local/pixelator/single-cell-pna/layout/main.nf index 46e624d5..c9934744 100644 --- a/modules/local/pixelator/single-cell-pna/layout/main.nf +++ b/modules/local/pixelator/single-cell-pna/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_LAYOUT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/report/main.nf b/modules/local/pixelator/single-cell-pna/report/main.nf index 1af02da8..335bbf94 100644 --- a/modules/local/pixelator/single-cell-pna/report/main.nf +++ b/modules/local/pixelator/single-cell-pna/report/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_REPORT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.20.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.20.1'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" input: tuple val(meta), path(panel_file), val(panel) From e3ec22f28f52ec19360be6141ba4e2a76ed848c8 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 24 Jun 2025 13:15:04 +0200 Subject: [PATCH 03/64] Update pixelator to 0.21.0 --- CHANGELOG.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c7765bd..6ae31cf3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,33 @@ 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). -## [[2.0.0](https://github.com/nf-core/pixelator/releases/tag/2.0.0)] - 2025-06-23 +## [[x.x.x](https://github.com/nf-core/pixelator/releases/tag/x.x.x)] - YYYY-MM-DD + +### Enhancements & fixes + +### Parameters + +| Old parameter | New parameter | +| ------------- | ------------- | +| | | + +> [!NOTE] +> Parameter has been **updated** if both old and new parameter information is present. +> Parameter has been **added** if just the new parameter information is present. +> Parameter has been **removed** if new parameter information isn't present. + +### Software dependencies + +| Dependency | Old version | New version | +| ----------- | ----------- | ----------- | +| `pixelator` | 0.20.1 | 0.21.0 | + +> [!NOTE] +> Dependency has been **updated** if both old and new parameter information is present. +> Dependency has been **added** if just the new parameter information is present. +> Dependency has been **removed** if new parameter information isn't present. + +## [[2.0.0](https://github.com/nf-core/pixelator/releases/tag/2.0.0)] - 2024-05-27 This release is a major update of the nf-core/pixelator pipeline. It brings in support for the Proximity Network Analysis (PNA) workflow in addition to the Molecular Pixelation (MPX) workflow. From 3fb32ecc20f657932b6fda7c5b14f87048b84822 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 24 Jun 2025 16:45:09 +0200 Subject: [PATCH 04/64] Bump pixelator version to 0.21.1 --- CHANGELOG.md | 2 +- modules/local/collect_metadata/main.nf | 4 ++-- modules/local/pixelator/list_options/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/amplicon/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/analysis/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/annotate/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/collapse/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/demux/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/graph/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/layout/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/qc/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/report/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/amplicon/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/analysis/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/collapse/main.nf | 4 ++-- .../local/pixelator/single-cell-pna/combine_collapse/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/demux/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/graph/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/layout/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/report/main.nf | 4 ++-- 20 files changed, 39 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ae31cf3..7bf44f88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Dependency | Old version | New version | | ----------- | ----------- | ----------- | -| `pixelator` | 0.20.1 | 0.21.0 | +| `pixelator` | 0.20.1 | 0.21.1 | > [!NOTE] > Dependency has been **updated** if both old and new parameter information is present. diff --git a/modules/local/collect_metadata/main.nf b/modules/local/collect_metadata/main.nf index ca626c9c..1286660c 100644 --- a/modules/local/collect_metadata/main.nf +++ b/modules/local/collect_metadata/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_COLLECT_METADATA { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" output: path "metadata.json", emit: metadata diff --git a/modules/local/pixelator/list_options/main.nf b/modules/local/pixelator/list_options/main.nf index 84d76250..8b205dbd 100644 --- a/modules/local/pixelator/list_options/main.nf +++ b/modules/local/pixelator/list_options/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LIST_OPTIONS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" output: path "design_options.txt", emit: designs diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf index dd512cd5..478fec92 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_AMPLICON { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/analysis/main.nf b/modules/local/pixelator/single-cell-mpx/analysis/main.nf index b2e9c327..d12cb4bd 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/main.nf +++ b/modules/local/pixelator/single-cell-mpx/analysis/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANALYSIS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/annotate/main.nf b/modules/local/pixelator/single-cell-mpx/annotate/main.nf index c86988b7..3032154c 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/main.nf +++ b/modules/local/pixelator/single-cell-mpx/annotate/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANNOTATE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(dataset), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/collapse/main.nf b/modules/local/pixelator/single-cell-mpx/collapse/main.nf index bb990cd9..6f8b6056 100644 --- a/modules/local/pixelator/single-cell-mpx/collapse/main.nf +++ b/modules/local/pixelator/single-cell-mpx/collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_COLLAPSE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/demux/main.nf b/modules/local/pixelator/single-cell-mpx/demux/main.nf index e4a40548..fabe85b7 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/main.nf +++ b/modules/local/pixelator/single-cell-mpx/demux/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_DEMUX { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/graph/main.nf b/modules/local/pixelator/single-cell-mpx/graph/main.nf index e3c0eb56..50c2a509 100644 --- a/modules/local/pixelator/single-cell-mpx/graph/main.nf +++ b/modules/local/pixelator/single-cell-mpx/graph/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_GRAPH { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(edge_list) diff --git a/modules/local/pixelator/single-cell-mpx/layout/main.nf b/modules/local/pixelator/single-cell-mpx/layout/main.nf index 60ba2551..c68ee5ad 100644 --- a/modules/local/pixelator/single-cell-mpx/layout/main.nf +++ b/modules/local/pixelator/single-cell-mpx/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LAYOUT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/qc/main.nf b/modules/local/pixelator/single-cell-mpx/qc/main.nf index 310934af..88ba05a4 100644 --- a/modules/local/pixelator/single-cell-mpx/qc/main.nf +++ b/modules/local/pixelator/single-cell-mpx/qc/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_QC { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/report/main.nf b/modules/local/pixelator/single-cell-mpx/report/main.nf index b118d5f2..25a398ea 100644 --- a/modules/local/pixelator/single-cell-mpx/report/main.nf +++ b/modules/local/pixelator/single-cell-mpx/report/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_REPORT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/amplicon/main.nf b/modules/local/pixelator/single-cell-pna/amplicon/main.nf index f6c5d089..7a318aec 100644 --- a/modules/local/pixelator/single-cell-pna/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-pna/amplicon/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_AMPLICON { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(reads, arity: '1..*') diff --git a/modules/local/pixelator/single-cell-pna/analysis/main.nf b/modules/local/pixelator/single-cell-pna/analysis/main.nf index 8ef47bac..28d0c179 100644 --- a/modules/local/pixelator/single-cell-pna/analysis/main.nf +++ b/modules/local/pixelator/single-cell-pna/analysis/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_ANALYSIS { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/collapse/main.nf b/modules/local/pixelator/single-cell-pna/collapse/main.nf index 6c40d150..ceb74515 100644 --- a/modules/local/pixelator/single-cell-pna/collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/collapse/main.nf @@ -7,8 +7,8 @@ process PIXELATOR_PNA_COLLAPSE { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf index fcbaa4e5..f83a2c70 100644 --- a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_COMBINE_COLLAPSE { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(parquet_files, stageAs: "parquet/*"), path(json_report_files, stageAs: "reports/*") diff --git a/modules/local/pixelator/single-cell-pna/demux/main.nf b/modules/local/pixelator/single-cell-pna/demux/main.nf index bfc1fc61..86f9c084 100644 --- a/modules/local/pixelator/single-cell-pna/demux/main.nf +++ b/modules/local/pixelator/single-cell-pna/demux/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_DEMUX { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/graph/main.nf b/modules/local/pixelator/single-cell-pna/graph/main.nf index 2608228a..9e5a9ad7 100644 --- a/modules/local/pixelator/single-cell-pna/graph/main.nf +++ b/modules/local/pixelator/single-cell-pna/graph/main.nf @@ -4,8 +4,8 @@ process PIXELATOR_PNA_GRAPH { label 'process_long' container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(edge_list), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/layout/main.nf b/modules/local/pixelator/single-cell-pna/layout/main.nf index c9934744..dbeb135b 100644 --- a/modules/local/pixelator/single-cell-pna/layout/main.nf +++ b/modules/local/pixelator/single-cell-pna/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_LAYOUT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/report/main.nf b/modules/local/pixelator/single-cell-pna/report/main.nf index 335bbf94..acf2ccd3 100644 --- a/modules/local/pixelator/single-cell-pna/report/main.nf +++ b/modules/local/pixelator/single-cell-pna/report/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_REPORT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.0' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.0'}" + ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' + : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" input: tuple val(meta), path(panel_file), val(panel) From 602fe36203baf191e1d157868d1b7989d1011425 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 26 Jun 2025 13:38:35 +0200 Subject: [PATCH 05/64] Update pixelator to 0.21.2 --- CHANGELOG.md | 5 ++++- modules/local/collect_metadata/main.nf | 4 ++-- modules/local/pixelator/list_options/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/amplicon/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/analysis/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/annotate/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/collapse/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/demux/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/graph/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/layout/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/qc/main.nf | 4 ++-- modules/local/pixelator/single-cell-mpx/report/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/amplicon/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/analysis/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/collapse/main.nf | 4 ++-- .../local/pixelator/single-cell-pna/combine_collapse/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/demux/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/graph/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/layout/main.nf | 4 ++-- modules/local/pixelator/single-cell-pna/report/main.nf | 4 ++-- 20 files changed, 42 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bf44f88..9384643c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements & fixes +- Move to using quay.io as the container source, to avoid issues with users needing to + login to access the Github Container Registry. + ### Parameters | Old parameter | New parameter | @@ -22,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Dependency | Old version | New version | | ----------- | ----------- | ----------- | -| `pixelator` | 0.20.1 | 0.21.1 | +| `pixelator` | 0.20.1 | 0.21.2 | > [!NOTE] > Dependency has been **updated** if both old and new parameter information is present. diff --git a/modules/local/collect_metadata/main.nf b/modules/local/collect_metadata/main.nf index 1286660c..298e78ef 100644 --- a/modules/local/collect_metadata/main.nf +++ b/modules/local/collect_metadata/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_COLLECT_METADATA { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" output: path "metadata.json", emit: metadata diff --git a/modules/local/pixelator/list_options/main.nf b/modules/local/pixelator/list_options/main.nf index 8b205dbd..fd3d8365 100644 --- a/modules/local/pixelator/list_options/main.nf +++ b/modules/local/pixelator/list_options/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LIST_OPTIONS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" output: path "design_options.txt", emit: designs diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf index 478fec92..a7d6ba88 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_AMPLICON { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/analysis/main.nf b/modules/local/pixelator/single-cell-mpx/analysis/main.nf index d12cb4bd..7086ab98 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/main.nf +++ b/modules/local/pixelator/single-cell-mpx/analysis/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANALYSIS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/annotate/main.nf b/modules/local/pixelator/single-cell-mpx/annotate/main.nf index 3032154c..2b1f4faf 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/main.nf +++ b/modules/local/pixelator/single-cell-mpx/annotate/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANNOTATE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(dataset), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/collapse/main.nf b/modules/local/pixelator/single-cell-mpx/collapse/main.nf index 6f8b6056..65a7e331 100644 --- a/modules/local/pixelator/single-cell-mpx/collapse/main.nf +++ b/modules/local/pixelator/single-cell-mpx/collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_COLLAPSE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/demux/main.nf b/modules/local/pixelator/single-cell-mpx/demux/main.nf index fabe85b7..7c45a6de 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/main.nf +++ b/modules/local/pixelator/single-cell-mpx/demux/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_DEMUX { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/graph/main.nf b/modules/local/pixelator/single-cell-mpx/graph/main.nf index 50c2a509..f9f6800b 100644 --- a/modules/local/pixelator/single-cell-mpx/graph/main.nf +++ b/modules/local/pixelator/single-cell-mpx/graph/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_GRAPH { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(edge_list) diff --git a/modules/local/pixelator/single-cell-mpx/layout/main.nf b/modules/local/pixelator/single-cell-mpx/layout/main.nf index c68ee5ad..e3ad15f0 100644 --- a/modules/local/pixelator/single-cell-mpx/layout/main.nf +++ b/modules/local/pixelator/single-cell-mpx/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LAYOUT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/qc/main.nf b/modules/local/pixelator/single-cell-mpx/qc/main.nf index 88ba05a4..a7cd513a 100644 --- a/modules/local/pixelator/single-cell-mpx/qc/main.nf +++ b/modules/local/pixelator/single-cell-mpx/qc/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_QC { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/report/main.nf b/modules/local/pixelator/single-cell-mpx/report/main.nf index 25a398ea..e4a31887 100644 --- a/modules/local/pixelator/single-cell-mpx/report/main.nf +++ b/modules/local/pixelator/single-cell-mpx/report/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_REPORT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/amplicon/main.nf b/modules/local/pixelator/single-cell-pna/amplicon/main.nf index 7a318aec..105fb373 100644 --- a/modules/local/pixelator/single-cell-pna/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-pna/amplicon/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_AMPLICON { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(reads, arity: '1..*') diff --git a/modules/local/pixelator/single-cell-pna/analysis/main.nf b/modules/local/pixelator/single-cell-pna/analysis/main.nf index 28d0c179..562cd6ef 100644 --- a/modules/local/pixelator/single-cell-pna/analysis/main.nf +++ b/modules/local/pixelator/single-cell-pna/analysis/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_ANALYSIS { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/collapse/main.nf b/modules/local/pixelator/single-cell-pna/collapse/main.nf index ceb74515..ccf4cbc2 100644 --- a/modules/local/pixelator/single-cell-pna/collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/collapse/main.nf @@ -7,8 +7,8 @@ process PIXELATOR_PNA_COLLAPSE { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf index f83a2c70..c0e7e783 100644 --- a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_COMBINE_COLLAPSE { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(parquet_files, stageAs: "parquet/*"), path(json_report_files, stageAs: "reports/*") diff --git a/modules/local/pixelator/single-cell-pna/demux/main.nf b/modules/local/pixelator/single-cell-pna/demux/main.nf index 86f9c084..ef88fb8d 100644 --- a/modules/local/pixelator/single-cell-pna/demux/main.nf +++ b/modules/local/pixelator/single-cell-pna/demux/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_DEMUX { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/graph/main.nf b/modules/local/pixelator/single-cell-pna/graph/main.nf index 9e5a9ad7..49e3b86b 100644 --- a/modules/local/pixelator/single-cell-pna/graph/main.nf +++ b/modules/local/pixelator/single-cell-pna/graph/main.nf @@ -4,8 +4,8 @@ process PIXELATOR_PNA_GRAPH { label 'process_long' container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(edge_list), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/layout/main.nf b/modules/local/pixelator/single-cell-pna/layout/main.nf index dbeb135b..cb5374cb 100644 --- a/modules/local/pixelator/single-cell-pna/layout/main.nf +++ b/modules/local/pixelator/single-cell-pna/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_LAYOUT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/report/main.nf b/modules/local/pixelator/single-cell-pna/report/main.nf index acf2ccd3..b30cd62c 100644 --- a/modules/local/pixelator/single-cell-pna/report/main.nf +++ b/modules/local/pixelator/single-cell-pna/report/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_REPORT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'ghcr.io/pixelgentechnologies/pixelator:0.21.1' - : 'ghcr.io/pixelgentechnologies/pixelator:0.21.1'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" input: tuple val(meta), path(panel_file), val(panel) From d73cb478c9b0a1b3c28534f3457cb5f1d15fa348 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 26 Jun 2025 13:39:43 +0200 Subject: [PATCH 06/64] Update test snapshots --- .../amplicon/tests/main.nf.test.snap | 8 ++++---- .../analysis/tests/main.nf.test.snap | 12 +++++------ .../annotate/tests/main.nf.test.snap | 14 ++++++------- .../collapse/tests/main.nf.test.snap | 8 ++++---- .../demux/tests/main.nf.test.snap | 20 +++++++++---------- .../graph/tests/main.nf.test.snap | 8 ++++---- .../layout/tests/main.nf.test.snap | 8 ++++---- .../qc/tests/main.nf.test.snap | 8 ++++---- .../report/tests/main.nf.test.snap | 14 ++++++------- .../analysis/tests/main.nf.test.snap | 6 +++--- .../collapse/tests/main.nf.test.snap | 12 +++++------ .../combine_collapse/tests/main.nf.test.snap | 6 +++--- .../demux/tests/main.nf.test.snap | 10 +++++----- .../graph/tests/main.nf.test.snap | 10 +++++----- .../report/tests/main.nf.test.snap | 6 +++--- .../generate_reports/tests/main.nf.test.snap | 14 ++++++------- .../local/pna/tests/main.nf.test.snap | 18 ++++++++--------- .../tests/main.function.nf.test.snap | 6 +++--- tests/save_all.nf.test.snap | 2 +- 19 files changed, 95 insertions(+), 95 deletions(-) diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap index 2d290ebb..df148761 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap @@ -39,7 +39,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-05-22T17:14:02.644424062" + "timestamp": "2025-06-26T11:47:48.878257782" }, "Test MPX amplicon - stub": { "content": [ @@ -89,7 +89,7 @@ ] ], "4": [ - "versions.yml:md5,ae1c0b9d6a279b22f0a6b4011b795f54" + "versions.yml:md5,112f60cfc338b74eedf7916c1c9cc8d0" ], "log": [ [ @@ -136,7 +136,7 @@ ] ], "versions": [ - "versions.yml:md5,ae1c0b9d6a279b22f0a6b4011b795f54" + "versions.yml:md5,112f60cfc338b74eedf7916c1c9cc8d0" ] } ], @@ -144,6 +144,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-05-22T17:13:19.244421007" + "timestamp": "2025-06-26T11:47:28.489102305" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap index f0cef13b..9f823e72 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap @@ -26,9 +26,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:09:46.871992381" + "timestamp": "2025-06-26T11:50:05.9291208" }, "pxl": { "content": [ @@ -103,7 +103,7 @@ ] ], "5": [ - "versions.yml:md5,cba752118838dc2eab39eca1d236fb9e" + "versions.yml:md5,21f7010150c44ce0f97dfe8a429047a1" ], "all_results": [ [ @@ -165,14 +165,14 @@ ] ], "versions": [ - "versions.yml:md5,cba752118838dc2eab39eca1d236fb9e" + "versions.yml:md5,21f7010150c44ce0f97dfe8a429047a1" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:06:37.407882678" + "timestamp": "2025-06-26T11:48:02.493689902" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap index e9ed6992..06a1c349 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap @@ -32,13 +32,13 @@ }, "pxl": { "content": [ - "metadata.json:md5,ac897f1995d7b8c3dc037e5bb0cf8026" + "metadata.json:md5,e76b6fc27e46ad184c9466af70964707" ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:10:43.651855906" + "timestamp": "2025-06-26T11:50:50.354921348" }, "Test MPX annotate - stub": { "content": [ @@ -103,7 +103,7 @@ ] ], "5": [ - "versions.yml:md5,362a461b413bba48ee271ac7c2c00644" + "versions.yml:md5,c9f01dab6f97bd11145a7e81ef32e930" ], "all_results": [ [ @@ -165,14 +165,14 @@ ] ], "versions": [ - "versions.yml:md5,362a461b413bba48ee271ac7c2c00644" + "versions.yml:md5,c9f01dab6f97bd11145a7e81ef32e930" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:10:06.901396439" + "timestamp": "2025-06-26T11:50:20.225789489" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap index 17f30810..0e88b070 100644 --- a/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap @@ -89,7 +89,7 @@ ] ], "4": [ - "versions.yml:md5,33ceab3376a4210ddbc799ac7a7ebe0e" + "versions.yml:md5,85c7963b2a468838af56848f81fdfc9a" ], "collapsed": [ [ @@ -136,14 +136,14 @@ ] ], "versions": [ - "versions.yml:md5,33ceab3376a4210ddbc799ac7a7ebe0e" + "versions.yml:md5,85c7963b2a468838af56848f81fdfc9a" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:11:14.246480277" + "timestamp": "2025-06-26T11:51:04.702563951" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap index 6e0368df..fbb09750 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap @@ -58,7 +58,7 @@ ] ], "5": [ - "versions.yml:md5,ae56fdfb0890b69ef107b2940c461b33" + "versions.yml:md5,cd0c54ca6e440d09fc572411f909a3c2" ], "failed": [ [ @@ -116,15 +116,15 @@ ] ], "versions": [ - "versions.yml:md5,ae56fdfb0890b69ef107b2940c461b33" + "versions.yml:md5,cd0c54ca6e440d09fc572411f909a3c2" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:12:03.324003268" + "timestamp": "2025-06-26T11:51:38.053562093" }, "Test MPX demux - SCSP v1 | Immunology-I": { "content": [ @@ -243,14 +243,14 @@ ] ], [ - "versions.yml:md5,ae56fdfb0890b69ef107b2940c461b33" + "versions.yml:md5,cd0c54ca6e440d09fc572411f909a3c2" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:12:31.35960066" + "timestamp": "2025-06-26T11:51:59.053951882" }, "report_json": { "content": [ @@ -261,7 +261,7 @@ 3 ], "cutadapt_version": "5.0", - "python_version": "3.11.12", + "python_version": "3.12.11", "cores": 16, "input": { "path1": "sample01_1k_pbmcs_scsp_v1_immunology1.processed.fastq.gz", @@ -2868,8 +2868,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:12:31.953138619" + "timestamp": "2025-06-24T17:01:00.835348309" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap index 847dad75..5a172b1b 100644 --- a/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap @@ -104,7 +104,7 @@ ] ], "5": [ - "versions.yml:md5,8f016aac4cad3146ab620ee43f18769e" + "versions.yml:md5,089da310eb4b534a7844ab771c93c35a" ], "all_results": [ [ @@ -166,14 +166,14 @@ ] ], "versions": [ - "versions.yml:md5,8f016aac4cad3146ab620ee43f18769e" + "versions.yml:md5,089da310eb4b534a7844ab771c93c35a" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:12:51.304782952" + "timestamp": "2025-06-26T11:52:11.627188377" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap index d955020d..759507a7 100644 --- a/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap @@ -103,7 +103,7 @@ ] ], "5": [ - "versions.yml:md5,8372f492411527afb668d03159f5cf2b" + "versions.yml:md5,6eb7476e297586ca6830d7eb7fa5c083" ], "all_results": [ [ @@ -165,14 +165,14 @@ ] ], "versions": [ - "versions.yml:md5,8372f492411527afb668d03159f5cf2b" + "versions.yml:md5,6eb7476e297586ca6830d7eb7fa5c083" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:13:34.808792997" + "timestamp": "2025-06-26T11:52:43.202829382" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap index 50be8215..29b66219 100644 --- a/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap @@ -97,7 +97,7 @@ ] ], "16": [ - "versions.yml:md5,e639f8b84132f6d23483d08dfc933599" + "versions.yml:md5,bdb6b9ae999e232953034e12b3835197" ], "2": [ [ @@ -382,14 +382,14 @@ ] ], "versions": [ - "versions.yml:md5,e639f8b84132f6d23483d08dfc933599" + "versions.yml:md5,bdb6b9ae999e232953034e12b3835197" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:14:33.70808719" + "timestamp": "2025-06-26T11:53:22.782634095" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap index ea71cc9e..cdb175d3 100644 --- a/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap @@ -25,7 +25,7 @@ ] ], "2": [ - "versions.yml:md5,60f4a660ecd6dce3dfb7943f258f40a5" + "versions.yml:md5,1e51a33962d1bfa5e856c80118f924f3" ], "log": [ [ @@ -50,27 +50,27 @@ ] ], "versions": [ - "versions.yml:md5,60f4a660ecd6dce3dfb7943f258f40a5" + "versions.yml:md5,1e51a33962d1bfa5e856c80118f924f3" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:15:36.810505624" + "timestamp": "2025-06-26T11:54:11.047723994" }, "Test MPX report - SCSP v1 | Immunology-I": { "content": [ null, [ - "versions.yml:md5,60f4a660ecd6dce3dfb7943f258f40a5" + "versions.yml:md5,1e51a33962d1bfa5e856c80118f924f3" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:16:03.182142967" + "timestamp": "2025-06-26T11:54:29.81524307" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap index b86c17b3..9c8a58ad 100644 --- a/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "versions": { "content": [ [ - "versions.yml:md5,2d1a07140a8b47a20120030ca937b17f" + "versions.yml:md5,cb111c2479c0716e77af331a52743451" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:21:57.156086276" + "timestamp": "2025-06-26T11:58:37.130668357" }, "report_json": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap index 10790556..f29458b2 100644 --- a/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap @@ -59,26 +59,26 @@ "versions": { "content": [ [ - "versions.yml:md5,bb0a7cb4ba82775da4724188e0adafaf" + "versions.yml:md5,c3ca37ec135b9455a855ff59c6ee8019" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:22:20.885778521" + "timestamp": "2025-06-26T11:59:00.136057252" }, "multi_versions": { "content": [ [ - "versions.yml:md5,bb0a7cb4ba82775da4724188e0adafaf" + "versions.yml:md5,c3ca37ec135b9455a855ff59c6ee8019" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:22:45.539202416" + "timestamp": "2025-06-26T11:59:21.486766006" }, "header": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap index f339bdbe..7fbe685c 100644 --- a/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap @@ -24,13 +24,13 @@ ] ], [ - "versions.yml:md5,1504b7b37e1e2aff46caec380024adc2" + "versions.yml:md5,5b7f60bcecd4a25456148724b21ae96e" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:23:09.893021534" + "timestamp": "2025-06-26T11:59:39.205308002" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test.snap index 749ae3e4..86df347e 100644 --- a/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test.snap @@ -129,15 +129,15 @@ "panel": "proxiome-immuno-155", "technology": "pna" }, - "PNA055_Sample07_filtered_S7.meta.json:md5,d1f57d2764f4dac79eee0f03860e4484" + "PNA055_Sample07_filtered_S7.meta.json:md5,e264dd4b88e2ef36d8af6640adbe79ac" ] ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.2" }, - "timestamp": "2025-03-20T10:45:20.481383302" + "timestamp": "2025-06-24T17:10:34.346405357" }, "metadata_json": { "content": [ @@ -149,7 +149,7 @@ "panel": "proxiome-immuno-155", "technology": "pna" }, - "PNA055_Sample07_filtered_S7.meta.json:md5,76e64fbe2518c5c56da1316c2e6afbd3" + "PNA055_Sample07_filtered_S7.meta.json:md5,2bd1ff0d69fc6584e455196d8805f587" ] ] ], @@ -157,6 +157,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-05-22T17:34:08.919733329" + "timestamp": "2025-06-24T17:09:59.60486159" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap index afabe882..c0cba433 100644 --- a/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "versions": { "content": [ [ - "versions.yml:md5,014a0d8870a21fc70b6025ee7813a4cd" + "versions.yml:md5,3233a3a62435cd2b7f758d666d88dbd1" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:25:29.63045379" + "timestamp": "2025-06-26T12:00:59.148872357" }, "report_json": { "content": [ @@ -21,7 +21,7 @@ "panel": "proxiome-immuno-155", "technology": "pna" }, - "PNA055_Sample07_filtered_S7.report.json:md5,25236e45949c32ce93506db00eda246a" + "PNA055_Sample07_filtered_S7.report.json:md5,8c7cfca24198dc8d0dd2fd9551c08b97" ] ] ], @@ -29,7 +29,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-05-22T17:35:26.902757909" + "timestamp": "2025-06-24T17:10:53.237758536" }, "metadata_json": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap index b75a655f..b178bac2 100644 --- a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap @@ -2,13 +2,13 @@ "versions": { "content": [ [ - "versions.yml:md5,42b1d77f0c9a9c714a0d736117873bc2" + ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:26:09.344032637" + "timestamp": "2025-06-24T17:11:13.0246077" } } \ No newline at end of file diff --git a/subworkflows/local/generate_reports/tests/main.nf.test.snap b/subworkflows/local/generate_reports/tests/main.nf.test.snap index cebbd9b9..98994b45 100644 --- a/subworkflows/local/generate_reports/tests/main.nf.test.snap +++ b/subworkflows/local/generate_reports/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "Test MPX Generate reports - SCSP v1 | Immunology-I": { "content": [ [ - "versions.yml:md5,13db40f3913afc717d4a5d9ea5b75a55" + "versions.yml:md5,60536960ed050075f961dfda9ebc5b63" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:30:27.935023389" + "timestamp": "2025-06-26T12:03:43.256650917" }, "Test MPX Generate reports - stub": { "content": [ @@ -26,7 +26,7 @@ ] ], "1": [ - "versions.yml:md5,13db40f3913afc717d4a5d9ea5b75a55" + "versions.yml:md5,60536960ed050075f961dfda9ebc5b63" ], "pixelator_reports": [ [ @@ -40,14 +40,14 @@ ] ], "versions": [ - "versions.yml:md5,13db40f3913afc717d4a5d9ea5b75a55" + "versions.yml:md5,60536960ed050075f961dfda9ebc5b63" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:29:57.329529017" + "timestamp": "2025-06-26T12:03:22.411914082" } } \ No newline at end of file diff --git a/subworkflows/local/pna/tests/main.nf.test.snap b/subworkflows/local/pna/tests/main.nf.test.snap index 2a756471..b35d2b6c 100644 --- a/subworkflows/local/pna/tests/main.nf.test.snap +++ b/subworkflows/local/pna/tests/main.nf.test.snap @@ -2,19 +2,19 @@ "versions": { "content": [ [ - "versions.yml:md5,008d461c0a873cba26e5acce42c5a30b", - "versions.yml:md5,3287aa1204587f64ea633234091d2858", - "versions.yml:md5,a472e3de71bcfc5aba6d8433c610762a", - "versions.yml:md5,b1e342fded9151f1ea3de7c3a3e1e27c", - "versions.yml:md5,bc1bd306f1ade35c060c42e383a59990", - "versions.yml:md5,cf4872baac4b98fbffa390aac56d3bbf", - "versions.yml:md5,d9f448e5ec1ad5a222482d2882c55193" + "versions.yml:md5,1940270b85b14a85f8a1e2c0cc4175c1", + "versions.yml:md5,1dd43496474a2059ddc33ff345a31e89", + "versions.yml:md5,30045858d998c6bda107080bc5fe7e7c", + "versions.yml:md5,3600aa4bba044df44d77a8ae00aa4c65", + "versions.yml:md5,c12c7c40e0b739debcbe762b4d77dc34", + "versions.yml:md5,de911a9e581de7e1788418f9e5b8a178", + "versions.yml:md5,faf4f6d15fed3e88e021eedb9302afdf" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:32:59.670096405" + "timestamp": "2025-06-26T13:19:58.903035975" } } \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap index e3f0baf4..25f2017f 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap @@ -4,10 +4,10 @@ "v9.9.9" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "25.04.2" }, - "timestamp": "2024-02-28T12:02:05.308243" + "timestamp": "2025-06-26T13:20:08.944676306" }, "Test Function checkCondaChannels": { "content": null, diff --git a/tests/save_all.nf.test.snap b/tests/save_all.nf.test.snap index fa38afd3..afbff090 100644 --- a/tests/save_all.nf.test.snap +++ b/tests/save_all.nf.test.snap @@ -209,6 +209,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-18T14:21:26.46401542" + "timestamp": "2025-06-26T13:37:49.716575906" } } \ No newline at end of file From 6d14f006e24a86f5d535a8bd10a879e9f0136e00 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 26 Jun 2025 14:09:46 +0200 Subject: [PATCH 07/64] Update report snapshot test --- .../pixelator/single-cell-pna/report/tests/main.nf.test.snap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap index b178bac2..4eaab316 100644 --- a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap @@ -2,13 +2,13 @@ "versions": { "content": [ [ - + "versions.yml:md5,277fdd55773113498ea1c9177f927674" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-24T17:11:13.0246077" + "timestamp": "2025-06-26T14:02:28.335957996" } } \ No newline at end of file From 86d93ee195a9d95fe2d2fd5f84e8e4bd09f8d8ae Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 26 Jun 2025 14:24:42 +0200 Subject: [PATCH 08/64] Adding denoise module --- .../pixelator/single-cell-pna/denoise/main.nf | 48 +++++++++++++++++ .../denoise/tests/main.nf.test | 41 +++++++++++++++ .../denoise/tests/main.nf.test.snap | 51 +++++++++++++++++++ .../single-cell-pna/denoise/tests/tags.yml | 2 + nextflow.config | 7 +++ nextflow_schema.json | 37 ++++++++++++++ 6 files changed, 186 insertions(+) create mode 100644 modules/local/pixelator/single-cell-pna/denoise/main.nf create mode 100644 modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test create mode 100644 modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap create mode 100644 modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml diff --git a/modules/local/pixelator/single-cell-pna/denoise/main.nf b/modules/local/pixelator/single-cell-pna/denoise/main.nf new file mode 100644 index 00000000..4de036d3 --- /dev/null +++ b/modules/local/pixelator/single-cell-pna/denoise/main.nf @@ -0,0 +1,48 @@ +process PIXELATOR_PNA_DENOISE { + tag "$meta.id" + label 'process_high' + + // TODO: Add conda + // conda "bioconda::pixelator=0.18.2" + + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' + : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + + input: + tuple val(meta), path(data) + + output: + tuple val(meta), path("denoise/*.pxl") , emit: pixelfile + tuple val(meta), path("denoise/*.report.json") , emit: report_json + tuple val(meta), path("denoise/*.meta.json") , emit: metadata_json + tuple val(meta), path("denoise/*") , emit: all_results + tuple val(meta), path("*pixelator-denoise.log") , emit: log + + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + + prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + + """ + pixelator \\ + --cores $task.cpus \\ + --log-file ${prefix}.pixelator-denoise.log \\ + --verbose \\ + single-cell-pna \\ + denoise \\ + --output . \\ + $args \\ + $data + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pixelator: \$(echo \$(pixelator --version 2>/dev/null) | sed 's/pixelator, version //g' ) + END_VERSIONS + """ +} diff --git a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test new file mode 100644 index 00000000..0e578682 --- /dev/null +++ b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test @@ -0,0 +1,41 @@ +nextflow_process { + + name "Test Process PIXELATOR_PNA_DENOISE" + script "../main.nf" + process "PIXELATOR_PNA_DENOISE" + tag "modules" + tag "pixelator" + tag "pixelator/pna" + tag "pixelator/single_cell_pna_denoise" + + test("PNA denoise - small test") { + when { + process { + """ + input[0] = [ + [ id:'PNA055_Sample07_filtered_S7', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ], + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.graph.pxl', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.metadata_json).match("metadata_json") }, + { + with (process.out.report_json) { + assert snapshot(path(get(0).get(1)).readLines()[0..5]).match("report_json") } + }, + { assert snapshot(process.out.versions).match("versions") }, + { + with (process.out.log) { + assert path(get(0).get(1)).readLines().last().contains("Finished pixelator denoise") + } + }, + ) + } + } +} + diff --git a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap new file mode 100644 index 00000000..b9f2b10e --- /dev/null +++ b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap @@ -0,0 +1,51 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,75e9df3e1d5df7d1b9b4c6d91dcf24eb" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.2" + }, + "timestamp": "2025-06-26T14:37:21.804526572" + }, + "report_json": { + "content": [ + [ + "{", + " \"sample_id\": \"PNA055_Sample07_filtered_S7\",", + " \"product_id\": \"single-cell-pna\",", + " \"report_type\": \"denoise\",", + " \"number_of_umis_removed\": null,", + " \"ratio_of_umis_removed\": null," + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.2" + }, + "timestamp": "2025-06-26T14:37:21.792507226" + }, + "metadata_json": { + "content": [ + [ + [ + { + "id": "PNA055_Sample07_filtered_S7", + "design": "pna-2", + "panel": "proxiome-immuno-155", + "technology": "pna" + }, + "PNA055_Sample07_filtered_S7.meta.json:md5,b99f0d153f6bef0df01904a4f473a150" + ] + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.2" + }, + "timestamp": "2025-06-26T14:37:21.763749492" + } +} \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml b/modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml new file mode 100644 index 00000000..4ca1a024 --- /dev/null +++ b/modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml @@ -0,0 +1,2 @@ +pixelator/single_cell_pna_denoise: + - modules/local/pixelator/single-cell-pna/denoise/** diff --git a/nextflow.config b/nextflow.config index 1b733dde..cbbdcd30 100644 --- a/nextflow.config +++ b/nextflow.config @@ -87,6 +87,7 @@ params { // skip options skip_report = false + skip_denoise = false skip_analysis = false skip_layout = false @@ -105,6 +106,7 @@ params { save_pna_demux_failed_reads = false save_pna_collapsed_reads = false save_pna_graph_pixelfile = false + save_pna_denoise_pixelfile = false save_pna_analysis_pixelfile = false // PNA amplicon @@ -137,6 +139,11 @@ params { pna_graph_graph_min_component_size_to_prune = 100 pna_graph_component_size_min_threshold = null + // PNA denoise + pna_denoise_run_one_core_graph_denoising = true + pna_denoise_pval_threshold = 0.05 + pna_denoise_inflate_factor = 1.5 + // PNA analysis pna_analysis_compute_proximity = true pna_analysis_proximity_nbr_of_permutations = 100 diff --git a/nextflow_schema.json b/nextflow_schema.json index 4355b2b5..a9b071d8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -511,6 +511,40 @@ } } }, + "pna_denoise_options": { + "title": "Options for pixelator denoise command.", + "type": "object", + "properties": { + "skip_denoise": { + "description": "Skip denoise step", + "type": "boolean" + }, + "save_pna_denoise_pixelfile": { + "fa_icon": "fas fa-save", + "type": "boolean", + "default": false, + "description": "Save the PXL dataset after the denoise stage.", + "help": "By default, the PXL file after denoise will not be saved to the results directory." + }, + "pna_denoise_run_one_core_graph_denoising": { + "description": "Activate the one-core graph denoising algorithm", + "type": "boolean", + "default": true + }, + "pna_denoise_pval_threshold": { + "type": "number", + "description": "The p-value threshold for the a marker to be considered significantly over-expressed in the one-core layer of a component", + "default": 0.05, + "minimum": 0.0 + }, + "pna_denoise_inflate_factor": { + "type": "number", + "description": "The inflate factor for the number of nodes from over-expressed markers to be removed from the one-core layer of a component", + "default": 1.5, + "minimum": 1.0 + } + } + }, "analysis_options": { "title": "Options for pixelator analysis command.", "type": "object", @@ -877,6 +911,9 @@ { "$ref": "#/$defs/pna_graph_options" }, + { + "$ref": "#/$defs/pna_denoise_options" + }, { "$ref": "#/$defs/annotate_options" }, From 90a53699ac00ebcca03bc5718c800c3f2d86442d Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 26 Jun 2025 14:57:35 +0200 Subject: [PATCH 09/64] Hook up denoise in the workflow --- .../pixelator/single-cell-pna/denoise/main.nf | 16 ++++++++++++++++ subworkflows/local/pna/main.nf | 11 ++++++++++- tests/default_pna.nf.test.snap | 18 ++++++++++++++---- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/modules/local/pixelator/single-cell-pna/denoise/main.nf b/modules/local/pixelator/single-cell-pna/denoise/main.nf index 4de036d3..ac933dab 100644 --- a/modules/local/pixelator/single-cell-pna/denoise/main.nf +++ b/modules/local/pixelator/single-cell-pna/denoise/main.nf @@ -45,4 +45,20 @@ process PIXELATOR_PNA_DENOISE { pixelator: \$(echo \$(pixelator --version 2>/dev/null) | sed 's/pixelator, version //g' ) END_VERSIONS """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + + """ + mkdir denoise + touch denoise/${prefix}.report.json + touch denoise/${prefix}.meta.json + touch denoise/${prefix}.pxl + touch ${prefix}.pixelator-denoise.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pixelator: \$(echo \$(pixelator --version 2>/dev/null) | sed 's/pixelator, version //g' ) + END_VERSIONS + """ } diff --git a/subworkflows/local/pna/main.nf b/subworkflows/local/pna/main.nf index 0576123a..fd0c0e6d 100644 --- a/subworkflows/local/pna/main.nf +++ b/subworkflows/local/pna/main.nf @@ -21,6 +21,7 @@ include { PIXELATOR_PNA_AMPLICON } from '../../../modules/local/pixelato include { PIXELATOR_PNA_DEMUX } from '../../../modules/local/pixelator/single-cell-pna/demux/main' include { PIXELATOR_PNA_COLLAPSE } from '../../../modules/local/pixelator/single-cell-pna/collapse/main' include { PIXELATOR_PNA_GRAPH } from '../../../modules/local/pixelator/single-cell-pna/graph/main' +include { PIXELATOR_PNA_DENOISE } from '../../../modules/local/pixelator/single-cell-pna/denoise/main' include { PIXELATOR_PNA_ANALYSIS } from '../../../modules/local/pixelator/single-cell-pna/analysis/main' include { PIXELATOR_PNA_COMBINE_COLLAPSE } from '../../../modules/local/pixelator/single-cell-pna/combine_collapse/main' include { PIXELATOR_PNA_LAYOUT } from '../../../modules/local/pixelator/single-cell-pna/layout/main' @@ -139,10 +140,18 @@ workflow PNA { ch_graph = PIXELATOR_PNA_GRAPH.out.pixelfile ch_versions = ch_versions.mix(PIXELATOR_PNA_GRAPH.out.versions.first()) + // + // MODULE: Run pixelator single-cell denoise + // + PIXELATOR_PNA_DENOISE ( ch_graph ) + ch_denoise = PIXELATOR_PNA_DENOISE.out.pixelfile + ch_versions = ch_versions.mix(PIXELATOR_PNA_DENOISE.out.versions.first()) + ch_denoise.dump(tag: "ch_denoise") + // // MODULE: Run pixelator single-cell analysis // - PIXELATOR_PNA_ANALYSIS(ch_graph) + PIXELATOR_PNA_ANALYSIS(ch_denoise) ch_analysis = PIXELATOR_PNA_ANALYSIS.out.pixelfile ch_versions = ch_versions.mix(PIXELATOR_PNA_ANALYSIS.out.versions.first()) diff --git a/tests/default_pna.nf.test.snap b/tests/default_pna.nf.test.snap index 71ee7451..ece544e1 100644 --- a/tests/default_pna.nf.test.snap +++ b/tests/default_pna.nf.test.snap @@ -1,7 +1,7 @@ { "Params: default - stub": { "content": [ - 9, + 10, [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", @@ -25,6 +25,10 @@ "pixelator/demux", "pixelator/demux/PNA055_Sample07_filtered_S7.meta.json", "pixelator/demux/PNA055_Sample07_filtered_S7.report.json", + "pixelator/denoise", + "pixelator/denoise/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/denoise/PNA055_Sample07_filtered_S7.pxl", + "pixelator/denoise/PNA055_Sample07_filtered_S7.report.json", "pixelator/graph", "pixelator/graph/PNA055_Sample07_filtered_S7.meta.json", "pixelator/graph/PNA055_Sample07_filtered_S7.report.json", @@ -34,6 +38,7 @@ "pixelator/logs", "pixelator/logs/PNA055_Sample07_filtered_S7", "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m1.part_000.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m2.part_000.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", @@ -50,11 +55,11 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-18T14:16:06.777952595" + "timestamp": "2025-06-26T14:55:25.549303183" }, "Params: default": { "content": [ - 9, + 10, [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", @@ -78,6 +83,10 @@ "pixelator/demux", "pixelator/demux/PNA055_Sample07_filtered_S7.meta.json", "pixelator/demux/PNA055_Sample07_filtered_S7.report.json", + "pixelator/denoise", + "pixelator/denoise/PNA055_Sample07_filtered_S7.denoised_graph.pxl", + "pixelator/denoise/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/denoise/PNA055_Sample07_filtered_S7.report.json", "pixelator/graph", "pixelator/graph/PNA055_Sample07_filtered_S7.meta.json", "pixelator/graph/PNA055_Sample07_filtered_S7.report.json", @@ -87,6 +96,7 @@ "pixelator/logs", "pixelator/logs/PNA055_Sample07_filtered_S7", "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-analysis.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-collapse.log", @@ -102,6 +112,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-18T14:15:24.670481367" + "timestamp": "2025-06-26T14:44:14.770992819" } } \ No newline at end of file From 9c76cf09a6004e7ff357c6e1d2767450dc980ed6 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 26 Jun 2025 15:00:27 +0200 Subject: [PATCH 10/64] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9384643c..bf0f4735 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements & fixes +- Add a denoise step to the PNA workflow, that cleans data between the graph and analysis steps. - Move to using quay.io as the container source, to avoid issues with users needing to login to access the Github Container Registry. From 41fe09a7508ecef5e84d2277158095362ecda5eb Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 26 Jun 2025 16:52:33 +0200 Subject: [PATCH 11/64] Fix test snapshot --- subworkflows/local/pna/tests/main.nf.test.snap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/pna/tests/main.nf.test.snap b/subworkflows/local/pna/tests/main.nf.test.snap index b35d2b6c..512e6d4d 100644 --- a/subworkflows/local/pna/tests/main.nf.test.snap +++ b/subworkflows/local/pna/tests/main.nf.test.snap @@ -6,6 +6,7 @@ "versions.yml:md5,1dd43496474a2059ddc33ff345a31e89", "versions.yml:md5,30045858d998c6bda107080bc5fe7e7c", "versions.yml:md5,3600aa4bba044df44d77a8ae00aa4c65", + "versions.yml:md5,70f4e761e87d8807946fffc5484a586c", "versions.yml:md5,c12c7c40e0b739debcbe762b4d77dc34", "versions.yml:md5,de911a9e581de7e1788418f9e5b8a178", "versions.yml:md5,faf4f6d15fed3e88e021eedb9302afdf" @@ -15,6 +16,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T13:19:58.903035975" + "timestamp": "2025-06-26T16:36:13.553649016" } } \ No newline at end of file From 57417d78ee91582a4e841b6c9b8784e4494f813e Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Fri, 27 Jun 2025 08:18:42 +0200 Subject: [PATCH 12/64] Add module configs for denoise --- conf/modules.pna.config | 126 +++++++++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 48 deletions(-) diff --git a/conf/modules.pna.config b/conf/modules.pna.config index a3b0f97e..7ec1ade0 100644 --- a/conf/modules.pna.config +++ b/conf/modules.pna.config @@ -14,111 +14,108 @@ process { withName: PIXELATOR_PNA_AMPLICON { - ext.args = { [ + ext.args = { + [ "--design ${meta.design}", - params.pna_amplicon_mismatches ? "--mismatches ${params.pna_amplicon_mismatches}": '', - params.pna_amplicon_remove_polyg ? "--remove-polyg": '', - params.pna_amplicon_quality_cutoff ? "--quality-cutoff ${params.pna_amplicon_quality_cutoff}": '', + params.pna_amplicon_mismatches ? "--mismatches ${params.pna_amplicon_mismatches}" : '', + params.pna_amplicon_remove_polyg ? "--remove-polyg" : '', + params.pna_amplicon_quality_cutoff ? "--quality-cutoff ${params.pna_amplicon_quality_cutoff}" : '', ].join(' ').trim() } - publishDir = [ [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: 'amplicon/*.amplicon.fq.zst', - saveAs: { (params.save_pna_amplicon_reads || params.save_all) ? it : null } + saveAs: { params.save_pna_amplicon_reads || params.save_all ? it : null }, ], [ path: { "${params.outdir}/pixelator/logs/${meta.id}" }, mode: params.publish_dir_mode, - pattern: "*.log" + pattern: "*.log", ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: '**/*.{report,meta}.json', - saveAs: { params.save_json || params.save_all ? it : null } - ] + saveAs: { params.save_json || params.save_all ? it : null }, + ], ] } withName: PIXELATOR_PNA_DEMUX { - ext.args = { + ext.args = { [ - (params.pna_demux_mismatches instanceof Integer) ? "--mismatches ${params.pna_demux_mismatches}": '', - params.pna_demux_output_chunk_reads ? "--output-chunk-reads ${params.pna_demux_output_chunk_reads}": '', - (params.pna_demux_output_max_chunks != null) ? "--output-max-chunks ${params.pna_demux_output_max_chunks}": '', + params.pna_demux_mismatches instanceof Integer ? "--mismatches ${params.pna_demux_mismatches}" : '', + params.pna_demux_output_chunk_reads ? "--output-chunk-reads ${params.pna_demux_output_chunk_reads}" : '', + params.pna_demux_output_max_chunks != null ? "--output-max-chunks ${params.pna_demux_output_max_chunks}" : '', "--strategy ${params.pna_demux_strategy}", ].join(' ').trim() } - publishDir = [ [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: 'demux/*.parquet', - saveAs: { (params.save_pna_demux_parquet || params.save_all) ? it : null } + saveAs: { params.save_pna_demux_parquet || params.save_all ? it : null }, ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: 'demux/*.demux.passed.fq.zst', - saveAs: { (params.save_pna_demux_passed_reads || params.save_all) ? it : null } + saveAs: { params.save_pna_demux_passed_reads || params.save_all ? it : null }, ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: 'demux/*.demux.failed.fq.zst', - saveAs: { (params.save_pna_demux_failed_reads || params.save_all) ? it : null } + saveAs: { params.save_pna_demux_failed_reads || params.save_all ? it : null }, ], [ path: { "${params.outdir}/pixelator/logs/${meta.id}" }, mode: params.publish_dir_mode, - pattern: '*.log' + pattern: '*.log', ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: '**/*.{report,meta}.json', - saveAs: { params.save_json || params.save_all ? it : null } - ] + saveAs: { params.save_json || params.save_all ? it : null }, + ], ] } withName: PIXELATOR_PNA_COLLAPSE { - ext.args = { + ext.args = { [ params.pna_collapse_mismatches ? "--mismatches ${params.pna_collapse_mismatches}" : '', - params.pna_collapse_algorithm ? "--algorithm ${params.pna_collapse_algorithm}": '', + params.pna_collapse_algorithm ? "--algorithm ${params.pna_collapse_algorithm}" : '', ].join(' ').trim() } - publishDir = [ [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: 'collapse/*.parquet', - saveAs: { (params.save_collapsed_reads || params.save_all) ? it : null } + saveAs: { params.save_collapsed_reads || params.save_all ? it : null }, ], [ path: { "${params.outdir}/pixelator/logs/${meta.id}" }, mode: params.publish_dir_mode, - pattern: '*.log' + pattern: '*.log', ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: '**/*.{report,meta}.json', - saveAs: { params.save_json || params.save_all ? it : null } - ] + saveAs: { params.save_json || params.save_all ? it : null }, + ], ] } withName: PIXELATOR_PNA_GRAPH { - ext.args = { + ext.args = { [ - params.pna_graph_multiplet_recovery ? "--multiplet-recovery" : '', params.pna_graph_leiden_iterations ? "--leiden-iterations ${params.pna_graph_leiden_iterations}" : '', params.pna_graph_initial_stage_leiden_resolution ? "--initial-stage-leiden-resolution ${params.pna_graph_initial_stage_leiden_resolution}" : '', @@ -134,32 +131,67 @@ process { params.pna_graph_component_size_min_threshold ? "--component-size-min-threshold ${params.pna_graph_component_size_min_threshold}" : '', ].join(' ').trim() } - publishDir = [ [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: 'graph/*.pxl', - saveAs: { (params.save_pna_graph_pixelfile || params.save_all) ? it : null } + saveAs: { params.save_pna_graph_pixelfile || params.save_all ? it : null }, ], [ path: { "${params.outdir}/pixelator/logs/${meta.id}" }, mode: params.publish_dir_mode, - pattern: '*.log' + pattern: '*.log', ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: '**/*.{report,meta}.json', - saveAs: { params.save_json || params.save_all ? it : null } - ] + saveAs: { params.save_json || params.save_all ? it : null }, + ], ] } + withName: PIXELATOR_PNA_DENOISE { + ext.when = { !params.skip_denoise } + ext.args = { + [ + params.pna_denoise_run_one_core_graph_denoising ? "--run-one-core-graph-denoising" : '', + params.pna_denoise_pval_threshold ? "--pval-threshold ${params.pna_denoise_pval_threshold}" : '', + params.pna_denoise_inflate_factor ? "--inflate-factor ${params.pna_denoise_inflate_factor}" : '', + ].join(' ').trim() + } + publishDir = [ + [ + path: { "${params.outdir}/pixelator" }, + mode: params.publish_dir_mode, + pattern: 'denoise/*.pxl', + saveAs: { + if (params.save_pna_denoise_pixelfile || params.save_pna_all) { + return it + } + return null + }, + ], + [ + path: { "${params.outdir}/pixelator/logs/${meta.id}" }, + mode: params.publish_dir_mode, + pattern: '*.log', + ], + [ + path: { "${params.outdir}/pixelator" }, + mode: params.publish_dir_mode, + pattern: '**/*.{report,meta}.json', + saveAs: { params.save_json || params.save_pna_all ? it : null }, + ], + ] + } + + withName: PIXELATOR_PNA_ANALYSIS { - ext.when = { !params.skip_analysis } - ext.args = { + ext.when = { !params.skip_analysis } + ext.args = { [ params.pna_analysis_compute_proximity ? "--compute-proximity" : '', params.pna_analysis_proximity_nbr_of_permutations ? "--proximity-nbr-of-permutations ${params.pna_analysis_proximity_nbr_of_permutations}" : '', @@ -168,7 +200,6 @@ process { params.pna_analysis_svd_nbr_of_pivots ? "--svd-nbr-of-pivots ${params.pna_analysis_svd_nbr_of_pivots}" : '', ].join(' ').trim() } - publishDir = [ [ path: { "${params.outdir}/pixelator" }, @@ -179,25 +210,25 @@ process { return it } return null - } + }, ], [ path: { "${params.outdir}/pixelator/logs/${meta.id}" }, mode: params.publish_dir_mode, - pattern: '*.log' + pattern: '*.log', ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: '**/*.{report,meta}.json', - saveAs: { params.save_json || params.save_all ? it : null } - ] + saveAs: { params.save_json || params.save_all ? it : null }, + ], ] } withName: PIXELATOR_PNA_LAYOUT { - ext.when = { !params.skip_layout } - ext.args = { + ext.when = { !params.skip_layout } + ext.args = { [ params.pna_layout_no_node_marker_counts ? "--no-node-marker-counts" : '', params.pna_layout_layout_algorithm ? "--layout-algorithm ${params.pna_layout_layout_algorithm} " : '', @@ -205,7 +236,6 @@ process { params.pna_layout_wpmds_k ? "--wpmds-k ${params.pna_layout_wpmds_k} " : '', ].join(' ').trim() } - publishDir = [ [ path: { "${params.outdir}/pixelator" }, @@ -214,19 +244,19 @@ process { saveAs: { // Trim the annotate directory prefix from the output name new File(it).name - } + }, ], [ path: { "${params.outdir}/pixelator/logs/${meta.id}" }, mode: params.publish_dir_mode, - pattern: '*.log' + pattern: '*.log', ], [ path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: '**/*.{report,meta}.json', - saveAs: { params.save_json || params.save_all ? it : null } - ] + saveAs: { params.save_json || params.save_all ? it : null }, + ], ] } } From f2e4d850303f3837d218eae1a202e8be3b15ace6 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 30 Jun 2025 10:28:45 +0200 Subject: [PATCH 13/64] Update snapshots and add tags --- .../single-cell-pna/amplicon/tests/main.nf.test.snap | 4 ++-- .../single-cell-pna/denoise/tests/main.nf.test.snap | 12 ++++++------ subworkflows/local/pna/tests/main.nf.test.snap | 2 +- tests/default_pna.nf.test | 3 +++ tests/default_pna.nf.test.snap | 10 ++++------ 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test.snap index 52bc1bdf..a002e09d 100644 --- a/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test.snap @@ -9,7 +9,7 @@ "panel": "proxiome-immuno-155", "technology": "pna" }, - "PNA055_Sample07_filtered_S7.amplicon.fq.zst:md5,0a72e445b3899ca4aece43f2baa13e70" + "PNA055_Sample07_filtered_S7.amplicon.fq.zst:md5,460f0dd9af7c5ebec8bcad76e3964b7d" ] ] ], @@ -17,7 +17,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-18T13:24:23.05558255" + "timestamp": "2025-06-27T08:26:22.987687656" }, "report_json": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap index b9f2b10e..c06b6e53 100644 --- a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap @@ -9,7 +9,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T14:37:21.804526572" + "timestamp": "2025-06-27T14:53:31.633773358" }, "report_json": { "content": [ @@ -18,15 +18,15 @@ " \"sample_id\": \"PNA055_Sample07_filtered_S7\",", " \"product_id\": \"single-cell-pna\",", " \"report_type\": \"denoise\",", - " \"number_of_umis_removed\": null,", - " \"ratio_of_umis_removed\": null," + " \"number_of_umis_removed\": 599,", + " \"ratio_of_umis_removed\": 0.019271604143877484," ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T14:37:21.792507226" + "timestamp": "2025-06-27T14:53:31.61894306" }, "metadata_json": { "content": [ @@ -38,7 +38,7 @@ "panel": "proxiome-immuno-155", "technology": "pna" }, - "PNA055_Sample07_filtered_S7.meta.json:md5,b99f0d153f6bef0df01904a4f473a150" + "PNA055_Sample07_filtered_S7.meta.json:md5,d0728a1efc25964039497c7bc22cdc35" ] ] ], @@ -46,6 +46,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T14:37:21.763749492" + "timestamp": "2025-06-27T14:53:31.58914569" } } \ No newline at end of file diff --git a/subworkflows/local/pna/tests/main.nf.test.snap b/subworkflows/local/pna/tests/main.nf.test.snap index 512e6d4d..05cee6bd 100644 --- a/subworkflows/local/pna/tests/main.nf.test.snap +++ b/subworkflows/local/pna/tests/main.nf.test.snap @@ -16,6 +16,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T16:36:13.553649016" + "timestamp": "2025-06-30T09:49:15.273354252" } } \ No newline at end of file diff --git a/tests/default_pna.nf.test b/tests/default_pna.nf.test index 7321bee7..d1ce86ca 100644 --- a/tests/default_pna.nf.test +++ b/tests/default_pna.nf.test @@ -3,6 +3,9 @@ nextflow_pipeline { name "Test PNA pipeline with default settings" script "../main.nf" + tag "pixelator" + tag "pixelator/pna" + test("Params: default") { when { diff --git a/tests/default_pna.nf.test.snap b/tests/default_pna.nf.test.snap index ece544e1..350b64d8 100644 --- a/tests/default_pna.nf.test.snap +++ b/tests/default_pna.nf.test.snap @@ -27,7 +27,6 @@ "pixelator/demux/PNA055_Sample07_filtered_S7.report.json", "pixelator/denoise", "pixelator/denoise/PNA055_Sample07_filtered_S7.meta.json", - "pixelator/denoise/PNA055_Sample07_filtered_S7.pxl", "pixelator/denoise/PNA055_Sample07_filtered_S7.report.json", "pixelator/graph", "pixelator/graph/PNA055_Sample07_filtered_S7.meta.json", @@ -38,12 +37,12 @@ "pixelator/logs", "pixelator/logs/PNA055_Sample07_filtered_S7", "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", - "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m1.part_000.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m2.part_000.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-analysis.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-demux.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-graph.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log" ], @@ -55,7 +54,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T14:55:25.549303183" + "timestamp": "2025-06-30T10:19:04.37457545" }, "Params: default": { "content": [ @@ -84,7 +83,6 @@ "pixelator/demux/PNA055_Sample07_filtered_S7.meta.json", "pixelator/demux/PNA055_Sample07_filtered_S7.report.json", "pixelator/denoise", - "pixelator/denoise/PNA055_Sample07_filtered_S7.denoised_graph.pxl", "pixelator/denoise/PNA055_Sample07_filtered_S7.meta.json", "pixelator/denoise/PNA055_Sample07_filtered_S7.report.json", "pixelator/graph", @@ -96,11 +94,11 @@ "pixelator/logs", "pixelator/logs/PNA055_Sample07_filtered_S7", "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", - "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-analysis.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-demux.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-graph.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log" ], @@ -112,6 +110,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T14:44:14.770992819" + "timestamp": "2025-06-30T10:18:15.042376101" } } \ No newline at end of file From e15408e5aaebadc03cf3c3c33637a81e178a246c Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 30 Jun 2025 10:49:53 +0200 Subject: [PATCH 14/64] Add denoise to output docs --- docs/output.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index f9a5044e..eafe8d17 100644 --- a/docs/output.md +++ b/docs/output.md @@ -26,6 +26,7 @@ The PNA pipeline consists of the following steps: - [Demultiplexing](#demultiplexing) - [Molecule collapsing and error correction](#molecule-collapsing-and-error-correction) - [Graph construction](#graph-construction) +- [Denoising](#denoising) - [Analysis](#analysis) - [Layout creation](#compute-layouts-for-visualization) - [Report generation](#report-generation) @@ -123,7 +124,7 @@ the [pixelator documentation](https://software.pixelgen.com/pixelator/outputs/px - `graph` - - `.graph.pxl`: Edge list dataframe after recovering technical multiplets. + - `.graph.pxl`: The pixel file containing all data after resolving multiplets. - `.meta.json`: Command invocation metadata. - `.report.json`: QC metrics for the graph step. @@ -132,6 +133,32 @@ the [pixelator documentation](https://software.pixelgen.com/pixelator/outputs/px +### Denoising + +This step uses the `pixelator single-cell-pna denoise` command. It will try to find differences between +the well-connected parts of each component graph and the less well-connected parts of the graph. It will +then try to find differences in marker profiles between these two parts of the graph and use these +differences to denoise the graph. This reduces the effect of marker bleed-over due to incorrect cutting +in the graph step. + +The denoised graph will be saved as a new PXL file. + +
+Output files + +- `pixelator` + + - `denoise` + + - `.denoise.pxl`: The pixel file containing the denoised data. + - `.meta.json`: Command invocation metadata. + - `.report.json`: QC metrics for the graph step. + + - `logs` + - `.pixelator-denoise.log`: pixelator log output. + +
+ ### Analysis This step uses the `pixelator single-cell-pna analysis` command to calculate spatial statistics. From 882e6705b3cb151e917d578ec9d7f4e428d5094a Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 30 Jun 2025 11:11:46 +0200 Subject: [PATCH 15/64] Apply suggestions from code review Co-authored-by: Florian De Temmerman <69114541+fbdtemme@users.noreply.github.com> --- subworkflows/local/pna/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/pna/main.nf b/subworkflows/local/pna/main.nf index fd0c0e6d..ac2d3c6d 100644 --- a/subworkflows/local/pna/main.nf +++ b/subworkflows/local/pna/main.nf @@ -146,12 +146,12 @@ workflow PNA { PIXELATOR_PNA_DENOISE ( ch_graph ) ch_denoise = PIXELATOR_PNA_DENOISE.out.pixelfile ch_versions = ch_versions.mix(PIXELATOR_PNA_DENOISE.out.versions.first()) - ch_denoise.dump(tag: "ch_denoise") // // MODULE: Run pixelator single-cell analysis // - PIXELATOR_PNA_ANALYSIS(ch_denoise) + ch_analysis_input = params.skip_denoise ? ch_graph : ch_denoise + PIXELATOR_PNA_ANALYSIS(ch_analysis_input) ch_analysis = PIXELATOR_PNA_ANALYSIS.out.pixelfile ch_versions = ch_versions.mix(PIXELATOR_PNA_ANALYSIS.out.versions.first()) From 2333cc9703fe3fb135fe153676e333ee3e53fcdd Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 30 Jun 2025 11:13:00 +0200 Subject: [PATCH 16/64] Remove deprecated tags.yml file --- modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml diff --git a/modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml b/modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml deleted file mode 100644 index 4ca1a024..00000000 --- a/modules/local/pixelator/single-cell-pna/denoise/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -pixelator/single_cell_pna_denoise: - - modules/local/pixelator/single-cell-pna/denoise/** From 6bfaf9c2b7acc4c54354d606fff330fd33af58b7 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 30 Jun 2025 11:41:58 +0200 Subject: [PATCH 17/64] Update README and metromap --- README.md | 7 +- docs/images/nf-core-pixelator-metromap.svg | 261 ++++++++++++--------- 2 files changed, 149 insertions(+), 119 deletions(-) diff --git a/README.md b/README.md index 3c3951a3..1dfab06b 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,10 @@ For PNA data, the pipeline will run the following steps: 2. Create groups of amplicons based on their marker assignments ([`pixelator single-cell-pna demux`](https://github.com/PixelgenTechnologies/pixelator)) 3. Derive original molecules to use as edge list downstream by error correcting, and counting input amplicons ([`pixelator single-cell-pna collapse`](https://github.com/PixelgenTechnologies/pixelator)) 4. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-pna graph`](https://github.com/PixelgenTechnologies/pixelator)) -5. Analyze the spatial information in the cell graphs ([`pixelator single-cell-pna analysis`](https://github.com/PixelgenTechnologies/pixelator)) -6. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-pna layout`](https://github.com/PixelgenTechnologies/pixelator)) -7. Report generation ([`pixelator single-cell-pna report`](https://github.com/PixelgenTechnologies/pixelator)) +5. Denoise the cell graphs ([`pixelator single-cell-pna denoise`](https://github.com/PixelgenTechnologies/pixelator)) +6. Analyze the spatial information in the cell graphs ([`pixelator single-cell-pna analysis`](https://github.com/PixelgenTechnologies/pixelator)) +7. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-pna layout`](https://github.com/PixelgenTechnologies/pixelator)) +8. Report generation ([`pixelator single-cell-pna report`](https://github.com/PixelgenTechnologies/pixelator)) For MPX data, the pipeline will run the following steps: diff --git a/docs/images/nf-core-pixelator-metromap.svg b/docs/images/nf-core-pixelator-metromap.svg index 4ce4019a..4f7691c2 100644 --- a/docs/images/nf-core-pixelator-metromap.svg +++ b/docs/images/nf-core-pixelator-metromap.svg @@ -1,21 +1,21 @@ - + - + - + - - - - + + + + - + @@ -23,18 +23,18 @@ - + - + - + - + @@ -64,8 +64,9 @@ - - + + + @@ -83,9 +84,9 @@ - - - + + + @@ -113,7 +114,7 @@ - + @@ -121,20 +122,23 @@ - + + + + - - + + - + - - + + @@ -142,31 +146,38 @@ - + - + - + - + + + + + + + + - + - + - - + + - + @@ -178,10 +189,10 @@ - + - + @@ -190,7 +201,7 @@ - + @@ -199,19 +210,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -219,209 +230,227 @@ - + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + From 7fcd4c0ecd283669e77b8bbb1e5c1ff2520e1fbb Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Wed, 2 Jul 2025 10:07:06 +0200 Subject: [PATCH 18/64] Fix PNA reports not running --- CHANGELOG.md | 1 + subworkflows/local/pna/generate_reports.nf | 9 +++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf0f4735..a418da9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add a denoise step to the PNA workflow, that cleans data between the graph and analysis steps. - Move to using quay.io as the container source, to avoid issues with users needing to login to access the Github Container Registry. +- Fix the PNA report not being generated. ### Parameters diff --git a/subworkflows/local/pna/generate_reports.nf b/subworkflows/local/pna/generate_reports.nf index a8d6a515..0b27afaf 100644 --- a/subworkflows/local/pna/generate_reports.nf +++ b/subworkflows/local/pna/generate_reports.nf @@ -58,14 +58,11 @@ workflow PNA_GENERATE_REPORTS { // [ // meta, panel_files, // [amplicon files...], - // [preqc files...], - // [adapterqc files...], // [demux files...], // [collapse files...], - // [cluster files], - // [annotate files...], + // [graph files], // [analysis files...] - // [post analysis files...] + // [layout files...], // ], // [ same structure repeated for each sample ] // ] @@ -78,7 +75,7 @@ workflow PNA_GENERATE_REPORTS { .concat(ch_graph_col) .concat(ch_analysis_col) .concat(ch_layout_col) - .groupTuple(size: 9) + .groupTuple(size: 8) // // Split up everything per stage so we can recreate the expected directory structure for From 6cf70df7f3b3a9dc0e20d678c7e1c332b9c1ab9b Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Wed, 2 Jul 2025 11:29:16 +0200 Subject: [PATCH 19/64] Update snapshots --- subworkflows/local/pna/tests/main.nf.test.snap | 3 ++- tests/default_pna.nf.test.snap | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/pna/tests/main.nf.test.snap b/subworkflows/local/pna/tests/main.nf.test.snap index 05cee6bd..e237760e 100644 --- a/subworkflows/local/pna/tests/main.nf.test.snap +++ b/subworkflows/local/pna/tests/main.nf.test.snap @@ -8,6 +8,7 @@ "versions.yml:md5,3600aa4bba044df44d77a8ae00aa4c65", "versions.yml:md5,70f4e761e87d8807946fffc5484a586c", "versions.yml:md5,c12c7c40e0b739debcbe762b4d77dc34", + "versions.yml:md5,c83065ff66c109dabfbd7513ae4df588", "versions.yml:md5,de911a9e581de7e1788418f9e5b8a178", "versions.yml:md5,faf4f6d15fed3e88e021eedb9302afdf" ] @@ -16,6 +17,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-30T09:49:15.273354252" + "timestamp": "2025-07-02T10:53:52.480455498" } } \ No newline at end of file diff --git a/tests/default_pna.nf.test.snap b/tests/default_pna.nf.test.snap index 350b64d8..5e7daee4 100644 --- a/tests/default_pna.nf.test.snap +++ b/tests/default_pna.nf.test.snap @@ -1,7 +1,7 @@ { "Params: default - stub": { "content": [ - 10, + 11, [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", @@ -37,6 +37,7 @@ "pixelator/logs", "pixelator/logs/PNA055_Sample07_filtered_S7", "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-report.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m1.part_000.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m2.part_000.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", @@ -44,7 +45,9 @@ "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-demux.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-graph.log", - "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log" + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log", + "pixelator/report", + "pixelator/report/PNA055_Sample07_filtered_S7.report.html" ], [ @@ -54,11 +57,11 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-30T10:19:04.37457545" + "timestamp": "2025-07-02T11:05:22.261487467" }, "Params: default": { "content": [ - 10, + 11, [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", @@ -94,13 +97,16 @@ "pixelator/logs", "pixelator/logs/PNA055_Sample07_filtered_S7", "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-report.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-analysis.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-collapse.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-demux.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-denoise.log", "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-graph.log", - "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log" + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log", + "pixelator/report", + "pixelator/report/PNA055_Sample07_filtered_S7.qc-report.html" ], [ @@ -110,6 +116,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-30T10:18:15.042376101" + "timestamp": "2025-07-02T11:03:45.12819079" } } \ No newline at end of file From cfed6d26c684371557750e60f9d21a51b93996ec Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 8 Jul 2025 11:38:55 +0000 Subject: [PATCH 20/64] Template update for nf-core/tools version 3.3.2 --- .github/actions/nf-test/action.yml | 4 -- .github/workflows/linting.yml | 2 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/nf-test.yml | 45 ++++++++++--------- .github/workflows/release-announcements.yml | 2 +- .nf-core.yml | 2 +- .pre-commit-config.yaml | 2 +- README.md | 6 +-- assets/schema_input.json | 4 +- conf/base.config | 1 + nextflow.config | 5 +-- nf-test.config | 2 +- ro-crate-metadata.json | 16 +++---- .../tests/nextflow.config | 2 +- tests/nextflow.config | 6 ++- 15 files changed, 50 insertions(+), 51 deletions(-) diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml index 243e7823..bf44d961 100644 --- a/.github/actions/nf-test/action.yml +++ b/.github/actions/nf-test/action.yml @@ -54,13 +54,9 @@ runs: conda-solver: libmamba conda-remove-defaults: true - # TODO Skip failing conda tests and document their failures - # https://github.com/nf-core/modules/issues/7017 - name: Run nf-test shell: bash env: - NFT_DIFF: ${{ env.NFT_DIFF }} - NFT_DIFF_ARGS: ${{ env.NFT_DIFF_ARGS }} NFT_WORKDIR: ${{ env.NFT_WORKDIR }} run: | nf-test test \ diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index f2d7d1dd..8b0f88c3 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - - name: Set up Python 3.12 + - name: Set up Python 3.13 uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: "3.13" diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 7e8050fb..d43797d9 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@4c1e823582f43b179e2cbb49c3eade4e41f992e2 # v10 + uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index f03aea0c..e7b58449 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -1,12 +1,5 @@ name: Run nf-test on: - push: - paths-ignore: - - "docs/**" - - "**/meta.yml" - - "**/*.md" - - "**/*.png" - - "**/*.svg" pull_request: paths-ignore: - "docs/**" @@ -35,7 +28,7 @@ jobs: nf-test-changes: name: nf-test-changes runs-on: # use self-hosted runners - - runs-on=$-nf-test-changes + - runs-on=${{ github.run_id }}-nf-test-changes - runner=4cpu-linux-x64 outputs: shard: ${{ steps.set-shards.outputs.shard }} @@ -69,7 +62,7 @@ jobs: needs: [nf-test-changes] if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }} runs-on: # use self-hosted runners - - runs-on=$-nf-test + - runs-on=${{ github.run_id }}-nf-test - runner=4cpu-linux-x64 strategy: fail-fast: false @@ -85,7 +78,7 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "24.04.2" + - "24.10.5" - "latest-everything" env: NXF_ANSI_LOG: false @@ -97,23 +90,39 @@ jobs: 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_DIFF: ${{ env.NFT_DIFF }} - NFT_DIFF_ARGS: ${{ env.NFT_DIFF_ARGS }} NFT_WORKDIR: ${{ env.NFT_WORKDIR }} 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 + confirm-pass: needs: [nf-test] if: always() runs-on: # use self-hosted runners - - runs-on=$-confirm-pass + - runs-on=${{ github.run_id }}-confirm-pass - runner=2cpu-linux-x64 steps: - - name: One or more tests failed + - name: One or more tests failed (excluding latest-everything) if: ${{ contains(needs.*.result, 'failure') }} run: exit 1 @@ -132,11 +141,3 @@ jobs: echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}" echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" echo "::endgroup::" - - - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner - if: always() - run: | - ls -la ./ - rm -rf ./* || true - rm -rf ./.??* || true - ls -la ./ diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 4abaf484..0f732495 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -30,7 +30,7 @@ jobs: bsky-post: runs-on: ubuntu-latest steps: - - uses: zentered/bluesky-post-action@4aa83560bb3eac05dbad1e5f221ee339118abdd2 # v0.2.0 + - uses: zentered/bluesky-post-action@6461056ea355ea43b977e149f7bf76aaa572e5e8 # v0.3.0 with: post: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! diff --git a/.nf-core.yml b/.nf-core.yml index c869d168..923f2425 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -7,7 +7,7 @@ lint: - assets/nf-core-pixelator_logo_light.png - .github/PULL_REQUEST_TEMPLATE.md multiqc_config: false -nf_core_version: 3.3.1 +nf_core_version: 3.3.2 repository_type: pipeline template: author: Pixelgen Technologies AB diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9d0b248d..bb41beec 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,7 +4,7 @@ repos: hooks: - id: prettier additional_dependencies: - - prettier@3.5.0 + - prettier@3.6.2 - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: diff --git a/README.md b/README.md index a9f87c3a..5be7ce8f 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,12 @@ -[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml) +[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/nf-test.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/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/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.04.2-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-3.3.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.1) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-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-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2) [![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/) diff --git a/assets/schema_input.json b/assets/schema_input.json index 148fd766..61afb425 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -17,14 +17,14 @@ "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" } }, diff --git a/conf/base.config b/conf/base.config index 476423e9..686cf1a6 100644 --- a/conf/base.config +++ b/conf/base.config @@ -61,5 +61,6 @@ process { } withLabel: process_gpu { ext.use_gpu = { workflow.profile.contains('gpu') } + accelerator = { workflow.profile.contains('gpu') ? 1 : null } } } diff --git a/nextflow.config b/nextflow.config index b8b2bb29..685edbaa 100644 --- a/nextflow.config +++ b/nextflow.config @@ -222,7 +222,6 @@ dag { manifest { name = 'nf-core/pixelator' - author = """Pixelgen Technologies AB""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead contributors = [ // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 [ @@ -238,14 +237,14 @@ manifest { description = """Pipeline for analysis of Molecular Pixelation assays""" mainScript = 'main.nf' defaultBranch = 'master' - nextflowVersion = '!>=24.04.2' + nextflowVersion = '!>=24.10.5' version = '2.0.0' doi = '' } // Nextflow plugins plugins { - id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.4.2' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { diff --git a/nf-test.config b/nf-test.config index 889df760..3a1fff59 100644 --- a/nf-test.config +++ b/nf-test.config @@ -9,7 +9,7 @@ config { configFile "tests/nextflow.config" // ignore tests coming from the nf-core/modules repo - ignore 'modules/nf-core/**/*', 'subworkflows/nf-core/**/*' + ignore 'modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*' // run all test with defined profile(s) from the main nextflow.config profile "test" diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 11f2fe8e..bf7cd49a 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "Stable", - "datePublished": "2025-06-03T11:01:47+00:00", - "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/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/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.04.2-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-3.3.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.1)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n\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/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.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\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", + "datePublished": "2025-07-08T11:38:51+00:00", + "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/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/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-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-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n\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/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.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\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" @@ -93,7 +93,7 @@ }, "mentions": [ { - "@id": "#0895c683-f0fb-4c11-9e1c-2b34ce657682" + "@id": "#53f691f9-b217-48af-b193-bcbb3af540f7" } ], "name": "nf-core/pixelator" @@ -122,7 +122,7 @@ } ], "dateCreated": "", - "dateModified": "2025-06-03T11:01:47Z", + "dateModified": "2025-07-08T11:38:51Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -155,14 +155,14 @@ "url": { "@id": "https://www.nextflow.io/" }, - "version": "!>=24.04.2" + "version": "!>=24.10.5" }, { - "@id": "#0895c683-f0fb-4c11-9e1c-2b34ce657682", + "@id": "#53f691f9-b217-48af-b193-bcbb3af540f7", "@type": "TestSuite", "instance": [ { - "@id": "#7dab22de-8732-49dd-b502-3f0cb2accb6f" + "@id": "#2d94b44c-70ec-40e4-b8ea-98052871e6e3" } ], "mainEntity": { @@ -171,7 +171,7 @@ "name": "Test suite for nf-core/pixelator" }, { - "@id": "#7dab22de-8732-49dd-b502-3f0cb2accb6f", + "@id": "#2d94b44c-70ec-40e4-b8ea-98052871e6e3", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/pixelator", "resource": "repos/nf-core/pixelator/actions/workflows/nf-test.yml", diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config index 0907ac58..09ef842a 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -1,5 +1,5 @@ plugins { - id "nf-schema@2.1.0" + id "nf-schema@2.4.2" } validation { diff --git a/tests/nextflow.config b/tests/nextflow.config index 0a0a201f..a90f4366 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -6,7 +6,9 @@ // 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/' -params.pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/pixelator' +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/refs/heads/pixelator' +} aws.client.anonymous = true // fixes S3 access issues on self-hosted runners From 281c64c05a8c5f7ef56017da555df04c5393f30b Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 11:31:34 +0200 Subject: [PATCH 21/64] remove invalid dump_channels param --- tests/nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/nextflow.config b/tests/nextflow.config index 45634ae0..79cd7ca6 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -13,7 +13,6 @@ params { // TODO: check if we rather do this or disable publishdir for all processes when testing modules/subworkflows outdir = 'results' - dump_channels = true } validation { From 54219d673c60834aef000d49024b6a9b7f0bd340 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 11:34:16 +0200 Subject: [PATCH 22/64] update snapshots --- conf/test.config | 3 --- .../single-cell-mpx/amplicon/tests/main.nf.test.snap | 4 ++-- .../single-cell-mpx/analysis/tests/main.nf.test.snap | 10 +++++----- .../single-cell-mpx/annotate/tests/main.nf.test.snap | 8 ++++---- .../single-cell-mpx/demux/tests/main.nf.test.snap | 4 ++-- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/conf/test.config b/conf/test.config index db56b164..ff089546 100644 --- a/conf/test.config +++ b/conf/test.config @@ -39,9 +39,6 @@ params { colocalization_n_permutations = 10 colocalization_neighbourhood_size = 1 - // For now skip the layout step since it is very slow on these - // small test datasets - skip_layout = true // using this since the default pmds_3d does not work on very small graphs layout_algorithm = "fruchterman_reingold_3d" } diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap index df148761..f802107a 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap @@ -39,7 +39,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T11:47:48.878257782" + "timestamp": "2025-07-28T11:06:59.496585652" }, "Test MPX amplicon - stub": { "content": [ @@ -144,6 +144,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T11:47:28.489102305" + "timestamp": "2025-07-28T11:06:32.414933066" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap index 9f823e72..f267f6a7 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap @@ -20,7 +20,7 @@ "panel": "human-sc-immunology-spatial-proteomics-1", "technology": "mpx" }, - "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,f2597ab5ea83e5257f8c96330df16484" + "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,62ff235b5ed8a284e80b33ddb44447f8" ] ] ], @@ -28,17 +28,17 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-26T11:50:05.9291208" + "timestamp": "2025-07-28T11:09:04.990954175" }, "pxl": { "content": [ - "metadata.json:md5,57e6b62b023056bbe857829a5796bb7a" + "metadata.json:md5,f2fb857ccf3ee1b600c6903b7406444d" ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:09:46.933037588" + "timestamp": "2025-07-28T11:09:05.148335083" }, "Test MPX analysis - stub": { "content": [ diff --git a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap index 06a1c349..02efbd00 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap @@ -9,7 +9,7 @@ "panel": "human-sc-immunology-spatial-proteomics-1", "technology": "mpx" }, - "sample01_1k_pbmcs_scsp_v1_immunology1.report.json:md5,46497e565adecc96af90e90faffaf372" + "sample01_1k_pbmcs_scsp_v1_immunology1.report.json:md5,915764b836bcf12f634b19b6040d6577" ] ], [ @@ -20,15 +20,15 @@ "panel": "human-sc-immunology-spatial-proteomics-1", "technology": "mpx" }, - "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,d665597d94d168a92632ec419a79617f" + "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,9800856aba41c57197792e8e53f22dc0" ] ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "25.04.2" }, - "timestamp": "2025-05-06T15:10:43.635775337" + "timestamp": "2025-07-28T11:10:08.025851237" }, "pxl": { "content": [ diff --git a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap index fbb09750..441b34a8 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap @@ -262,7 +262,7 @@ ], "cutadapt_version": "5.0", "python_version": "3.12.11", - "cores": 16, + "cores": 8, "input": { "path1": "sample01_1k_pbmcs_scsp_v1_immunology1.processed.fastq.gz", "path2": null, @@ -2870,6 +2870,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.2" }, - "timestamp": "2025-06-24T17:01:00.835348309" + "timestamp": "2025-07-28T11:11:51.071540948" } } \ No newline at end of file From d4e0a695f35763ecd6f02b83d6425248659c21c2 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 12:16:45 +0200 Subject: [PATCH 23/64] remove unused default workflow test --- tests/default.nf.test | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 tests/default.nf.test diff --git a/tests/default.nf.test b/tests/default.nf.test deleted file mode 100644 index 9f3ae19d..00000000 --- a/tests/default.nf.test +++ /dev/null @@ -1,35 +0,0 @@ -nextflow_pipeline { - - name "Test pipeline" - script "../main.nf" - tag "pipeline" - - test("-profile test") { - - 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( - // Number of successful tasks - workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_pixelator_software_mqc_versions.yml"), - // All stable path name, with a relative path - stable_name, - // All files with stable contents - stable_path - ).match() } - ) - } - } -} From 533f8faa2e7e9ad20cda4c010fb71be45cda60c4 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 12:20:31 +0200 Subject: [PATCH 24/64] fix snapshot --- .../pixelator/single-cell-mpx/demux/tests/main.nf.test.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap index 441b34a8..d83836f5 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap @@ -262,7 +262,7 @@ ], "cutadapt_version": "5.0", "python_version": "3.12.11", - "cores": 8, + "cores": 4, "input": { "path1": "sample01_1k_pbmcs_scsp_v1_immunology1.processed.fastq.gz", "path2": null, From eccc53527ece116104754b9b28eaf5de99d3c681 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 13:15:15 +0200 Subject: [PATCH 25/64] fixup formatting --- .vscode/settings.json | 1 - docs/output.md | 35 ------------------- .../amplicon/tests/main.nf.test | 1 - .../analysis/tests/main.nf.test | 1 - .../annotate/tests/main.nf.test | 1 - .../single-cell-mpx/demux/tests/main.nf.test | 1 - .../single-cell-mpx/graph/tests/main.nf.test | 1 - .../single-cell-mpx/layout/tests/main.nf.test | 1 - .../single-cell-mpx/qc/tests/main.nf.test | 1 - .../single-cell-mpx/report/tests/main.nf.test | 1 - .../amplicon/tests/main.nf.test | 1 - .../analysis/tests/main.nf.test | 1 - .../single-cell-pna/demux/tests/main.nf.test | 1 - .../denoise/tests/main.nf.test | 1 - .../single-cell-pna/graph/tests/main.nf.test | 1 - .../single-cell-pna/report/tests/main.nf.test | 1 - subworkflows/local/mpx/main.nf | 1 - 17 files changed, 51 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index e8086828..4c79cdd4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,4 +4,3 @@ ], "nextflow.formatting.harshilAlignment": true } - diff --git a/docs/output.md b/docs/output.md index eafe8d17..55530fc9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -67,9 +67,7 @@ These processed and discarded FASTQ reads are intermediate and by default not pl Output files - `pixelator` - - `demux` - - `.demux.failed.fq.zst`: Discarded reads that do not match a marker. - `.demux.m1.part_000.parquet`: Marker 1 reads in parquet format. - `.demux.m2.part_000.parquet`: Marker 2 reads in parquet format. @@ -95,9 +93,7 @@ The output of this step is then used as an edge list input for the graph constru Output files - `pixelator` - - `collapse` - - `.collapse.parquet`: Edge list of the graph. - `.report.json`: QC metrics for the collapse step. - `.meta.json`: Command invocation metadata. @@ -121,9 +117,7 @@ the [pixelator documentation](https://software.pixelgen.com/pixelator/outputs/px Output files - `pixelator` - - `graph` - - `.graph.pxl`: The pixel file containing all data after resolving multiplets. - `.meta.json`: Command invocation metadata. - `.report.json`: QC metrics for the graph step. @@ -147,9 +141,7 @@ The denoised graph will be saved as a new PXL file. Output files - `pixelator` - - `denoise` - - `.denoise.pxl`: The pixel file containing the denoised data. - `.meta.json`: Command invocation metadata. - `.report.json`: QC metrics for the graph step. @@ -167,9 +159,7 @@ This step uses the `pixelator single-cell-pna analysis` command to calculate spa Output files - `pixelator` - - `analysis` - - `.analysis.dataset.pxl`: PXL file with the analysis results added to it. - `.meta.json`: Command invocation metadata. - `.report.json`: Statistics for the analysis step. @@ -192,9 +182,7 @@ This entire step can also be skipped using the `--skip_layout` option. Output files - `pixelator` - - `layout` - - `.layout.pxl`: PXL file with the layout results added to it. - `.meta.json`: Command invocation metadata. - `.report.json`: Statistics for the layout step. @@ -217,9 +205,7 @@ More information on the report can be found in the [pixelator documentation](htt Output files - `pixelator` - - `report` - - `_report.html`: Pixelator summary report. - `logs` @@ -258,9 +244,7 @@ Below is an example output structure for a pipeline run using the default settin - `pipeline_info/` - `pixelator/` - - `logs/` - - `/`: - `*.log` @@ -299,9 +283,7 @@ Set `--save_amplicon_reads` or `--save_all` to enable publishing of these files Output files - `pixelator` - - `amplicon` - - `.merged.fastq.gz`: Combine R1 and R2 reads into full amplicon reads and calculate Q30 scores for the amplicon regions. - `.report.json`: Q30 metrics of the amplicon. @@ -332,9 +314,7 @@ Alternatively, set `--save_all` to keep all intermediary outputs of all steps. Output files - `pixelator` - - `preqc` - - `.processed.fastq.gz`: Processed reads. - `.failed.fastq.gz`: Discarded reads. - `.report.json`: Fastp json report. @@ -342,7 +322,6 @@ Alternatively, set `--save_all` to keep all intermediary outputs of all steps. - `.meta.json`: Command invocation metadata. - `adapterqc` - - `.processed.fastq.gz`: Processed reads. - `.failed.fastq.gz`: Discarded reads. - `.report.json`: Cutadapt json report. @@ -367,9 +346,7 @@ Alternatively, set `--save_all` to keep all intermediary outputs of all steps. Output files - `pixelator` - - `demux` - - `.processed-.fastq.gz`: Reads demultiplexed per antibody. - `.failed.fastq.gz`: Discarded reads that do not match an antibody barcode. - `.report.json`: Cutadapt json report. @@ -399,9 +376,7 @@ Alternatively, set `--save_all` to keep all intermediary outputs of all steps. Output files - `pixelator` - - `collapse` - - `.collapsed.parquet`: Edge list of the graph. - `.report.json`: Statistics for the collapse step. - `.meta.json`: Command invocation metadata. @@ -431,9 +406,7 @@ Alternatively, set `--save_all` to keep all intermediary outputs of all steps. Output files - `pixelator` - - `graph` - - `.edgelist.parquet`: Edge list dataframe after recovering technical multiplets. - `.components_recovered.csv`: @@ -465,9 +438,7 @@ Set `--save_annotate_dataset` to include these files. Output files - `pixelator` - - `annotate` - - `.annotate.dataset.pxl`: The annotated PXL dataset, - `.meta.json`: Command invocation metadata. - `.raw_components_metrics.csv.gz` @@ -501,9 +472,7 @@ Alternatively, set `--save_all` to keep all intermediary outputs of all steps. Output files - `pixelator` - - `analysis` - - `.analysis.dataset.pxl`: PXL file with the analysis results added to it. - `.meta.json`: Command invocation metadata. - `.report.json`: Statistics for the analysis step. @@ -527,9 +496,7 @@ Set `--save_all` to keep all intermediary outputs of all steps. Output files - `pixelator` - - `layout` - - `.layout.dataset.pxl`: PXL file with the layout results added to it. - `.meta.json`: Command invocation metadata. - `.report.json`: Statistics for the layout step. @@ -591,9 +558,7 @@ Below is an example output structure for a pipeline run using the default settin - `pipeline_info/` - `pixelator/` - - `logs/` - - `/`: - `*.log` diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test index e072c0ad..4355695d 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test @@ -75,4 +75,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test index bffb8e92..1b821ad1 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test @@ -73,4 +73,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test index 0e5cd5f0..88f480ec 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test @@ -80,4 +80,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test index 2dfc5da9..39b4bafa 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test @@ -77,4 +77,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test index ca0eca80..9e066b1e 100644 --- a/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test @@ -67,4 +67,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test index 6f90834c..0b09efe0 100644 --- a/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test @@ -79,4 +79,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test index 439ff91e..b1b2964c 100644 --- a/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test @@ -85,4 +85,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test index 6540d59e..ccd8fab0 100644 --- a/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test @@ -153,4 +153,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test index 31d37b8e..6e23f95d 100644 --- a/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/amplicon/tests/main.nf.test @@ -38,4 +38,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test index 8263257b..97a17121 100644 --- a/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test @@ -38,4 +38,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test index 380370e9..7a619c03 100644 --- a/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test @@ -82,4 +82,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test index 0e578682..152571a1 100644 --- a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test @@ -38,4 +38,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test index 177583a4..d6824f66 100644 --- a/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test @@ -41,4 +41,3 @@ nextflow_process { } } } - diff --git a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test index 18f55b1d..7d485ae3 100644 --- a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test @@ -66,4 +66,3 @@ nextflow_process { } } } - diff --git a/subworkflows/local/mpx/main.nf b/subworkflows/local/mpx/main.nf index a3650b80..64f5e0b8 100644 --- a/subworkflows/local/mpx/main.nf +++ b/subworkflows/local/mpx/main.nf @@ -213,4 +213,3 @@ workflow MPX { THE END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - From 405ddcf3bfcc608d6051e13799d29c2a9f8581e1 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 13:59:50 +0200 Subject: [PATCH 26/64] fix linting errors --- conf/modules.pna.config | 4 ++-- nextflow.config | 6 +----- subworkflows/local/mpx/main.nf | 11 ----------- subworkflows/local/pna/main.nf | 11 ----------- tests/default_mpx.nf.test | 2 ++ tests/default_pna.nf.test | 2 ++ tests/save_all.nf.test | 2 ++ workflows/pixelator.nf | 4 +--- 8 files changed, 10 insertions(+), 32 deletions(-) diff --git a/conf/modules.pna.config b/conf/modules.pna.config index 7ec1ade0..5573aec6 100644 --- a/conf/modules.pna.config +++ b/conf/modules.pna.config @@ -47,8 +47,8 @@ process { ext.args = { [ params.pna_demux_mismatches instanceof Integer ? "--mismatches ${params.pna_demux_mismatches}" : '', - params.pna_demux_output_chunk_reads ? "--output-chunk-reads ${params.pna_demux_output_chunk_reads}" : '', - params.pna_demux_output_max_chunks != null ? "--output-max-chunks ${params.pna_demux_output_max_chunks}" : '', + params.pna_demux_output_chunk_reads ? "--output-chunk-reads ${params.pna_demux_output_chunk_reads}" : '', + params.pna_demux_output_max_chunks != null ? "--output-max-chunks ${params.pna_demux_output_max_chunks}" : '', "--strategy ${params.pna_demux_strategy}", ].join(' ').trim() } diff --git a/nextflow.config b/nextflow.config index 4475991d..54a1b68a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -324,15 +324,11 @@ profiles { // 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/pixelator 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" - - // Load nf-core/pixelator custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/pixelator.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 diff --git a/subworkflows/local/mpx/main.nf b/subworkflows/local/mpx/main.nf index 64f5e0b8..178401ef 100644 --- a/subworkflows/local/mpx/main.nf +++ b/subworkflows/local/mpx/main.nf @@ -191,17 +191,6 @@ workflow MPX { ch_versions = ch_versions.mix(GENERATE_REPORTS.out.versions) - // - // Collate and save software versions - // - softwareVersionsToYAML(ch_versions) - .collectFile( - storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pixelator_software_' + 'mqc_' + 'versions.yml', - sort: true, - newLine: true - ).set { ch_collated_versions } - // TODO: Add MultiQC when plugins are ready emit: diff --git a/subworkflows/local/pna/main.nf b/subworkflows/local/pna/main.nf index ac2d3c6d..a8871567 100644 --- a/subworkflows/local/pna/main.nf +++ b/subworkflows/local/pna/main.nf @@ -194,17 +194,6 @@ workflow PNA { ) ch_versions = ch_versions.mix(PNA_GENERATE_REPORTS.out.versions) - // - // Collate and save software versions - // - softwareVersionsToYAML(ch_versions) - .collectFile( - storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pixelator_software_' + 'mqc_' + 'versions.yml', - sort: true, - newLine: true - ).set { ch_collated_versions } - emit: versions = ch_versions graph = ch_graph diff --git a/tests/default_mpx.nf.test b/tests/default_mpx.nf.test index 3b2fcbdf..ff28b45d 100644 --- a/tests/default_mpx.nf.test +++ b/tests/default_mpx.nf.test @@ -25,6 +25,8 @@ nextflow_pipeline { { assert snapshot( // Number of successful tasks workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pixelator_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents diff --git a/tests/default_pna.nf.test b/tests/default_pna.nf.test index d1ce86ca..4eeacdc1 100644 --- a/tests/default_pna.nf.test +++ b/tests/default_pna.nf.test @@ -31,6 +31,8 @@ nextflow_pipeline { { assert snapshot( // Number of successful tasks workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pixelator_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents diff --git a/tests/save_all.nf.test b/tests/save_all.nf.test index 9a4569c8..393b2ea9 100644 --- a/tests/save_all.nf.test +++ b/tests/save_all.nf.test @@ -26,6 +26,8 @@ nextflow_pipeline { { assert snapshot( // Number of successful tasks workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pixelator_software_mqc_versions.yml"), // All stable path name, with a relative path stable_name, // All files with stable contents diff --git a/workflows/pixelator.nf b/workflows/pixelator.nf index 90905faf..2eb9c19b 100644 --- a/workflows/pixelator.nf +++ b/workflows/pixelator.nf @@ -147,13 +147,11 @@ workflow PIXELATOR { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pixelator_software_' + 'versions.yml', + name: 'nf_core_' + 'pixelator_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } - // TODO: Add MultiQC when plugins are ready - emit: versions = ch_versions // channel: [ path(versions.yml) ] } From e6448e1f399f7d099fd3a0d29858ead51b3d345e Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 14:01:12 +0200 Subject: [PATCH 27/64] update ro-crate-metadata.json --- ro-crate-metadata.json | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index b1ded096..ffaeb4f0 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "Stable", "datePublished": "2025-07-08T11:38:51+00:00", - "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/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/pixelator/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-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-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics pipeline that ...\n\n\n\n\n\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/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.\n\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written by Pixelgen Technologies AB.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\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", + "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)\n[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)\n[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.10015112-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.10015112)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-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-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics best-practice analysis pipeline for analysis of data from the\nMolecular Pixelation (MPX) and Proximity Network (PNA) assays. It takes a samplesheet as input and will process your data\nusing `pixelator` to produce a PXL file containing single-cell protein abundance and protein interactomics data.\n\n![](./docs/images/nf-core-pixelator-metromap.svg)\n\nDepending on the input data the pipeline will run different steps.\n\nFor PNA data, the pipeline will run the following steps:\n\n1. Do quality control checks of input reads and build amplicons ([`pixelator single-cell-pna amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Create groups of amplicons based on their marker assignments ([`pixelator single-cell-pna demux`](https://github.com/PixelgenTechnologies/pixelator))\n3. Derive original molecules to use as edge list downstream by error correcting, and counting input amplicons ([`pixelator single-cell-pna collapse`](https://github.com/PixelgenTechnologies/pixelator))\n4. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-pna graph`](https://github.com/PixelgenTechnologies/pixelator))\n5. Denoise the cell graphs ([`pixelator single-cell-pna denoise`](https://github.com/PixelgenTechnologies/pixelator))\n6. Analyze the spatial information in the cell graphs ([`pixelator single-cell-pna analysis`](https://github.com/PixelgenTechnologies/pixelator))\n7. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-pna layout`](https://github.com/PixelgenTechnologies/pixelator))\n8. Report generation ([`pixelator single-cell-pna report`](https://github.com/PixelgenTechnologies/pixelator))\n\nFor MPX data, the pipeline will run the following steps:\n\n1. Build an amplicons from the input reads ([`pixelator single-cell-mpx amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Read QC and filtering, correctness of the pixel binding sequence sequences ([`pixelator single-cell-mpx preqc | pixelator adapterqc`](https://github.com/PixelgenTechnologies/pixelator))\n3. Assign a marker (barcode) to each read ([`pixelator single-cell-mpx demux`](https://github.com/PixelgenTechnologies/pixelator))\n4. Error correction, duplicate removal, compute read counts ([`pixelator single-cell-mpx collapse`](https://github.com/PixelgenTechnologies/pixelator))\n5. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-mpx graph`](https://github.com/PixelgenTechnologies/pixelator))\n6. Call and annotate cells ([`pixelator single-cell-mpx annotate`](https://github.com/PixelgenTechnologies/pixelator))\n7. Analyze the cells for polarization and colocalization ([`pixelator single-cell-mpx analysis`](https://github.com/PixelgenTechnologies/pixelator))\n8. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-mpx layout`](https://github.com/PixelgenTechnologies/pixelator))\n9. Report generation ([`pixelator single-cell-mpx report`](https://github.com/PixelgenTechnologies/pixelator))\n\n> [!WARNING]\n> Since Nextflow 23.07.0-edge, Nextflow no longer mounts the host's home directory when using Apptainer or Singularity.\n> This causes issues in some dependencies. As a workaround, you can revert to the old behavior by setting the environment variable\n> `NXF_APPTAINER_HOME_MOUNT` or `NXF_SINGULARITY_HOME_MOUNT` to `true` in the machine from which you launch the pipeline.\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/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.\n\nFirst, prepare a samplesheet with your input data that looks as follows (the exact values you need to input depend on the design and panel you are using):\n\n`samplesheet.csv`:\n\n```csv\nsample,design,panel,fastq_1,fastq_2\nsample1,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz\n```\n\nEach row represents a sample and gives the design, a panel file and the input fastq files.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> This version of the pipeline does not support conda environments, due to issues with upstream dependencies.\n> This means you cannot use the `conda` and `mamba` profiles. Please use `docker` or `singularity` instead.\n> We hope to add support for conda environments in the future.\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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written for [Pixelgen Technologies AB](https://www.pixelgen.com/) by:\n\n- Florian De Temmerman\n- Johan Dahlberg\n- Alvaro Martinez Barrio\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/pixelator for your analysis, please cite it using the following doi: [10.5281/zenodo.10015112](https://doi.org/10.5281/zenodo.10015112)\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\nYou can cite the molecular pixelation technology as follows:\n\n> **Molecular pixelation: spatial proteomics of single cells by sequencing.**\n>\n> Filip Karlsson, Tomasz Kallas, Divya Thiagarajan, Max Karlsson, Maud Schweitzer, Jose Fernandez Navarro, Louise Leijonancker, Sylvain Geny, Erik Pettersson, Jan Rhomberg-Kauert, Ludvig Larsson, Hanna van Ooijen, Stefan Petkov, Marcela Gonz\u00e1lez-Granillo, Jessica Bunz, Johan Dahlberg, Michele Simonetti, Prajakta Sathe, Petter Brodin, Alvaro Martinez Barrio & Simon Fredriksson\n>\n> _Nat Methods._ 2024 May 08. doi: [10.1038/s41592-024-02268-9](https://doi.org/10.1038/s41592-024-02268-9)\n", "hasPart": [ { "@id": "main.nf" @@ -173,8 +173,13 @@ "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/pixelator", "https://nf-co.re/pixelator/2.0.0/"], - "version": ["2.0.0"] + "url": [ + "https://github.com/nf-core/pixelator", + "https://nf-co.re/pixelator/2.0.0/" + ], + "version": [ + "2.0.0" + ] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", From 19e39eb3808155eca211d8f1a865139edb1c204d Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 14:01:56 +0200 Subject: [PATCH 28/64] update CONTRIBUTING.md --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 332a5c4a..9b4e68ba 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -78,7 +78,7 @@ If you wish to contribute a new step, please use the following coding standards: 5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines 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`. +8. If applicable, add a new test in the `tests` directory. 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`. From 4917b2951b7aed02b08e0aa975f4ffb08aa3710d Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 14:28:00 +0200 Subject: [PATCH 29/64] ignore missing default.nf.test --- .nf-core.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.nf-core.yml b/.nf-core.yml index 923f2425..c5bca58a 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -3,6 +3,7 @@ lint: - assets/multiqc_config.yml - conf/igenomes.config - conf/igenomes_ignored.config + - tests/default.nf.test files_unchanged: - assets/nf-core-pixelator_logo_light.png - .github/PULL_REQUEST_TEMPLATE.md From 9510f1ff7dde530668f75b6bf3363e5487c945b9 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 14:28:12 +0200 Subject: [PATCH 30/64] fix config syncing issue --- nextflow.config | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/nextflow.config b/nextflow.config index 54a1b68a..7d18b8de 100644 --- a/nextflow.config +++ b/nextflow.config @@ -323,11 +323,7 @@ profiles { } // Load nf-core custom profiles from different institutions - -// Load nf-core/pixelator custom profiles from different institutions. -// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs -includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/pixelator.config" : "/dev/null" - +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.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 From 3f7cf297720bad56f87cb3931a5d7db2548513fb Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 15:44:15 +0200 Subject: [PATCH 31/64] update snapshots again --- tests/default_mpx.nf.test.snap | 42 +++++++++++++++++++++++++++++----- tests/default_pna.nf.test.snap | 42 +++++++++++++++++++++++++++++----- tests/save_all.nf.test.snap | 42 +++++++++++++++++++++++++++++----- 3 files changed, 108 insertions(+), 18 deletions(-) diff --git a/tests/default_mpx.nf.test.snap b/tests/default_mpx.nf.test.snap index 76a77ef5..13c98abc 100644 --- a/tests/default_mpx.nf.test.snap +++ b/tests/default_mpx.nf.test.snap @@ -5,7 +5,6 @@ [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", - "pipeline_info/nf_core_pixelator_software_versions.yml", "pixelator", "pixelator/adapterqc", "pixelator/adapterqc/sample01.meta.json", @@ -55,17 +54,48 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "24.10.3" }, - "timestamp": "2025-06-18T14:11:56.861718339" + "timestamp": "2025-07-28T15:15:34.886989428" }, "Params: default": { "content": [ 10, + { + "PIXELATOR_AMPLICON": { + "pixelator": "0.21.2" + }, + "PIXELATOR_ANALYSIS": { + "pixelator": "0.21.2" + }, + "PIXELATOR_ANNOTATE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_COLLAPSE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_DEMUX": { + "pixelator": "0.21.2" + }, + "PIXELATOR_GRAPH": { + "pixelator": "0.21.2" + }, + "PIXELATOR_LAYOUT": { + "pixelator": "0.21.2" + }, + "PIXELATOR_QC": { + "pixelator": "0.21.2" + }, + "PIXELATOR_REPORT": { + "pixelator": "0.21.2" + }, + "Workflow": { + "nf-core/pixelator": "v2.0.0" + } + }, [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", - "pipeline_info/nf_core_pixelator_software_versions.yml", "pixelator", "pixelator/adapterqc", "pixelator/adapterqc/sample01.meta.json", @@ -115,8 +145,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "24.10.3" }, - "timestamp": "2025-06-18T14:11:19.987334253" + "timestamp": "2025-07-28T15:20:55.474023282" } } \ No newline at end of file diff --git a/tests/default_pna.nf.test.snap b/tests/default_pna.nf.test.snap index 5e7daee4..eecea6e7 100644 --- a/tests/default_pna.nf.test.snap +++ b/tests/default_pna.nf.test.snap @@ -5,7 +5,6 @@ [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", - "pipeline_info/nf_core_pixelator_software_versions.yml", "pixelator", "pixelator/PNA055_Sample07_filtered_S7.pxl", "pixelator/amplicon", @@ -55,17 +54,48 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "24.10.3" }, - "timestamp": "2025-07-02T11:05:22.261487467" + "timestamp": "2025-07-28T15:28:52.030014387" }, "Params: default": { "content": [ 11, + { + "PIXELATOR_PNA_AMPLICON": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_ANALYSIS": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_COLLAPSE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_COMBINE_COLLAPSE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_DEMUX": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_DENOISE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_GRAPH": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_LAYOUT": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_REPORT": { + "pixelator": "0.21.2" + }, + "Workflow": { + "nf-core/pixelator": "v2.0.0" + } + }, [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", - "pipeline_info/nf_core_pixelator_software_versions.yml", "pixelator", "pixelator/PNA055_Sample07_filtered_S7.layout.pxl", "pixelator/amplicon", @@ -114,8 +144,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "24.10.3" }, - "timestamp": "2025-07-02T11:03:45.12819079" + "timestamp": "2025-07-28T15:27:26.808862581" } } \ No newline at end of file diff --git a/tests/save_all.nf.test.snap b/tests/save_all.nf.test.snap index afbff090..0eaa1117 100644 --- a/tests/save_all.nf.test.snap +++ b/tests/save_all.nf.test.snap @@ -2,10 +2,41 @@ "Params: --save_all": { "content": [ 10, + { + "PIXELATOR_AMPLICON": { + "pixelator": "0.21.2" + }, + "PIXELATOR_ANALYSIS": { + "pixelator": "0.21.2" + }, + "PIXELATOR_ANNOTATE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_COLLAPSE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_DEMUX": { + "pixelator": "0.21.2" + }, + "PIXELATOR_GRAPH": { + "pixelator": "0.21.2" + }, + "PIXELATOR_LAYOUT": { + "pixelator": "0.21.2" + }, + "PIXELATOR_QC": { + "pixelator": "0.21.2" + }, + "PIXELATOR_REPORT": { + "pixelator": "0.21.2" + }, + "Workflow": { + "nf-core/pixelator": "v2.0.0" + } + }, [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", - "pipeline_info/nf_core_pixelator_software_versions.yml", "pixelator", "pixelator/adapterqc", "pixelator/adapterqc/sample01.failed.fastq.gz", @@ -147,9 +178,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.6" + "nextflow": "24.10.3" }, - "timestamp": "2025-05-15T14:16:04.664176925" + "timestamp": "2025-07-28T15:42:09.850381652" }, "Params: --save_all - stub": { "content": [ @@ -157,7 +188,6 @@ [ "pipeline_info", "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", - "pipeline_info/nf_core_pixelator_software_versions.yml", "pixelator", "pixelator/adapterqc", "pixelator/adapterqc/sample01.meta.json", @@ -207,8 +237,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "24.10.3" }, - "timestamp": "2025-06-26T13:37:49.716575906" + "timestamp": "2025-07-28T15:43:17.696960351" } } \ No newline at end of file From 69a677fd5054a3b408660b3053ff18d962ba0126 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Mon, 28 Jul 2025 15:55:00 +0200 Subject: [PATCH 32/64] fix unnecessary `!= null` check --- conf/modules.pna.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.pna.config b/conf/modules.pna.config index 5573aec6..773add0b 100644 --- a/conf/modules.pna.config +++ b/conf/modules.pna.config @@ -48,7 +48,7 @@ process { [ params.pna_demux_mismatches instanceof Integer ? "--mismatches ${params.pna_demux_mismatches}" : '', params.pna_demux_output_chunk_reads ? "--output-chunk-reads ${params.pna_demux_output_chunk_reads}" : '', - params.pna_demux_output_max_chunks != null ? "--output-max-chunks ${params.pna_demux_output_max_chunks}" : '', + params.pna_demux_output_max_chunks ? "--output-max-chunks ${params.pna_demux_output_max_chunks}" : '', "--strategy ${params.pna_demux_strategy}", ].join(' ').trim() } From 0a5f86788e16a8ebf9cf8681fc198ea7419f8397 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Fri, 22 Aug 2025 10:04:22 +0200 Subject: [PATCH 33/64] Adding experiment-summary to workflow --- README.md | 4 +- assets/samplesheet_pna.csv | 6 +- docs/output.md | 24 ++- docs/usage.md | 28 +-- modules/local/experiment_summary/main.nf | 52 ++++++ .../experiment_summary/tests/main.nf.test | 164 ++++++++++++++++++ .../tests/main.nf.test.snap | 26 +++ .../pixelator/single-cell-pna/report/main.nf | 1 - nextflow.config | 7 + nextflow_schema.json | 10 ++ subworkflows/local/pna/generate_reports.nf | 150 ++++++++-------- subworkflows/local/pna/main.nf | 7 + tests/default_pna.nf.test | 3 + 13 files changed, 389 insertions(+), 93 deletions(-) create mode 100644 modules/local/experiment_summary/main.nf create mode 100644 modules/local/experiment_summary/tests/main.nf.test create mode 100644 modules/local/experiment_summary/tests/main.nf.test.snap diff --git a/README.md b/README.md index 8adeec91..98b7cf64 100644 --- a/README.md +++ b/README.md @@ -68,8 +68,8 @@ First, prepare a samplesheet with your input data that looks as follows (the exa `samplesheet.csv`: ```csv -sample,design,panel,fastq_1,fastq_2 -sample1,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz +sample,sample_alias,condition,design,panel,fastq_1,fastq_2 +sample1,s1,control,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz ``` Each row represents a sample and gives the design, a panel file and the input fastq files. diff --git a/assets/samplesheet_pna.csv b/assets/samplesheet_pna.csv index 897cd3f2..f3d94e7a 100644 --- a/assets/samplesheet_pna.csv +++ b/assets/samplesheet_pna.csv @@ -1,3 +1,3 @@ -sample,design,panel,fastq_1,fastq_2 -sample1,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz -sample2,pna-2,proxiome-immuno-155,sample2_R1_001.fastq.gz,sample2_R2_001.fastq.gz +sample,sample_alias,condition,design,panel,fastq_1,fastq_2 +sample1,s1,control,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz +sample2,s2,treatment,pna-2,proxiome-immuno-155,sample2_R1_001.fastq.gz,sample2_R2_001.fastq.gz diff --git a/docs/output.md b/docs/output.md index 55530fc9..d2e36f08 100644 --- a/docs/output.md +++ b/docs/output.md @@ -29,7 +29,8 @@ The PNA pipeline consists of the following steps: - [Denoising](#denoising) - [Analysis](#analysis) - [Layout creation](#compute-layouts-for-visualization) -- [Report generation](#report-generation) +- [Per sample report generation](#generate-reports-per-sample) +- [Per run run report generation](#generate-report-for-all-samples) - [Pipeline information](#pipeline-information) The output of the Proximity Network Assay (PNA) pipeline is organized into several directories, each corresponding to a specific step in the pipeline. Below is an overview of the output structure and the files generated at each step: @@ -192,7 +193,7 @@ This entire step can also be skipped using the `--skip_layout` option. -#### Generate reports +#### Generate per sample reports This step uses the `pixelator single-cell-pna report` command. @@ -213,6 +214,25 @@ More information on the report can be found in the [pixelator documentation](htt +#### Generate report for all samples + +This step uses [pixelator-es](https://github.com/PixelgenTechnologies/pixelatores) to generate a Proxime Experiment Summary +that contains information about all the samples in the run. + +It will collect metrics and outputs generated by previous stages and generate a report in HTML format. + +More information on the report can be found [here](https://github.com/PixelgenTechnologies/pixelatores). + +The output from this step will be placed in the output folder root. + +
+Output files + +- `pixelator` + - `experiment_summary.html`: Proxiome Experiment Summary report + +
+ #### Pipeline information
diff --git a/docs/usage.md b/docs/usage.md index eabf6008..0c77a545 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -38,13 +38,15 @@ sample2,pna-2,proxiome-immuno-155,sample2_R1_001.fastq.gz,sample2_R2_001.fastq.g Columns not defined in the table below are ignored by the pipeline but can be useful to add extra information for downstream processing. -| Column | Required | Description | -| ----------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Yes | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `design` | Yes | The name of the pixelator design configuration. | -| `panel`
or
`panel_file` | Yes | Name of the panel to use.
or
Path to a CSV file containing a custom panel. | -| `fastq_1` | Yes | Path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | No | Path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". Parameter only used if you are running paired-end. | +| Column | Required | Description | +| ----------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Yes | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `sample_alias` | Yes (Only for PNA runs) | Custom sample alias. Will be used to identify the sample in reports and visualizations. | +| `condition` | Yes (Only for PNA run) | Experimental condition for the sample (e.g. control, treatment). | +| `design` | Yes | The name of the pixelator design configuration. | +| `panel`
or
`panel_file` | Yes | Name of the panel to use.
or
Path to a CSV file containing a custom panel. | +| `fastq_1` | Yes | Path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | No | Path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". Parameter only used if you are running paired-end. | The `panel` and `panel_file` options are mutually exclusive. If both are specified, the pipeline will throw an error. One of them has to be specified. @@ -56,10 +58,10 @@ The pipeline will auto-detect whether a sample is single- or paired-end based on The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: ```csv title="samplesheet.csv" -sample,design,panel,fastq_1,fastq_2 -uropod_control_1,pna-2,proxiome-immuno-155,uropod_control_S1_L001_R1_001.fastq.gz,uropod_control_S1_L001_R2_001.fastq.gz -uropod_control_1,pna-2,proxiome-immuno-155,uropod_control_S1_L002_R1_001.fastq.gz,uropod_control_S1_L002_R2_001.fastq.gz -uropod_control_1,pna-2,proxiome-immuno-155,uropod_control_S1_L003_R1_001.fastq.gz,uropod_control_S1_L003_R2_001.fastq.gz +sample,sample_alias,condition,design,panel,fastq_1,fastq_2 +uropod_control_1,s1,control,pna-2,proxiome-immuno-155,uropod_control_S1_L001_R1_001.fastq.gz,uropod_control_S1_L001_R2_001.fastq.gz +uropod_control_1,s1,control,pna-2,proxiome-immuno-155,uropod_control_S1_L002_R1_001.fastq.gz,uropod_control_S1_L002_R2_001.fastq.gz +uropod_control_1,s1,control,pna-2,proxiome-immuno-155,uropod_control_S1_L003_R1_001.fastq.gz,uropod_control_S1_L003_R2_001.fastq.gz ``` ### Relative paths @@ -80,8 +82,8 @@ Given following directory structure: You can use following samplesheet: ```csv title="samplesheet.csv" -sample,design,panel,panel_file,fastq_1,fastq_2 -sample1,pna-2,proxiome-immuno-155,,fastq/sample1_R1.fq.gz,fastq/sample1_R2.fq.gz +sample,sample_alias,condition,design,panel,panel_file,fastq_1,fastq_2 +sample1,s1,control,pna-2,proxiome-immuno-155,,fastq/sample1_R1.fq.gz,fastq/sample1_R2.fq.gz ``` Using the `--input_basedir` option you can specify a different location that will be used to resolve relative paths. diff --git a/modules/local/experiment_summary/main.nf b/modules/local/experiment_summary/main.nf new file mode 100644 index 00000000..af1f5010 --- /dev/null +++ b/modules/local/experiment_summary/main.nf @@ -0,0 +1,52 @@ +process EXPERIMENT_SUMMARY { + tag "${meta.id}" + label "process_medium" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'quay.io/pixelgen-technologies/pixelatores:0.4.2' + : 'quay.io/pixelgen-technologies/pixelatores:0.4.2'}" + + input: + val(meta) + path samplesheet_path + path amplicon_data , stageAs: "results/amplicon/*" + path demux_data , stageAs: "results/demux/*" + path collapse_data , stageAs: "results/collapse/*" + path graph_data , stageAs: "results/graph/*" + path denoise_data , stageAs: "results/denoise/*" + path analysis_data , stageAs: "results/analysis/*" + path layout_data , stageAs: "results/layout/*" + + + output: + tuple val(meta), path("*experiment-summary.html") , emit: html + path("versions.yml") , emit: versions + + script: + + """ + # Copy the full quarto dir from the read-only image into the workdir + cp -r /workspace/inst/quarto/ ./quarto/ + quarto render ./quarto/pixelatorES.qmd \\ + -P sample_sheet="\$PWD/${samplesheet_path}" \\ + -P data_folder="\$PWD/results/" + + mv ./quarto/pixelatorES.html experiment-summary.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + experiment-summary: \$(Rscript -e 'cat(as.character(packageVersion("pixelatorES")), "\\n")') + END_VERSIONS + """ + + stub: + """ + touch experiment-summary.html + + # Hard coding the version for the stub, since for some + # reason it work in nf-test otherwise. + cat <<-END_VERSIONS > versions.yml + "${task.process}": + experiment-summary: 0.4.2 + END_VERSIONS + """ +} diff --git a/modules/local/experiment_summary/tests/main.nf.test b/modules/local/experiment_summary/tests/main.nf.test new file mode 100644 index 00000000..f8766e6a --- /dev/null +++ b/modules/local/experiment_summary/tests/main.nf.test @@ -0,0 +1,164 @@ +nextflow_process { + + name "Test Process EXPERIMENT_SUMMARY" + script "../main.nf" + process "EXPERIMENT_SUMMARY" + tag "modules" + tag "pixelator" + tag "pixelator/pna" + tag "pixelator/experiment_summary" + + test("PNA experiment summary - small") { + when { + process { + """ + input[0] = [ id:'all', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ] + // samplesheet + input[1] = file(params.pipelines_testdata_base_path + 'samplesheet/pna/samplesheet_pna_es.csv', checkIfExists: true) + // amplicon + input[2] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // demux + input[3] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // (combined collapse) + input[4] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // graph + input[5] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // denoise + input[6] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // analysis + input[7] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // layout + input[8] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + with(process.out.html) { + assert path(get(0).get(1)).endsWith("experiment-summary.html") + assert path(get(0).get(1)).exists() + } + }, + { assert snapshot(process.out.versions).match("versions") }, + ) + } + } + + + + test("PNA experiment summary - stub") { + when { + process { + """ + input[0] = [ id:'all', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ] + // samplesheet + input[1] = file(params.pipelines_testdata_base_path + 'samplesheet/pna/samplesheet_pna_es.csv', checkIfExists: true) + // amplicon + input[2] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // demux + input[3] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // (combined collapse) + input[4] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // graph + input[5] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // denoise + input[6] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // analysis + input[7] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + // layout + input[8] = [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + with(process.out.html) { + assert path(get(0).get(1)).endsWith("experiment-summary.html") + assert path(get(0).get(1)).exists() + } + }, + { assert snapshot(process.out.versions).match("stub-versions") }, + ) + } + } +} diff --git a/modules/local/experiment_summary/tests/main.nf.test.snap b/modules/local/experiment_summary/tests/main.nf.test.snap new file mode 100644 index 00000000..1f4e4bf2 --- /dev/null +++ b/modules/local/experiment_summary/tests/main.nf.test.snap @@ -0,0 +1,26 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,727128de0a36c320a733109a17c6d6b4" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-22T15:40:56.97952889" + }, + "stub-versions": { + "content": [ + [ + "versions.yml:md5,727128de0a36c320a733109a17c6d6b4" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-22T15:45:15.101730032" + } +} \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-pna/report/main.nf b/modules/local/pixelator/single-cell-pna/report/main.nf index b30cd62c..15446af2 100644 --- a/modules/local/pixelator/single-cell-pna/report/main.nf +++ b/modules/local/pixelator/single-cell-pna/report/main.nf @@ -16,7 +16,6 @@ process PIXELATOR_PNA_REPORT { path collapse_data, stageAs: "results/collapse/*" path graph_data, stageAs: "results/graph/*" path analysis_data, stageAs: "results/analysis/*" - path post_analysis_data, stageAs: "results/post_analysis/*" path layout_data, stageAs: "results/layout/*" output: diff --git a/nextflow.config b/nextflow.config index 7d18b8de..af4e3b8e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -157,6 +157,9 @@ params { pna_layout_pmds_pivots = 50 pna_layout_wpmds_k = 5 + // Experiment summary + skip_experiment_summary = false + // Common output options save_json = true save_all = false @@ -194,6 +197,10 @@ includeConfig 'conf/base.config' def container_env_options = [ "MPLCONFIGDIR": '/tmp/.config/matplotlib', "NUMBA_CACHE_DIR": "/tmp/.numba_cache", + + // quarto needs a writeable cache directory + "XDG_CACHE_HOME": "/tmp/.cache", + "XDG_DATA_HOME": "/tmp/.data", ] profiles { diff --git a/nextflow_schema.json b/nextflow_schema.json index a9b071d8..95d2e613 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -735,6 +735,16 @@ } } }, + "experiment_summary_options": { + "title": "Options for experiment summary.", + "type": "object", + "properties": { + "skip_experiment_summary": { + "description": "Skip experiment summary generation", + "type": "boolean" + } + } + }, "global_config_options": { "title": "Global options", "type": "object", diff --git a/subworkflows/local/pna/generate_reports.nf b/subworkflows/local/pna/generate_reports.nf index 0b27afaf..c769903e 100644 --- a/subworkflows/local/pna/generate_reports.nf +++ b/subworkflows/local/pna/generate_reports.nf @@ -5,6 +5,7 @@ */ include { PIXELATOR_PNA_REPORT } from '../../../modules/local/pixelator/single-cell-pna/report/main' +include { EXPERIMENT_SUMMARY } from '../../../modules/local/experiment_summary/main' /* ======================================================================================== @@ -14,13 +15,17 @@ include { PIXELATOR_PNA_REPORT } from '../../../modules/local/pixelator/single-c workflow PNA_GENERATE_REPORTS { take: - panel_files // channel: [meta, path(panel_file) | []] - amplicon_data // channel: [meta, [path, ...]] - demux_data // channel: [meta, [path, ...]] - collapse_data // channel: [meta, [path, ...]] - graph_data // channel: [meta, [path, ...]] - analysis_data // channel: [meta, [path, ...]] - layout_data // channel: [meta, [path, ...]] + samplesheet // channel: [path(samplesheet)] + panel_files // channel: [meta, path(panel_file) | []] + amplicon_data // channel: [meta, [path, ...]] + demux_data // channel: [meta, [path, ...]] + collapse_data // channel: [meta, [path, ...]] + graph_data // channel: [meta, [path, ...]] + denoise_data // channel: [meta, [path, ...]] + analysis_data // channel: [meta, [path, ...]] + layout_data // channel: [meta, [path, ...]] + + skip_experiment_summary // boolean main: ch_versions = Channel.empty() @@ -39,84 +44,85 @@ workflow PNA_GENERATE_REPORTS { ch_panel_col = panel_files.map { meta, data -> [meta.id, data] } - // - // These first subcommands each return two files per sample used by the reporting - // A json file with stats and a command invocation metadata json file - // - ch_amplicon_col = amplicon_data.map { meta, data -> [meta.id, data] } - ch_demux_col = demux_data.map { meta, data -> [meta.id, data] } - ch_collapse_col = collapse_data.map { meta, data -> [meta.id, data] } - ch_graph_col = graph_data.map { meta, data -> [meta.id, data] } - ch_analysis_col = analysis_data.map { meta, data -> [meta.id, data] } - ch_layout_col = layout_data.map { meta, data -> [meta.id, data] } - - // - // Combine all inputs and group them, then split them up again. - // This is neded to have the per subcommand outputs in the sample order - // - // ch_report_data: [ - // [ - // meta, panel_files, - // [amplicon files...], - // [demux files...], - // [collapse files...], - // [graph files], - // [analysis files...] - // [layout files...], - // ], - // [ same structure repeated for each sample ] - // ] + ch_amplicon_col = amplicon_data.map { meta, data -> [ meta.id, data] } + ch_demux_col = demux_data.map { meta, data -> [ meta.id, data] } + ch_collapse_col = collapse_data.map { meta, data -> [ meta.id, data] } + ch_graph_col = graph_data.map { meta, data -> [meta.id, data] } + ch_analysis_col = analysis_data.map { meta, data -> [meta.id, data] } + ch_denoise_col = denoise_data.map { meta, data -> [meta.id, data] } + ch_layout_col = layout_data.map { meta, data -> [meta.id, data] } ch_report_data = ch_meta_col - .concat(ch_panel_col) - .concat(ch_amplicon_col) - .concat(ch_demux_col) - .concat(ch_collapse_col) - .concat(ch_graph_col) - .concat(ch_analysis_col) - .concat(ch_layout_col) - .groupTuple(size: 8) - - // - // Split up everything per stage so we can recreate the expected directory structure for - // `pixelator single-cell report` using stageAs for each stage - // - // These ch__grouped channels all emit a list of input files for each sample in the samplesheet - // The channels will emit values in the same order so eg. the first list of files from each ch__grouped - // channel will match the same sample from the samplesheet. - - // If no `panel_file` (data[1]) is given we need to pass in `panel` from the samplesheet instead - // - ch_split_report_data = ch_report_data.multiMap { _id, data -> - panel_files: [data[0], data[1], data[1] ? null : data[0].panel] - amplicon: data[2] ? data[2].flatten() : [] - demux: data[3] ? data[3].flatten() : [] - collapse: data[4] ? data[4].flatten() : [] - graph: data[5] ? data[5].flatten() : [] - analysis: data[6] ? data[6].flatten() : [] - post_analysis: data[7] ? data[7].flatten() : [] - layout: data[8] ? data[8].flatten() : [] + .concat ( ch_panel_col ) + .concat ( ch_amplicon_col ) + .concat ( ch_demux_col ) + .concat ( ch_collapse_col ) + .concat ( ch_graph_col ) + .concat ( ch_denoise_col) + .concat ( ch_analysis_col ) + .concat ( ch_layout_col ) + .groupTuple (size: 9) + + ch_split_report_data = ch_report_data.multiMap { + _id, data -> + panel_files: [ data[0], data[1], data[1] ? null : data[0].panel ] + amplicon: data[2] ? data[2].flatten() : [] + demux: data[3] ? data[3].flatten() : [] + collapse: data[4] ? data[4].flatten() : [] + graph: data[5] ? data[5].flatten() : [] + denoise: data[6] ? data[6].flatten() : [] + analysis: data[7] ? data[7].flatten() : [] + layout: data[8] ? data[8].flatten() : [] } - // - // MODULE: Run pixelator single-cell report for each samples - // - // NB: These channels need to be split per stage to allow PIXELATOR_PNA_REPORT to - // use stageAs directives to stage files expected from a pixelator workdir - PIXELATOR_PNA_REPORT( + PIXELATOR_PNA_REPORT ( ch_split_report_data.panel_files, ch_split_report_data.amplicon, ch_split_report_data.demux, ch_split_report_data.collapse, ch_split_report_data.graph, ch_split_report_data.analysis, - ch_split_report_data.post_analysis, - ch_split_report_data.layout, + ch_split_report_data.layout ) + ch_meta_grouped = ch_report_data.map { _id, data -> data[0] }.flatten().collect().map { + def newMeta = [:] + newMeta.id = "all-samples" + newMeta.samples = it.collect { e -> e.id } + return newMeta + } + + ch_amplicon_flat = ch_split_report_data.amplicon.flatten().collect() + ch_demux_flat = ch_split_report_data.demux.flatten().collect() + ch_collapse_flat = ch_split_report_data.collapse.flatten().collect() + ch_graph_flat = ch_split_report_data.graph.flatten().collect() + ch_denoise_flat = ch_split_report_data.denoise.flatten().collect() + ch_analysis_flat = ch_split_report_data.analysis.flatten().collect() + ch_layout_flat = ch_split_report_data.layout.flatten().collect() + + + if (!skip_experiment_summary) { + EXPERIMENT_SUMMARY( + ch_meta_grouped, + samplesheet, + ch_amplicon_flat, + ch_demux_flat, + ch_collapse_flat, + ch_graph_flat, + ch_denoise_flat, + ch_analysis_flat, + ch_layout_flat + ) + ch_versions = ch_versions.mix(EXPERIMENT_SUMMARY.out.versions) + ch_experiment_summary = EXPERIMENT_SUMMARY.out.html + } else { + ch_experiment_summary = ch_meta_grouped.combine(Channel.of([])) + } + ch_versions = ch_versions.mix(PIXELATOR_PNA_REPORT.out.versions.first()) emit: - pixelator_reports = PIXELATOR_PNA_REPORT.out.report - versions = ch_versions + pixelator_reports = PIXELATOR_PNA_REPORT.out.report + experiment_summary = ch_experiment_summary + versions = ch_versions } diff --git a/subworkflows/local/pna/main.nf b/subworkflows/local/pna/main.nf index a8871567..22955a5f 100644 --- a/subworkflows/local/pna/main.nf +++ b/subworkflows/local/pna/main.nf @@ -177,20 +177,27 @@ workflow PNA { .groupTuple(size: 2) ch_cluster_data = PIXELATOR_PNA_GRAPH.out.all_results + ch_denoise_data = PIXELATOR_PNA_DENOISE.out.all_results ch_analysis_data = PIXELATOR_PNA_ANALYSIS.out.all_results ch_layout_data = PIXELATOR_PNA_LAYOUT.out.report_json .concat(PIXELATOR_PNA_LAYOUT.out.metadata_json) .groupTuple(size: 2) + + ch_input = Channel.of(params.input) + PNA_GENERATE_REPORTS( + ch_input, panel_files, ch_amplicon_data, ch_demux_data, ch_collapse_data, ch_cluster_data, + ch_denoise_data, ch_analysis_data, ch_layout_data, + params.skip_experiment_summary ) ch_versions = ch_versions.mix(PNA_GENERATE_REPORTS.out.versions) diff --git a/tests/default_pna.nf.test b/tests/default_pna.nf.test index 4eeacdc1..899757f0 100644 --- a/tests/default_pna.nf.test +++ b/tests/default_pna.nf.test @@ -16,6 +16,7 @@ nextflow_pipeline { outdir = "$outputDir" pna_graph_component_size_min_threshold = 100 + skip_experiment_summary = true } } @@ -52,6 +53,8 @@ nextflow_pipeline { input = "$pipelines_testdata_base_path/samplesheet/pna/samplesheet_pna.csv" input_basedir = "$pipelines_testdata_base_path/testdata/pna/" outdir = "$outputDir" + + skip_experiment_summary = true } } From 8cbca46f6bcd76c7d402a94847205c5ff9d7c75b Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 25 Aug 2025 13:14:10 +0200 Subject: [PATCH 34/64] Fix schema file --- nextflow_schema.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index 95d2e613..a3ab14f0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -942,6 +942,9 @@ { "$ref": "#/$defs/report_options" }, + { + "$ref": "#/$defs/experiment_summary_options" + }, { "$ref": "#/$defs/global_config_options" }, From 81d1296c5f7b506906b9de4c138ec2c2496f8da0 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 25 Aug 2025 13:19:32 +0200 Subject: [PATCH 35/64] Remove used param --- conf/modules.pna.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.pna.config b/conf/modules.pna.config index 773add0b..d9b31e61 100644 --- a/conf/modules.pna.config +++ b/conf/modules.pna.config @@ -167,7 +167,7 @@ process { mode: params.publish_dir_mode, pattern: 'denoise/*.pxl', saveAs: { - if (params.save_pna_denoise_pixelfile || params.save_pna_all) { + if (params.save_pna_denoise_pixelfile) { return it } return null @@ -182,7 +182,7 @@ process { path: { "${params.outdir}/pixelator" }, mode: params.publish_dir_mode, pattern: '**/*.{report,meta}.json', - saveAs: { params.save_json || params.save_pna_all ? it : null }, + saveAs: { params.save_json ? it : null }, ], ] } From b81c22c130a5a804b34192aa2a0f37f32bcd63f7 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 25 Aug 2025 13:39:18 +0200 Subject: [PATCH 36/64] Skip experiment summary in demux tests --- .../pixelator/single-cell-pna/demux/tests/main.nf.test | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test index 7a619c03..dc531252 100644 --- a/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/demux/tests/main.nf.test @@ -10,6 +10,9 @@ nextflow_process { test("PNA demux - small test") { when { + params { + skip_experiment_summary = true + } process { """ input[0] = [ @@ -48,6 +51,9 @@ nextflow_process { config "./multiple_chunks.config" when { + params { + skip_experiment_summary = true + } process { """ input[0] = [ From f04003ef6374f0b9f6b2465fac9d555f19617fae Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 25 Aug 2025 16:27:07 +0200 Subject: [PATCH 37/64] Fix up test input --- .../local/pixelator/single-cell-pna/report/tests/main.nf.test | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test index 7d485ae3..2172392c 100644 --- a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test @@ -39,10 +39,6 @@ nextflow_process { file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), ] input[6] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/post_analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/post_analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - ] - input[7] = [ file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), ] From 2fd713c9c0eaa06f39f24fc9b3d6954040bbfc26 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 26 Aug 2025 09:53:48 +0000 Subject: [PATCH 38/64] Update test snapshot --- subworkflows/local/pna/tests/main.nf.test.snap | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/pna/tests/main.nf.test.snap b/subworkflows/local/pna/tests/main.nf.test.snap index e237760e..8ed30cea 100644 --- a/subworkflows/local/pna/tests/main.nf.test.snap +++ b/subworkflows/local/pna/tests/main.nf.test.snap @@ -8,15 +8,14 @@ "versions.yml:md5,3600aa4bba044df44d77a8ae00aa4c65", "versions.yml:md5,70f4e761e87d8807946fffc5484a586c", "versions.yml:md5,c12c7c40e0b739debcbe762b4d77dc34", - "versions.yml:md5,c83065ff66c109dabfbd7513ae4df588", "versions.yml:md5,de911a9e581de7e1788418f9e5b8a178", "versions.yml:md5,faf4f6d15fed3e88e021eedb9302afdf" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-02T10:53:52.480455498" + "timestamp": "2025-08-25T14:49:35.803057864" } } \ No newline at end of file From 342ff05a19be163304f2da1806abe972b9c83774 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 26 Aug 2025 10:07:08 +0000 Subject: [PATCH 39/64] Fix more snapshots --- subworkflows/local/pna/tests/main.nf.test | 1 + subworkflows/local/pna/tests/main.nf.test.snap | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/pna/tests/main.nf.test b/subworkflows/local/pna/tests/main.nf.test index 8a67b8bc..838d27e9 100644 --- a/subworkflows/local/pna/tests/main.nf.test +++ b/subworkflows/local/pna/tests/main.nf.test @@ -14,6 +14,7 @@ nextflow_workflow { params { pna_graph_component_size_min_threshold = 100 + skip_experiment_summary = true } workflow { diff --git a/subworkflows/local/pna/tests/main.nf.test.snap b/subworkflows/local/pna/tests/main.nf.test.snap index 8ed30cea..d9eb54d5 100644 --- a/subworkflows/local/pna/tests/main.nf.test.snap +++ b/subworkflows/local/pna/tests/main.nf.test.snap @@ -8,6 +8,7 @@ "versions.yml:md5,3600aa4bba044df44d77a8ae00aa4c65", "versions.yml:md5,70f4e761e87d8807946fffc5484a586c", "versions.yml:md5,c12c7c40e0b739debcbe762b4d77dc34", + "versions.yml:md5,c83065ff66c109dabfbd7513ae4df588", "versions.yml:md5,de911a9e581de7e1788418f9e5b8a178", "versions.yml:md5,faf4f6d15fed3e88e021eedb9302afdf" ] @@ -16,6 +17,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-25T14:49:35.803057864" + "timestamp": "2025-08-26T10:04:26.945335816" } } \ No newline at end of file From 90ba61a801ee8ae6e7921cddbc4290db764763c6 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 26 Aug 2025 13:38:58 +0200 Subject: [PATCH 40/64] Add experiment summary tests --- tests/pna_es.nf.test | 78 ++++++++++++++ tests/pna_es.nf.test.snap | 219 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 297 insertions(+) create mode 100644 tests/pna_es.nf.test create mode 100644 tests/pna_es.nf.test.snap diff --git a/tests/pna_es.nf.test b/tests/pna_es.nf.test new file mode 100644 index 00000000..d1ac1b16 --- /dev/null +++ b/tests/pna_es.nf.test @@ -0,0 +1,78 @@ +nextflow_pipeline { + + name "Test PNA pipeline with experiment summary" + script "../main.nf" + + tag "pixelator" + tag "pixelator/pna" + + test("small") { + + when { + params { + pipelines_testdata_base_path = "$projectDir/../nf-core-pixelator-datasets/" + input = "$pipelines_testdata_base_path/samplesheet/pna/samplesheet_pna_es.csv" + input_basedir = "$pipelines_testdata_base_path/testdata/pna/" + outdir = "$outputDir" + + pna_graph_component_size_min_threshold = 100 + skip_experiment_summary = false + } + } + + 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 = [] + + assertAll( + { assert workflow.success}, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we tests pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_pixelator_software_mqc_versions.yml"), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } + + test("small - stub") { + + options "-stub" + tag "stub" + + when { + params { + pipelines_testdata_base_path = "$projectDir/../nf-core-pixelator-datasets/" + input = "$pipelines_testdata_base_path/samplesheet/pna/samplesheet_pna_es.csv" + input_basedir = "$pipelines_testdata_base_path/testdata/pna/" + outdir = "$outputDir" + skip_experiment_summary = false + } + } + + 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 = [] + assertAll( + { assert workflow.success }, + { assert snapshot( + // Number of successful tasks + workflow.trace.succeeded().size(), + // All stable path name, with a relative path + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/pna_es.nf.test.snap b/tests/pna_es.nf.test.snap new file mode 100644 index 00000000..37fa0227 --- /dev/null +++ b/tests/pna_es.nf.test.snap @@ -0,0 +1,219 @@ +{ + "small": { + "content": [ + 22, + { + "EXPERIMENT_SUMMARY": { + "experiment-summary": "0.4.2" + }, + "PIXELATOR_PNA_AMPLICON": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_ANALYSIS": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_COLLAPSE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_COMBINE_COLLAPSE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_DEMUX": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_DENOISE": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_GRAPH": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_LAYOUT": { + "pixelator": "0.21.2" + }, + "PIXELATOR_PNA_REPORT": { + "pixelator": "0.21.2" + }, + "Workflow": { + "nf-core/pixelator": "v2.0.0" + } + }, + [ + "pipeline_info", + "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", + "pixelator", + "pixelator/PNA055_Sample07_filtered_S7.layout.pxl", + "pixelator/PNA055_Sample07_unfiltered_S7.layout.pxl", + "pixelator/amplicon", + "pixelator/amplicon/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/amplicon/PNA055_Sample07_filtered_S7.report.json", + "pixelator/amplicon/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/amplicon/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/analysis", + "pixelator/analysis/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/analysis/PNA055_Sample07_filtered_S7.report.json", + "pixelator/analysis/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/analysis/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/collapse", + "pixelator/collapse/PNA055_Sample07_filtered_S7.collapse.m1.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.collapse.m1.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.collapse.m2.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.collapse.m2.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.collapse.parquet", + "pixelator/collapse/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.report.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.collapse.m1.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.collapse.m1.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.collapse.m2.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.collapse.m2.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.collapse.parquet", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/demux", + "pixelator/demux/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/demux/PNA055_Sample07_filtered_S7.report.json", + "pixelator/demux/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/demux/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/denoise", + "pixelator/denoise/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/denoise/PNA055_Sample07_filtered_S7.report.json", + "pixelator/denoise/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/denoise/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/experiment-summary.html", + "pixelator/graph", + "pixelator/graph/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/graph/PNA055_Sample07_filtered_S7.report.json", + "pixelator/graph/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/graph/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/layout", + "pixelator/layout/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/layout/PNA055_Sample07_filtered_S7.report.json", + "pixelator/layout/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/layout/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/logs", + "pixelator/logs/PNA055_Sample07_filtered_S7", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-report.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-analysis.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-demux.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-denoise.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-graph.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7", + "pixelator/logs/PNA055_Sample07_unfiltered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7.pixelator-report.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-amplicon.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-analysis.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-collapse.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-demux.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-denoise.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-graph.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-layout.log", + "pixelator/report", + "pixelator/report/PNA055_Sample07_filtered_S7.qc-report.html", + "pixelator/report/PNA055_Sample07_unfiltered_S7.qc-report.html" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-25T11:36:20.935253412" + }, + "small - stub": { + "content": [ + 22, + [ + "pipeline_info", + "pipeline_info/nf_core_pixelator_software_mqc_versions.yml", + "pixelator", + "pixelator/PNA055_Sample07_filtered_S7.pxl", + "pixelator/PNA055_Sample07_unfiltered_S7.pxl", + "pixelator/amplicon", + "pixelator/amplicon/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/amplicon/PNA055_Sample07_filtered_S7.report.json", + "pixelator/amplicon/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/amplicon/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/analysis", + "pixelator/analysis/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/analysis/PNA055_Sample07_filtered_S7.report.json", + "pixelator/analysis/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/analysis/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/collapse", + "pixelator/collapse/PNA055_Sample07_filtered_S7.collapse.meta.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.collapse.parquet", + "pixelator/collapse/PNA055_Sample07_filtered_S7.demux.m1.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.demux.m1.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.demux.m2.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.demux.m2.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_filtered_S7.report.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.collapse.meta.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.collapse.parquet", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.demux.m1.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.demux.m1.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.demux.m2.part_000.meta.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.demux.m2.part_000.report.json", + "pixelator/collapse/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/demux", + "pixelator/demux/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/demux/PNA055_Sample07_filtered_S7.report.json", + "pixelator/demux/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/demux/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/denoise", + "pixelator/denoise/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/denoise/PNA055_Sample07_filtered_S7.report.json", + "pixelator/denoise/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/denoise/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/experiment-summary.html", + "pixelator/graph", + "pixelator/graph/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/graph/PNA055_Sample07_filtered_S7.report.json", + "pixelator/graph/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/graph/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/layout", + "pixelator/layout/PNA055_Sample07_filtered_S7.meta.json", + "pixelator/layout/PNA055_Sample07_filtered_S7.report.json", + "pixelator/layout/PNA055_Sample07_unfiltered_S7.meta.json", + "pixelator/layout/PNA055_Sample07_unfiltered_S7.report.json", + "pixelator/logs", + "pixelator/logs/PNA055_Sample07_filtered_S7", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7.pixelator-report.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m1.part_000.pixelator-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.demux.m2.part_000.pixelator-collapse.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-amplicon.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-analysis.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-demux.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-denoise.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-graph.log", + "pixelator/logs/PNA055_Sample07_filtered_S7/PNA055_Sample07_filtered_S7.pixelator-layout.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7", + "pixelator/logs/PNA055_Sample07_unfiltered_S7.pixelator-combine-collapse.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7.pixelator-report.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.demux.m1.part_000.pixelator-collapse.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.demux.m2.part_000.pixelator-collapse.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-amplicon.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-analysis.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-demux.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-denoise.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-graph.log", + "pixelator/logs/PNA055_Sample07_unfiltered_S7/PNA055_Sample07_unfiltered_S7.pixelator-layout.log", + "pixelator/report", + "pixelator/report/PNA055_Sample07_filtered_S7.report.html", + "pixelator/report/PNA055_Sample07_unfiltered_S7.report.html" + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.04.6" + }, + "timestamp": "2025-08-25T11:37:33.484947103" + } +} \ No newline at end of file From 81e24859418dc5586e7e7c760bd1ddcc68327639 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 26 Aug 2025 13:41:33 +0200 Subject: [PATCH 41/64] update ro create metadata --- ro-crate-metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index ffaeb4f0..59ce6c87 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "Stable", "datePublished": "2025-07-08T11:38:51+00:00", - "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)\n[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)\n[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.10015112-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.10015112)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-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-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics best-practice analysis pipeline for analysis of data from the\nMolecular Pixelation (MPX) and Proximity Network (PNA) assays. It takes a samplesheet as input and will process your data\nusing `pixelator` to produce a PXL file containing single-cell protein abundance and protein interactomics data.\n\n![](./docs/images/nf-core-pixelator-metromap.svg)\n\nDepending on the input data the pipeline will run different steps.\n\nFor PNA data, the pipeline will run the following steps:\n\n1. Do quality control checks of input reads and build amplicons ([`pixelator single-cell-pna amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Create groups of amplicons based on their marker assignments ([`pixelator single-cell-pna demux`](https://github.com/PixelgenTechnologies/pixelator))\n3. Derive original molecules to use as edge list downstream by error correcting, and counting input amplicons ([`pixelator single-cell-pna collapse`](https://github.com/PixelgenTechnologies/pixelator))\n4. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-pna graph`](https://github.com/PixelgenTechnologies/pixelator))\n5. Denoise the cell graphs ([`pixelator single-cell-pna denoise`](https://github.com/PixelgenTechnologies/pixelator))\n6. Analyze the spatial information in the cell graphs ([`pixelator single-cell-pna analysis`](https://github.com/PixelgenTechnologies/pixelator))\n7. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-pna layout`](https://github.com/PixelgenTechnologies/pixelator))\n8. Report generation ([`pixelator single-cell-pna report`](https://github.com/PixelgenTechnologies/pixelator))\n\nFor MPX data, the pipeline will run the following steps:\n\n1. Build an amplicons from the input reads ([`pixelator single-cell-mpx amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Read QC and filtering, correctness of the pixel binding sequence sequences ([`pixelator single-cell-mpx preqc | pixelator adapterqc`](https://github.com/PixelgenTechnologies/pixelator))\n3. Assign a marker (barcode) to each read ([`pixelator single-cell-mpx demux`](https://github.com/PixelgenTechnologies/pixelator))\n4. Error correction, duplicate removal, compute read counts ([`pixelator single-cell-mpx collapse`](https://github.com/PixelgenTechnologies/pixelator))\n5. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-mpx graph`](https://github.com/PixelgenTechnologies/pixelator))\n6. Call and annotate cells ([`pixelator single-cell-mpx annotate`](https://github.com/PixelgenTechnologies/pixelator))\n7. Analyze the cells for polarization and colocalization ([`pixelator single-cell-mpx analysis`](https://github.com/PixelgenTechnologies/pixelator))\n8. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-mpx layout`](https://github.com/PixelgenTechnologies/pixelator))\n9. Report generation ([`pixelator single-cell-mpx report`](https://github.com/PixelgenTechnologies/pixelator))\n\n> [!WARNING]\n> Since Nextflow 23.07.0-edge, Nextflow no longer mounts the host's home directory when using Apptainer or Singularity.\n> This causes issues in some dependencies. As a workaround, you can revert to the old behavior by setting the environment variable\n> `NXF_APPTAINER_HOME_MOUNT` or `NXF_SINGULARITY_HOME_MOUNT` to `true` in the machine from which you launch the pipeline.\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/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.\n\nFirst, prepare a samplesheet with your input data that looks as follows (the exact values you need to input depend on the design and panel you are using):\n\n`samplesheet.csv`:\n\n```csv\nsample,design,panel,fastq_1,fastq_2\nsample1,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz\n```\n\nEach row represents a sample and gives the design, a panel file and the input fastq files.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> This version of the pipeline does not support conda environments, due to issues with upstream dependencies.\n> This means you cannot use the `conda` and `mamba` profiles. Please use `docker` or `singularity` instead.\n> We hope to add support for conda environments in the future.\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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written for [Pixelgen Technologies AB](https://www.pixelgen.com/) by:\n\n- Florian De Temmerman\n- Johan Dahlberg\n- Alvaro Martinez Barrio\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/pixelator for your analysis, please cite it using the following doi: [10.5281/zenodo.10015112](https://doi.org/10.5281/zenodo.10015112)\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\nYou can cite the molecular pixelation technology as follows:\n\n> **Molecular pixelation: spatial proteomics of single cells by sequencing.**\n>\n> Filip Karlsson, Tomasz Kallas, Divya Thiagarajan, Max Karlsson, Maud Schweitzer, Jose Fernandez Navarro, Louise Leijonancker, Sylvain Geny, Erik Pettersson, Jan Rhomberg-Kauert, Ludvig Larsson, Hanna van Ooijen, Stefan Petkov, Marcela Gonz\u00e1lez-Granillo, Jessica Bunz, Johan Dahlberg, Michele Simonetti, Prajakta Sathe, Petter Brodin, Alvaro Martinez Barrio & Simon Fredriksson\n>\n> _Nat Methods._ 2024 May 08. doi: [10.1038/s41592-024-02268-9](https://doi.org/10.1038/s41592-024-02268-9)\n", + "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)\n[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)\n[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.10015112-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.10015112)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-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-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics best-practice analysis pipeline for analysis of data from the\nMolecular Pixelation (MPX) and Proximity Network (PNA) assays. It takes a samplesheet as input and will process your data\nusing `pixelator` to produce a PXL file containing single-cell protein abundance and protein interactomics data.\n\n![](./docs/images/nf-core-pixelator-metromap.svg)\n\nDepending on the input data the pipeline will run different steps.\n\nFor PNA data, the pipeline will run the following steps:\n\n1. Do quality control checks of input reads and build amplicons ([`pixelator single-cell-pna amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Create groups of amplicons based on their marker assignments ([`pixelator single-cell-pna demux`](https://github.com/PixelgenTechnologies/pixelator))\n3. Derive original molecules to use as edge list downstream by error correcting, and counting input amplicons ([`pixelator single-cell-pna collapse`](https://github.com/PixelgenTechnologies/pixelator))\n4. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-pna graph`](https://github.com/PixelgenTechnologies/pixelator))\n5. Denoise the cell graphs ([`pixelator single-cell-pna denoise`](https://github.com/PixelgenTechnologies/pixelator))\n6. Analyze the spatial information in the cell graphs ([`pixelator single-cell-pna analysis`](https://github.com/PixelgenTechnologies/pixelator))\n7. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-pna layout`](https://github.com/PixelgenTechnologies/pixelator))\n8. Report generation ([`pixelator single-cell-pna report`](https://github.com/PixelgenTechnologies/pixelator))\n\nFor MPX data, the pipeline will run the following steps:\n\n1. Build an amplicons from the input reads ([`pixelator single-cell-mpx amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Read QC and filtering, correctness of the pixel binding sequence sequences ([`pixelator single-cell-mpx preqc | pixelator adapterqc`](https://github.com/PixelgenTechnologies/pixelator))\n3. Assign a marker (barcode) to each read ([`pixelator single-cell-mpx demux`](https://github.com/PixelgenTechnologies/pixelator))\n4. Error correction, duplicate removal, compute read counts ([`pixelator single-cell-mpx collapse`](https://github.com/PixelgenTechnologies/pixelator))\n5. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-mpx graph`](https://github.com/PixelgenTechnologies/pixelator))\n6. Call and annotate cells ([`pixelator single-cell-mpx annotate`](https://github.com/PixelgenTechnologies/pixelator))\n7. Analyze the cells for polarization and colocalization ([`pixelator single-cell-mpx analysis`](https://github.com/PixelgenTechnologies/pixelator))\n8. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-mpx layout`](https://github.com/PixelgenTechnologies/pixelator))\n9. Report generation ([`pixelator single-cell-mpx report`](https://github.com/PixelgenTechnologies/pixelator))\n\n> [!WARNING]\n> Since Nextflow 23.07.0-edge, Nextflow no longer mounts the host's home directory when using Apptainer or Singularity.\n> This causes issues in some dependencies. As a workaround, you can revert to the old behavior by setting the environment variable\n> `NXF_APPTAINER_HOME_MOUNT` or `NXF_SINGULARITY_HOME_MOUNT` to `true` in the machine from which you launch the pipeline.\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/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.\n\nFirst, prepare a samplesheet with your input data that looks as follows (the exact values you need to input depend on the design and panel you are using):\n\n`samplesheet.csv`:\n\n```csv\nsample,sample_alias,condition,design,panel,fastq_1,fastq_2\nsample1,s1,control,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz\n```\n\nEach row represents a sample and gives the design, a panel file and the input fastq files.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> This version of the pipeline does not support conda environments, due to issues with upstream dependencies.\n> This means you cannot use the `conda` and `mamba` profiles. Please use `docker` or `singularity` instead.\n> We hope to add support for conda environments in the future.\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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written for [Pixelgen Technologies AB](https://www.pixelgen.com/) by:\n\n- Florian De Temmerman\n- Johan Dahlberg\n- Alvaro Martinez Barrio\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/pixelator for your analysis, please cite it using the following doi: [10.5281/zenodo.10015112](https://doi.org/10.5281/zenodo.10015112)\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\nYou can cite the molecular pixelation technology as follows:\n\n> **Molecular pixelation: spatial proteomics of single cells by sequencing.**\n>\n> Filip Karlsson, Tomasz Kallas, Divya Thiagarajan, Max Karlsson, Maud Schweitzer, Jose Fernandez Navarro, Louise Leijonancker, Sylvain Geny, Erik Pettersson, Jan Rhomberg-Kauert, Ludvig Larsson, Hanna van Ooijen, Stefan Petkov, Marcela Gonz\u00e1lez-Granillo, Jessica Bunz, Johan Dahlberg, Michele Simonetti, Prajakta Sathe, Petter Brodin, Alvaro Martinez Barrio & Simon Fredriksson\n>\n> _Nat Methods._ 2024 May 08. doi: [10.1038/s41592-024-02268-9](https://doi.org/10.1038/s41592-024-02268-9)\n", "hasPart": [ { "@id": "main.nf" From 3c59e7cf488839e1a1ada4404e71fcebb64b8a68 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 26 Aug 2025 15:22:25 +0200 Subject: [PATCH 42/64] Fix path to input data --- tests/pna_es.nf.test | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/pna_es.nf.test b/tests/pna_es.nf.test index d1ac1b16..ec8d54c1 100644 --- a/tests/pna_es.nf.test +++ b/tests/pna_es.nf.test @@ -10,7 +10,8 @@ nextflow_pipeline { when { params { - pipelines_testdata_base_path = "$projectDir/../nf-core-pixelator-datasets/" + + pipelines_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/pixelator/" input = "$pipelines_testdata_base_path/samplesheet/pna/samplesheet_pna_es.csv" input_basedir = "$pipelines_testdata_base_path/testdata/pna/" outdir = "$outputDir" From 612634d9028739b1ccda48e7d38afbf30cbf1d37 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Tue, 26 Aug 2025 15:55:57 +0200 Subject: [PATCH 43/64] Fix input paths on stub tests --- tests/pna_es.nf.test | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/pna_es.nf.test b/tests/pna_es.nf.test index ec8d54c1..74fb13e9 100644 --- a/tests/pna_es.nf.test +++ b/tests/pna_es.nf.test @@ -50,9 +50,9 @@ nextflow_pipeline { when { params { - pipelines_testdata_base_path = "$projectDir/../nf-core-pixelator-datasets/" - input = "$pipelines_testdata_base_path/samplesheet/pna/samplesheet_pna_es.csv" - input_basedir = "$pipelines_testdata_base_path/testdata/pna/" + pipelines_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/pixelator/" + input = "$pipelines_testdata_base_path/samplesheet/pna/samplesheet_pna_es.csv" + input_basedir = "$pipelines_testdata_base_path/testdata/pna/" outdir = "$outputDir" skip_experiment_summary = false } From 5a98dfcf32d4814e75cf7a0fc9506b47a1da5760 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Wed, 27 Aug 2025 08:08:50 +0000 Subject: [PATCH 44/64] Update experiment summary to 0.4.3 --- modules/local/experiment_summary/main.nf | 4 ++-- modules/local/experiment_summary/tests/main.nf.test.snap | 8 ++++---- tests/pna_es.nf.test.snap | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/local/experiment_summary/main.nf b/modules/local/experiment_summary/main.nf index af1f5010..12ecc413 100644 --- a/modules/local/experiment_summary/main.nf +++ b/modules/local/experiment_summary/main.nf @@ -2,8 +2,8 @@ process EXPERIMENT_SUMMARY { tag "${meta.id}" label "process_medium" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelatores:0.4.2' - : 'quay.io/pixelgen-technologies/pixelatores:0.4.2'}" + ? 'quay.io/pixelgen-technologies/pixelatores:0.4.3' + : 'quay.io/pixelgen-technologies/pixelatores:0.4.3'}" input: val(meta) diff --git a/modules/local/experiment_summary/tests/main.nf.test.snap b/modules/local/experiment_summary/tests/main.nf.test.snap index 1f4e4bf2..0f6b5c0e 100644 --- a/modules/local/experiment_summary/tests/main.nf.test.snap +++ b/modules/local/experiment_summary/tests/main.nf.test.snap @@ -2,25 +2,25 @@ "versions": { "content": [ [ - "versions.yml:md5,727128de0a36c320a733109a17c6d6b4" + "versions.yml:md5,1c35ddcd59548b42fc730937c4263809" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-22T15:40:56.97952889" + "timestamp": "2025-08-27T07:10:33.460197901" }, "stub-versions": { "content": [ [ - "versions.yml:md5,727128de0a36c320a733109a17c6d6b4" + "versions.yml:md5,1c35ddcd59548b42fc730937c4263809" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-22T15:45:15.101730032" + "timestamp": "2025-08-27T07:13:26.253720282" } } \ No newline at end of file diff --git a/tests/pna_es.nf.test.snap b/tests/pna_es.nf.test.snap index 37fa0227..0ad2f235 100644 --- a/tests/pna_es.nf.test.snap +++ b/tests/pna_es.nf.test.snap @@ -4,7 +4,7 @@ 22, { "EXPERIMENT_SUMMARY": { - "experiment-summary": "0.4.2" + "experiment-summary": "0.4.3" }, "PIXELATOR_PNA_AMPLICON": { "pixelator": "0.21.2" @@ -122,7 +122,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-25T11:36:20.935253412" + "timestamp": "2025-08-27T08:04:38.973408779" }, "small - stub": { "content": [ From e0d7d61255fc5d8c2a6937f0336f1c6a5d1b0323 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Wed, 27 Aug 2025 16:52:57 +0200 Subject: [PATCH 45/64] Update CHANGELOG --- CHANGELOG.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 009d1f8b..57fbdc99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,21 +8,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements & fixes - Template update for nf-core/tools v3.3.2 - -## v2.0.0 - [date] - -### Enhancements & fixes - - Add a denoise step to the PNA workflow, that cleans data between the graph and analysis steps. - Move to using quay.io as the container source, to avoid issues with users needing to login to access the Github Container Registry. - Fix the PNA report not being generated. +- Add the `experiment_summary` step which generates the Proximity Experiment Summary report. ### Parameters -| Old parameter | New parameter | -| ------------- | ------------- | -| | | +| Old parameter | New parameter | +| ------------- | -------------------------------------------- | +| | `--skip_denoise` | +| | `--save_pna_denoise_pixelfile` | +| | `--pna_denoise_run_one_core_graph_denoising` | +| | `--pna_denoise_pval_threshold` | +| | `--pna_denoise_inflate_factor` | +| | `--pna_denoise_inflate_factor` | > [!NOTE] > Parameter has been **updated** if both old and new parameter information is present. @@ -31,9 +32,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Software dependencies -| Dependency | Old version | New version | -| ----------- | ----------- | ----------- | -| `pixelator` | 0.20.1 | 0.21.2 | +| Dependency | Old version | New version | +| ------------- | ----------- | ----------- | +| `pixelator` | 0.20.1 | 0.21.2 | +| `pixelatorES` | | 0.4.3 | > [!NOTE] > Dependency has been **updated** if both old and new parameter information is present. From 01cf407b522f45e0df638844fe55d2009dbe1fe3 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 07:46:36 +0200 Subject: [PATCH 46/64] Update metromap --- docs/images/nf-core-pixelator-metromap.svg | 75 ++++++++++++++++------ 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/docs/images/nf-core-pixelator-metromap.svg b/docs/images/nf-core-pixelator-metromap.svg index 4f7691c2..dcdb1786 100644 --- a/docs/images/nf-core-pixelator-metromap.svg +++ b/docs/images/nf-core-pixelator-metromap.svg @@ -1,6 +1,9 @@ + + + @@ -13,9 +16,9 @@ - + - + @@ -25,7 +28,7 @@ - + @@ -34,7 +37,7 @@ - + @@ -56,8 +59,10 @@ - - + + + + @@ -131,7 +136,7 @@ - + @@ -140,7 +145,7 @@ - + @@ -148,28 +153,28 @@ - + - + - + - + @@ -177,11 +182,20 @@ - + - + + + + + + + + + + @@ -189,10 +203,10 @@ - + - + @@ -201,7 +215,7 @@ - + @@ -228,6 +242,8 @@ + + @@ -410,6 +426,24 @@ + + + + + + + + + + + + + + + + + + @@ -445,12 +479,15 @@ - + - + + + + From 93d2c01b92cf9425f5f52960eb003959b9f970ca Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 08:06:08 +0200 Subject: [PATCH 47/64] Update pixelator to 0.21.4 --- CHANGELOG.md | 2 +- modules/local/collect_metadata/main.nf | 4 ++-- modules/local/pixelator/list_options/main.nf | 4 ++-- .../pixelator/single-cell-mpx/amplicon/main.nf | 4 ++-- .../pixelator/single-cell-mpx/analysis/main.nf | 4 ++-- .../pixelator/single-cell-mpx/annotate/main.nf | 4 ++-- .../pixelator/single-cell-mpx/collapse/main.nf | 4 ++-- .../pixelator/single-cell-mpx/demux/main.nf | 4 ++-- .../pixelator/single-cell-mpx/graph/main.nf | 4 ++-- .../pixelator/single-cell-mpx/layout/main.nf | 4 ++-- .../local/pixelator/single-cell-mpx/qc/main.nf | 4 ++-- .../pixelator/single-cell-mpx/report/main.nf | 4 ++-- .../pixelator/single-cell-pna/amplicon/main.nf | 4 ++-- .../pixelator/single-cell-pna/analysis/main.nf | 4 ++-- .../pixelator/single-cell-pna/collapse/main.nf | 4 ++-- .../single-cell-pna/combine_collapse/main.nf | 4 ++-- .../pixelator/single-cell-pna/demux/main.nf | 4 ++-- .../pixelator/single-cell-pna/denoise/main.nf | 4 ++-- .../pixelator/single-cell-pna/graph/main.nf | 4 ++-- .../pixelator/single-cell-pna/layout/main.nf | 4 ++-- .../pixelator/single-cell-pna/report/main.nf | 4 ++-- tests/default_mpx.nf.test.snap | 18 +++++++++--------- tests/default_pna.nf.test.snap | 18 +++++++++--------- tests/pna_es.nf.test.snap | 18 +++++++++--------- tests/save_all.nf.test.snap | 18 +++++++++--------- 25 files changed, 77 insertions(+), 77 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57fbdc99..f5496dc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,7 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Dependency | Old version | New version | | ------------- | ----------- | ----------- | -| `pixelator` | 0.20.1 | 0.21.2 | +| `pixelator` | 0.20.1 | 0.21.4 | | `pixelatorES` | | 0.4.3 | > [!NOTE] diff --git a/modules/local/collect_metadata/main.nf b/modules/local/collect_metadata/main.nf index 298e78ef..c8de2f97 100644 --- a/modules/local/collect_metadata/main.nf +++ b/modules/local/collect_metadata/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_COLLECT_METADATA { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" output: path "metadata.json", emit: metadata diff --git a/modules/local/pixelator/list_options/main.nf b/modules/local/pixelator/list_options/main.nf index fd3d8365..19a25fca 100644 --- a/modules/local/pixelator/list_options/main.nf +++ b/modules/local/pixelator/list_options/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LIST_OPTIONS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" output: path "design_options.txt", emit: designs diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf index a7d6ba88..b4b1f1cf 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-mpx/amplicon/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_AMPLICON { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/analysis/main.nf b/modules/local/pixelator/single-cell-mpx/analysis/main.nf index 7086ab98..7d118019 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/main.nf +++ b/modules/local/pixelator/single-cell-mpx/analysis/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANALYSIS { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/annotate/main.nf b/modules/local/pixelator/single-cell-mpx/annotate/main.nf index 2b1f4faf..bee0aaf6 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/main.nf +++ b/modules/local/pixelator/single-cell-mpx/annotate/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_ANNOTATE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(dataset), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/collapse/main.nf b/modules/local/pixelator/single-cell-mpx/collapse/main.nf index 65a7e331..adda020d 100644 --- a/modules/local/pixelator/single-cell-mpx/collapse/main.nf +++ b/modules/local/pixelator/single-cell-mpx/collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_COLLAPSE { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/demux/main.nf b/modules/local/pixelator/single-cell-mpx/demux/main.nf index 7c45a6de..eb281584 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/main.nf +++ b/modules/local/pixelator/single-cell-mpx/demux/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_DEMUX { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(reads), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-mpx/graph/main.nf b/modules/local/pixelator/single-cell-mpx/graph/main.nf index f9f6800b..222aa0b4 100644 --- a/modules/local/pixelator/single-cell-mpx/graph/main.nf +++ b/modules/local/pixelator/single-cell-mpx/graph/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_GRAPH { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(edge_list) diff --git a/modules/local/pixelator/single-cell-mpx/layout/main.nf b/modules/local/pixelator/single-cell-mpx/layout/main.nf index e3ad15f0..a7d04d91 100644 --- a/modules/local/pixelator/single-cell-mpx/layout/main.nf +++ b/modules/local/pixelator/single-cell-mpx/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_LAYOUT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-mpx/qc/main.nf b/modules/local/pixelator/single-cell-mpx/qc/main.nf index a7cd513a..7106fb2c 100644 --- a/modules/local/pixelator/single-cell-mpx/qc/main.nf +++ b/modules/local/pixelator/single-cell-mpx/qc/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_QC { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(reads) diff --git a/modules/local/pixelator/single-cell-mpx/report/main.nf b/modules/local/pixelator/single-cell-mpx/report/main.nf index e4a31887..3b01c1e9 100644 --- a/modules/local/pixelator/single-cell-mpx/report/main.nf +++ b/modules/local/pixelator/single-cell-mpx/report/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_REPORT { // TODO: Add conda back // conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/amplicon/main.nf b/modules/local/pixelator/single-cell-pna/amplicon/main.nf index 105fb373..60634075 100644 --- a/modules/local/pixelator/single-cell-pna/amplicon/main.nf +++ b/modules/local/pixelator/single-cell-pna/amplicon/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_AMPLICON { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(reads, arity: '1..*') diff --git a/modules/local/pixelator/single-cell-pna/analysis/main.nf b/modules/local/pixelator/single-cell-pna/analysis/main.nf index 562cd6ef..6e49f498 100644 --- a/modules/local/pixelator/single-cell-pna/analysis/main.nf +++ b/modules/local/pixelator/single-cell-pna/analysis/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_ANALYSIS { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/collapse/main.nf b/modules/local/pixelator/single-cell-pna/collapse/main.nf index ccf4cbc2..fe1dc992 100644 --- a/modules/local/pixelator/single-cell-pna/collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/collapse/main.nf @@ -7,8 +7,8 @@ process PIXELATOR_PNA_COLLAPSE { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf index c0e7e783..9d811ba0 100644 --- a/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf +++ b/modules/local/pixelator/single-cell-pna/combine_collapse/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_COMBINE_COLLAPSE { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(parquet_files, stageAs: "parquet/*"), path(json_report_files, stageAs: "reports/*") diff --git a/modules/local/pixelator/single-cell-pna/demux/main.nf b/modules/local/pixelator/single-cell-pna/demux/main.nf index ef88fb8d..7efdb68d 100644 --- a/modules/local/pixelator/single-cell-pna/demux/main.nf +++ b/modules/local/pixelator/single-cell-pna/demux/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_DEMUX { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(reads), path(panel_file), val(panel), val(design) diff --git a/modules/local/pixelator/single-cell-pna/denoise/main.nf b/modules/local/pixelator/single-cell-pna/denoise/main.nf index ac933dab..29fe7cea 100644 --- a/modules/local/pixelator/single-cell-pna/denoise/main.nf +++ b/modules/local/pixelator/single-cell-pna/denoise/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_DENOISE { // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/graph/main.nf b/modules/local/pixelator/single-cell-pna/graph/main.nf index 49e3b86b..0a2134b7 100644 --- a/modules/local/pixelator/single-cell-pna/graph/main.nf +++ b/modules/local/pixelator/single-cell-pna/graph/main.nf @@ -4,8 +4,8 @@ process PIXELATOR_PNA_GRAPH { label 'process_long' container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(edge_list), path(panel_file), val(panel) diff --git a/modules/local/pixelator/single-cell-pna/layout/main.nf b/modules/local/pixelator/single-cell-pna/layout/main.nf index cb5374cb..9d82d4ac 100644 --- a/modules/local/pixelator/single-cell-pna/layout/main.nf +++ b/modules/local/pixelator/single-cell-pna/layout/main.nf @@ -5,8 +5,8 @@ process PIXELATOR_PNA_LAYOUT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(data) diff --git a/modules/local/pixelator/single-cell-pna/report/main.nf b/modules/local/pixelator/single-cell-pna/report/main.nf index 15446af2..a46d643c 100644 --- a/modules/local/pixelator/single-cell-pna/report/main.nf +++ b/modules/local/pixelator/single-cell-pna/report/main.nf @@ -6,8 +6,8 @@ process PIXELATOR_PNA_REPORT { // TODO: Add conda // conda "bioconda::pixelator=0.18.2" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'quay.io/pixelgen-technologies/pixelator:0.21.2' - : 'quay.io/pixelgen-technologies/pixelator:0.21.2'}" + ? 'quay.io/pixelgen-technologies/pixelator:0.21.4' + : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: tuple val(meta), path(panel_file), val(panel) diff --git a/tests/default_mpx.nf.test.snap b/tests/default_mpx.nf.test.snap index 13c98abc..f5706a0d 100644 --- a/tests/default_mpx.nf.test.snap +++ b/tests/default_mpx.nf.test.snap @@ -63,31 +63,31 @@ 10, { "PIXELATOR_AMPLICON": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_ANALYSIS": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_ANNOTATE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_COLLAPSE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_DEMUX": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_GRAPH": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_LAYOUT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_QC": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_REPORT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "Workflow": { "nf-core/pixelator": "v2.0.0" diff --git a/tests/default_pna.nf.test.snap b/tests/default_pna.nf.test.snap index eecea6e7..170b95b2 100644 --- a/tests/default_pna.nf.test.snap +++ b/tests/default_pna.nf.test.snap @@ -63,31 +63,31 @@ 11, { "PIXELATOR_PNA_AMPLICON": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_ANALYSIS": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_COLLAPSE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_COMBINE_COLLAPSE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_DEMUX": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_DENOISE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_GRAPH": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_LAYOUT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_REPORT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "Workflow": { "nf-core/pixelator": "v2.0.0" diff --git a/tests/pna_es.nf.test.snap b/tests/pna_es.nf.test.snap index 0ad2f235..19ce2e5b 100644 --- a/tests/pna_es.nf.test.snap +++ b/tests/pna_es.nf.test.snap @@ -7,31 +7,31 @@ "experiment-summary": "0.4.3" }, "PIXELATOR_PNA_AMPLICON": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_ANALYSIS": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_COLLAPSE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_COMBINE_COLLAPSE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_DEMUX": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_DENOISE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_GRAPH": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_LAYOUT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_PNA_REPORT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "Workflow": { "nf-core/pixelator": "v2.0.0" diff --git a/tests/save_all.nf.test.snap b/tests/save_all.nf.test.snap index 0eaa1117..69babc7e 100644 --- a/tests/save_all.nf.test.snap +++ b/tests/save_all.nf.test.snap @@ -4,31 +4,31 @@ 10, { "PIXELATOR_AMPLICON": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_ANALYSIS": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_ANNOTATE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_COLLAPSE": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_DEMUX": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_GRAPH": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_LAYOUT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_QC": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "PIXELATOR_REPORT": { - "pixelator": "0.21.2" + "pixelator": "0.21.4" }, "Workflow": { "nf-core/pixelator": "v2.0.0" From f12ef07a38be48d7888f8b27c0f731ac68c451c0 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 06:46:41 +0000 Subject: [PATCH 48/64] Update test snapshots --- .../amplicon/tests/main.nf.test.snap | 8 +++---- .../analysis/tests/main.nf.test.snap | 20 ++++++++--------- .../annotate/tests/main.nf.test.snap | 22 +++++++++---------- .../collapse/tests/main.nf.test.snap | 8 +++---- .../demux/tests/main.nf.test.snap | 20 ++++++++--------- .../graph/tests/main.nf.test.snap | 8 +++---- .../layout/tests/main.nf.test.snap | 8 +++---- .../qc/tests/main.nf.test.snap | 8 +++---- .../report/tests/main.nf.test.snap | 14 ++++++------ .../analysis/tests/main.nf.test.snap | 6 ++--- .../collapse/tests/main.nf.test.snap | 12 +++++----- .../combine_collapse/tests/main.nf.test.snap | 6 ++--- .../denoise/tests/main.nf.test.snap | 6 ++--- .../graph/tests/main.nf.test.snap | 6 ++--- .../report/tests/main.nf.test.snap | 6 ++--- .../generate_reports/tests/main.nf.test.snap | 14 ++++++------ .../local/pna/tests/main.nf.test.snap | 20 ++++++++--------- 17 files changed, 96 insertions(+), 96 deletions(-) diff --git a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap index f802107a..8bedeeef 100644 --- a/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/amplicon/tests/main.nf.test.snap @@ -89,7 +89,7 @@ ] ], "4": [ - "versions.yml:md5,112f60cfc338b74eedf7916c1c9cc8d0" + "versions.yml:md5,bf50187b2cc40ff86ce55c588f21876d" ], "log": [ [ @@ -136,14 +136,14 @@ ] ], "versions": [ - "versions.yml:md5,112f60cfc338b74eedf7916c1c9cc8d0" + "versions.yml:md5,bf50187b2cc40ff86ce55c588f21876d" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-28T11:06:32.414933066" + "timestamp": "2025-08-28T06:21:19.924751125" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap index f267f6a7..24d082f5 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap @@ -20,25 +20,25 @@ "panel": "human-sc-immunology-spatial-proteomics-1", "technology": "mpx" }, - "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,62ff235b5ed8a284e80b33ddb44447f8" + "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,f2597ab5ea83e5257f8c96330df16484" ] ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-28T11:09:04.990954175" + "timestamp": "2025-08-28T06:22:38.301344052" }, "pxl": { "content": [ - "metadata.json:md5,f2fb857ccf3ee1b600c6903b7406444d" + "metadata.json:md5,57e6b62b023056bbe857829a5796bb7a" ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-28T11:09:05.148335083" + "timestamp": "2025-08-28T06:22:38.357425594" }, "Test MPX analysis - stub": { "content": [ @@ -103,7 +103,7 @@ ] ], "5": [ - "versions.yml:md5,21f7010150c44ce0f97dfe8a429047a1" + "versions.yml:md5,da2799a306092c4927321a66c981c358" ], "all_results": [ [ @@ -165,14 +165,14 @@ ] ], "versions": [ - "versions.yml:md5,21f7010150c44ce0f97dfe8a429047a1" + "versions.yml:md5,da2799a306092c4927321a66c981c358" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:48:02.493689902" + "timestamp": "2025-08-28T06:21:35.05538814" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap index 02efbd00..f51fe949 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap @@ -9,7 +9,7 @@ "panel": "human-sc-immunology-spatial-proteomics-1", "technology": "mpx" }, - "sample01_1k_pbmcs_scsp_v1_immunology1.report.json:md5,915764b836bcf12f634b19b6040d6577" + "sample01_1k_pbmcs_scsp_v1_immunology1.report.json:md5,46497e565adecc96af90e90faffaf372" ] ], [ @@ -20,25 +20,25 @@ "panel": "human-sc-immunology-spatial-proteomics-1", "technology": "mpx" }, - "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,9800856aba41c57197792e8e53f22dc0" + "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,d665597d94d168a92632ec419a79617f" ] ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-28T11:10:08.025851237" + "timestamp": "2025-08-28T06:22:57.930988153" }, "pxl": { "content": [ - "metadata.json:md5,e76b6fc27e46ad184c9466af70964707" + "metadata.json:md5,74c84444915851c0ef2e79f8c50a5265" ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:50:50.354921348" + "timestamp": "2025-08-28T06:22:57.937828169" }, "Test MPX annotate - stub": { "content": [ @@ -103,7 +103,7 @@ ] ], "5": [ - "versions.yml:md5,c9f01dab6f97bd11145a7e81ef32e930" + "versions.yml:md5,9946c23bd209322c9d07000cdba9b30f" ], "all_results": [ [ @@ -165,14 +165,14 @@ ] ], "versions": [ - "versions.yml:md5,c9f01dab6f97bd11145a7e81ef32e930" + "versions.yml:md5,9946c23bd209322c9d07000cdba9b30f" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:50:20.225789489" + "timestamp": "2025-08-28T06:22:43.841118883" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap index 0e88b070..afda146c 100644 --- a/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/collapse/tests/main.nf.test.snap @@ -89,7 +89,7 @@ ] ], "4": [ - "versions.yml:md5,85c7963b2a468838af56848f81fdfc9a" + "versions.yml:md5,5506d89774209f01bda4884fc87ffc8d" ], "collapsed": [ [ @@ -136,14 +136,14 @@ ] ], "versions": [ - "versions.yml:md5,85c7963b2a468838af56848f81fdfc9a" + "versions.yml:md5,5506d89774209f01bda4884fc87ffc8d" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:51:04.702563951" + "timestamp": "2025-08-28T06:23:03.875538255" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap index d83836f5..3568e9ee 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap @@ -58,7 +58,7 @@ ] ], "5": [ - "versions.yml:md5,cd0c54ca6e440d09fc572411f909a3c2" + "versions.yml:md5,bbc9fbac3b95e696dacd1284c006c59b" ], "failed": [ [ @@ -116,15 +116,15 @@ ] ], "versions": [ - "versions.yml:md5,cd0c54ca6e440d09fc572411f909a3c2" + "versions.yml:md5,bbc9fbac3b95e696dacd1284c006c59b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:51:38.053562093" + "timestamp": "2025-08-28T06:23:19.18525599" }, "Test MPX demux - SCSP v1 | Immunology-I": { "content": [ @@ -243,14 +243,14 @@ ] ], [ - "versions.yml:md5,cd0c54ca6e440d09fc572411f909a3c2" + "versions.yml:md5,bbc9fbac3b95e696dacd1284c006c59b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:51:59.053951882" + "timestamp": "2025-08-28T06:23:31.586233595" }, "report_json": { "content": [ @@ -262,7 +262,7 @@ ], "cutadapt_version": "5.0", "python_version": "3.12.11", - "cores": 4, + "cores": 16, "input": { "path1": "sample01_1k_pbmcs_scsp_v1_immunology1.processed.fastq.gz", "path2": null, @@ -2868,8 +2868,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-28T11:11:51.071540948" + "timestamp": "2025-08-28T06:23:31.865830713" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap index 5a172b1b..823758f6 100644 --- a/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/graph/tests/main.nf.test.snap @@ -104,7 +104,7 @@ ] ], "5": [ - "versions.yml:md5,089da310eb4b534a7844ab771c93c35a" + "versions.yml:md5,a1a93db4f529ac7673675c34960d3f38" ], "all_results": [ [ @@ -166,14 +166,14 @@ ] ], "versions": [ - "versions.yml:md5,089da310eb4b534a7844ab771c93c35a" + "versions.yml:md5,a1a93db4f529ac7673675c34960d3f38" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:52:11.627188377" + "timestamp": "2025-08-28T06:23:37.515356389" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap index 759507a7..c864b113 100644 --- a/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/layout/tests/main.nf.test.snap @@ -103,7 +103,7 @@ ] ], "5": [ - "versions.yml:md5,6eb7476e297586ca6830d7eb7fa5c083" + "versions.yml:md5,edb14a73a037227849c470ce2d784137" ], "all_results": [ [ @@ -165,14 +165,14 @@ ] ], "versions": [ - "versions.yml:md5,6eb7476e297586ca6830d7eb7fa5c083" + "versions.yml:md5,edb14a73a037227849c470ce2d784137" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:52:43.202829382" + "timestamp": "2025-08-28T06:23:51.114411733" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap index 29b66219..b479e5ce 100644 --- a/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/qc/tests/main.nf.test.snap @@ -97,7 +97,7 @@ ] ], "16": [ - "versions.yml:md5,bdb6b9ae999e232953034e12b3835197" + "versions.yml:md5,50b1b1443a2edf9e786504f2b832303f" ], "2": [ [ @@ -382,14 +382,14 @@ ] ], "versions": [ - "versions.yml:md5,bdb6b9ae999e232953034e12b3835197" + "versions.yml:md5,50b1b1443a2edf9e786504f2b832303f" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:53:22.782634095" + "timestamp": "2025-08-28T06:24:09.42162242" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap index cdb175d3..feb311d0 100644 --- a/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/report/tests/main.nf.test.snap @@ -25,7 +25,7 @@ ] ], "2": [ - "versions.yml:md5,1e51a33962d1bfa5e856c80118f924f3" + "versions.yml:md5,d0e22c07271c3e669b70e748959a0ffb" ], "log": [ [ @@ -50,27 +50,27 @@ ] ], "versions": [ - "versions.yml:md5,1e51a33962d1bfa5e856c80118f924f3" + "versions.yml:md5,d0e22c07271c3e669b70e748959a0ffb" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:54:11.047723994" + "timestamp": "2025-08-28T06:24:33.575047855" }, "Test MPX report - SCSP v1 | Immunology-I": { "content": [ null, [ - "versions.yml:md5,1e51a33962d1bfa5e856c80118f924f3" + "versions.yml:md5,d0e22c07271c3e669b70e748959a0ffb" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:54:29.81524307" + "timestamp": "2025-08-28T06:24:42.203502039" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap index 9c8a58ad..50925ed0 100644 --- a/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/analysis/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "versions": { "content": [ [ - "versions.yml:md5,cb111c2479c0716e77af331a52743451" + "versions.yml:md5,e04e75f13369e2ee24b9114c2d9d86cb" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:58:37.130668357" + "timestamp": "2025-08-28T06:25:43.662466623" }, "report_json": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap index f29458b2..77f5aeb7 100644 --- a/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/collapse/tests/main.nf.test.snap @@ -59,26 +59,26 @@ "versions": { "content": [ [ - "versions.yml:md5,c3ca37ec135b9455a855ff59c6ee8019" + "versions.yml:md5,a39e602f828076585b3e314469f16297" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:59:00.136057252" + "timestamp": "2025-08-28T06:25:53.937757371" }, "multi_versions": { "content": [ [ - "versions.yml:md5,c3ca37ec135b9455a855ff59c6ee8019" + "versions.yml:md5,a39e602f828076585b3e314469f16297" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:59:21.486766006" + "timestamp": "2025-08-28T06:26:04.668538674" }, "header": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap index 7fbe685c..80b383cb 100644 --- a/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/combine_collapse/tests/main.nf.test.snap @@ -24,13 +24,13 @@ ] ], [ - "versions.yml:md5,5b7f60bcecd4a25456148724b21ae96e" + "versions.yml:md5,8dd7d21ecf0788170bb71a252525f8a4" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T11:59:39.205308002" + "timestamp": "2025-08-28T06:26:13.840544303" } } \ No newline at end of file diff --git a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap index c06b6e53..960c3d9c 100644 --- a/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/denoise/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "versions": { "content": [ [ - "versions.yml:md5,75e9df3e1d5df7d1b9b4c6d91dcf24eb" + "versions.yml:md5,f5d5ee43ffc7aa33ba098ca7c17411a5" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-27T14:53:31.633773358" + "timestamp": "2025-08-28T06:27:05.223650997" }, "report_json": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap index c0cba433..cce8274c 100644 --- a/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/graph/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "versions": { "content": [ [ - "versions.yml:md5,3233a3a62435cd2b7f758d666d88dbd1" + "versions.yml:md5,c2b5282ea89815e5acfa1149ebc9e585" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T12:00:59.148872357" + "timestamp": "2025-08-28T06:27:13.929297872" }, "report_json": { "content": [ diff --git a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap index 4eaab316..5b38bc80 100644 --- a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap @@ -2,13 +2,13 @@ "versions": { "content": [ [ - "versions.yml:md5,277fdd55773113498ea1c9177f927674" + "versions.yml:md5,b8568f43655813b75e8cbd407a14661d" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T14:02:28.335957996" + "timestamp": "2025-08-28T06:27:29.902626458" } } \ No newline at end of file diff --git a/subworkflows/local/generate_reports/tests/main.nf.test.snap b/subworkflows/local/generate_reports/tests/main.nf.test.snap index 98994b45..21d2572c 100644 --- a/subworkflows/local/generate_reports/tests/main.nf.test.snap +++ b/subworkflows/local/generate_reports/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "Test MPX Generate reports - SCSP v1 | Immunology-I": { "content": [ [ - "versions.yml:md5,60536960ed050075f961dfda9ebc5b63" + "versions.yml:md5,1ddc3d1ac0e1d5d985ecff623d902eaf" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T12:03:43.256650917" + "timestamp": "2025-08-28T06:27:44.57710868" }, "Test MPX Generate reports - stub": { "content": [ @@ -26,7 +26,7 @@ ] ], "1": [ - "versions.yml:md5,60536960ed050075f961dfda9ebc5b63" + "versions.yml:md5,1ddc3d1ac0e1d5d985ecff623d902eaf" ], "pixelator_reports": [ [ @@ -40,14 +40,14 @@ ] ], "versions": [ - "versions.yml:md5,60536960ed050075f961dfda9ebc5b63" + "versions.yml:md5,1ddc3d1ac0e1d5d985ecff623d902eaf" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.2" + "nextflow": "25.04.6" }, - "timestamp": "2025-06-26T12:03:22.411914082" + "timestamp": "2025-08-28T06:27:35.996352215" } } \ No newline at end of file diff --git a/subworkflows/local/pna/tests/main.nf.test.snap b/subworkflows/local/pna/tests/main.nf.test.snap index d9eb54d5..010581b2 100644 --- a/subworkflows/local/pna/tests/main.nf.test.snap +++ b/subworkflows/local/pna/tests/main.nf.test.snap @@ -2,21 +2,21 @@ "versions": { "content": [ [ - "versions.yml:md5,1940270b85b14a85f8a1e2c0cc4175c1", - "versions.yml:md5,1dd43496474a2059ddc33ff345a31e89", - "versions.yml:md5,30045858d998c6bda107080bc5fe7e7c", - "versions.yml:md5,3600aa4bba044df44d77a8ae00aa4c65", - "versions.yml:md5,70f4e761e87d8807946fffc5484a586c", - "versions.yml:md5,c12c7c40e0b739debcbe762b4d77dc34", - "versions.yml:md5,c83065ff66c109dabfbd7513ae4df588", - "versions.yml:md5,de911a9e581de7e1788418f9e5b8a178", - "versions.yml:md5,faf4f6d15fed3e88e021eedb9302afdf" + "versions.yml:md5,2b76dc677520f080b38a835b42d9234f", + "versions.yml:md5,45d66075b78e83ca12377ce2a8f00a41", + "versions.yml:md5,69408cfc661c191ca717e63d776a730f", + "versions.yml:md5,72ca8b012eed35b9680b7579c1a4cdcc", + "versions.yml:md5,7fc022b3ebfc95329e61f5333d13cfb6", + "versions.yml:md5,8682cffd6978e21db0c33352e6b129ef", + "versions.yml:md5,cb883de819d1f83c67c8f2ce4fcc22d6", + "versions.yml:md5,dafb241aadf5e309e534b364769a5f85", + "versions.yml:md5,fd40ac67016fc5a1d101f556bd9b4987" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-26T10:04:26.945335816" + "timestamp": "2025-08-28T06:29:54.809801941" } } \ No newline at end of file From a3767931d24cac0d6d1b8466cb4cd7372198f0ce Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 07:26:28 +0000 Subject: [PATCH 49/64] Make sure test profile generates es --- conf/test_pna.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test_pna.config b/conf/test_pna.config index 89995f01..018591df 100644 --- a/conf/test_pna.config +++ b/conf/test_pna.config @@ -25,7 +25,7 @@ params { pna_demux_output_chunk_reads = '50K' // Input data - input = params.pipelines_testdata_base_path + '/samplesheet/pna/samplesheet_pna.csv' + input = params.pipelines_testdata_base_path + '/samplesheet/pna/samplesheet_pna_es.csv' input_basedir = params.pipelines_testdata_base_path + '/testdata/pna' pna_graph_component_size_min_threshold = 100 From d117afd5a93137e1003e64f706f6541a8c04a148 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 09:38:31 +0200 Subject: [PATCH 50/64] Make sure docs mention we do not support conda --- docs/usage.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 0c77a545..b43f9ea2 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -215,8 +215,10 @@ 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. -> [!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. +> [!WARNING] +> This version of the pipeline does not support conda environments, due to issues with upstream dependencies. +> This means you cannot use the `conda` and `mamba` profiles. Please use `docker` or `singularity` instead. +> We hope to add support for conda environments in the future. 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). @@ -242,8 +244,6 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - 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). -- `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. :::warning Since Nextflow 23.07.0-edge, Nextflow no longer mounts the host's home directory when using Apptainer or Singularity. From 8f75d2d38d99d74a64a94e686f4ee1d3248cbc60 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 09:39:53 +0200 Subject: [PATCH 51/64] Remove conda profile from tests --- .github/workflows/nf-test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index e7b58449..ddd8e832 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -68,7 +68,8 @@ jobs: fail-fast: false matrix: shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} - profile: [conda, docker, singularity] + # For now remove the conda profile, since we do not support it + profile: [docker, singularity] isMain: - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} # Exclude conda and singularity on dev From 4b07f820388c627e1b5d1fd179f6614fc9313b03 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 10:03:04 +0200 Subject: [PATCH 52/64] Fix demux snapshot --- .../pixelator/single-cell-mpx/demux/tests/main.nf.test.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap index 3568e9ee..e879dcbd 100644 --- a/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/demux/tests/main.nf.test.snap @@ -262,7 +262,7 @@ ], "cutadapt_version": "5.0", "python_version": "3.12.11", - "cores": 16, + "cores": 4, "input": { "path1": "sample01_1k_pbmcs_scsp_v1_immunology1.processed.fastq.gz", "path2": null, From d2e69a8cb4872a265bc103b149df4ff63fcd6d3d Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 14:18:44 +0200 Subject: [PATCH 53/64] Simplify analysis tests --- .../single-cell-mpx/analysis/tests/main.nf.test | 11 ++--------- .../single-cell-mpx/analysis/tests/main.nf.test.snap | 10 ---------- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test index 1b821ad1..3d5e712d 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test @@ -55,15 +55,8 @@ nextflow_process { process.out.metadata ).match() }, - { - with (process.out.dataset.get(0)) { - assert path(get(1)).zip.extract("adata.h5ad").exists() - assert path(get(1)).zip.extract("edgelist.parquet").exists() - assert snapshot( - path(get(1)).zip.extract("metadata.json") - ).match("pxl") - } - }, + {assert path(process.out.dataset.get(0).get(1)).exists()}, + {assert process.out.dataset.get(0).get(1).endsWith(".pxl")}, { with (process.out.log) { assert path(get(0).get(1)).readLines().last().contains("Finished pixelator analysis") diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap index 24d082f5..7b20beec 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap @@ -30,16 +30,6 @@ }, "timestamp": "2025-08-28T06:22:38.301344052" }, - "pxl": { - "content": [ - "metadata.json:md5,57e6b62b023056bbe857829a5796bb7a" - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-28T06:22:38.357425594" - }, "Test MPX analysis - stub": { "content": [ { From 5a50b23dcda301277d289b97a656d136962646e5 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 17:22:04 +0200 Subject: [PATCH 54/64] Simplify analysis tests more --- .../analysis/tests/main.nf.test | 7 ++--- .../analysis/tests/main.nf.test.snap | 31 ------------------- 2 files changed, 2 insertions(+), 36 deletions(-) diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test index 3d5e712d..11e6d695 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test @@ -50,11 +50,8 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - process.out.report_json, - process.out.metadata - ).match() - }, + {assert path(process.out.report_json.get(0).get(1)).exists()}, + {assert path(process.out.metadata.get(0).get(1)).exists()}, {assert path(process.out.dataset.get(0).get(1)).exists()}, {assert process.out.dataset.get(0).get(1).endsWith(".pxl")}, { diff --git a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap index 7b20beec..4816bb31 100644 --- a/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/analysis/tests/main.nf.test.snap @@ -1,35 +1,4 @@ { - "Test MPX analysis - SCSP v1 | Immunology-I": { - "content": [ - [ - [ - { - "id": "sample01_1k_pbmcs_scsp_v1_immunology1", - "design": "D21", - "panel": "human-sc-immunology-spatial-proteomics-1", - "technology": "mpx" - }, - "sample01_1k_pbmcs_scsp_v1_immunology1.report.json:md5,5db6473f8c444276e3b287231fc87481" - ] - ], - [ - [ - { - "id": "sample01_1k_pbmcs_scsp_v1_immunology1", - "design": "D21", - "panel": "human-sc-immunology-spatial-proteomics-1", - "technology": "mpx" - }, - "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,f2597ab5ea83e5257f8c96330df16484" - ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-28T06:22:38.301344052" - }, "Test MPX analysis - stub": { "content": [ { From 1279e1369b8fbb4fee2dab5792efc818b3153a0a Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Thu, 28 Aug 2025 17:25:28 +0200 Subject: [PATCH 55/64] Simplify annotate tests --- .../annotate/tests/main.nf.test | 7 ++--- .../annotate/tests/main.nf.test.snap | 31 ------------------- 2 files changed, 2 insertions(+), 36 deletions(-) diff --git a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test index 88f480ec..72b07014 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test @@ -57,11 +57,8 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - process.out.report_json, - process.out.metadata - ).match() - }, + {assert path(process.out.report_json.get(0).get(1)).exists()}, + {assert path(process.out.metadata.get(0).get(1)).exists()}, { with (process.out.dataset.get(0)) { assert path(get(1)).zip.extract("adata.h5ad").exists() diff --git a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap index f51fe949..998b652e 100644 --- a/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-mpx/annotate/tests/main.nf.test.snap @@ -1,35 +1,4 @@ { - "Test MPX annotate - SCSP v1 | Immunology-I": { - "content": [ - [ - [ - { - "id": "sample01_1k_pbmcs_scsp_v1_immunology1", - "design": "D21", - "panel": "human-sc-immunology-spatial-proteomics-1", - "technology": "mpx" - }, - "sample01_1k_pbmcs_scsp_v1_immunology1.report.json:md5,46497e565adecc96af90e90faffaf372" - ] - ], - [ - [ - { - "id": "sample01_1k_pbmcs_scsp_v1_immunology1", - "design": "D21", - "panel": "human-sc-immunology-spatial-proteomics-1", - "technology": "mpx" - }, - "sample01_1k_pbmcs_scsp_v1_immunology1.meta.json:md5,d665597d94d168a92632ec419a79617f" - ] - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-28T06:22:57.930988153" - }, "pxl": { "content": [ "metadata.json:md5,74c84444915851c0ef2e79f8c50a5265" From 46ecd152cfd30c09f2c759a0ce12d7aaf0212234 Mon Sep 17 00:00:00 2001 From: Pouria Tajvar <31826342+ptajvar@users.noreply.github.com> Date: Fri, 29 Aug 2025 10:53:09 +0200 Subject: [PATCH 56/64] switch layout process label to process_high Now that layout uses less memory we can also allocate less RAM and more CPUs to speed up the process. --- modules/local/pixelator/single-cell-pna/layout/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/pixelator/single-cell-pna/layout/main.nf b/modules/local/pixelator/single-cell-pna/layout/main.nf index 9d82d4ac..d2836806 100644 --- a/modules/local/pixelator/single-cell-pna/layout/main.nf +++ b/modules/local/pixelator/single-cell-pna/layout/main.nf @@ -1,6 +1,6 @@ process PIXELATOR_PNA_LAYOUT { tag "${meta.id}" - label 'process_high_memory' + label 'process_high' // TODO: Add conda // conda "bioconda::pixelator=0.18.2" From 61aeec8d5b65354c2bff6b4d3718ab420304b744 Mon Sep 17 00:00:00 2001 From: Pouria Tajvar <31826342+ptajvar@users.noreply.github.com> Date: Fri, 29 Aug 2025 11:13:31 +0200 Subject: [PATCH 57/64] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5496dc1..de62ef79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements & fixes +- Switch PIXELATOR_PNA_LAYOUT process label to process_high to allocate less memory. - Template update for nf-core/tools v3.3.2 - Add a denoise step to the PNA workflow, that cleans data between the graph and analysis steps. - Move to using quay.io as the container source, to avoid issues with users needing to From e8c8214603295ad373eeb70be860d334c98312e6 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 1 Sep 2025 09:05:55 +0200 Subject: [PATCH 58/64] Bump version to 2.1.0 --- .nf-core.yml | 2 +- nextflow.config | 2 +- ro-crate-metadata.json | 16 ++++++++-------- tests/save_all.nf.test.snap | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index c5bca58a..17389c31 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -22,4 +22,4 @@ template: - fastqc - multiqc - igenomes - version: 2.0.0 + version: 2.1.0 diff --git a/nextflow.config b/nextflow.config index af4e3b8e..03cbbae8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -418,7 +418,7 @@ manifest { mainScript = 'main.nf' defaultBranch = 'master' nextflowVersion = '!>=24.10.5' - version = '2.0.0' + version = '2.1.0' doi = '10.1101/2023.06.05.543770' } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 59ce6c87..f1702efb 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "Stable", - "datePublished": "2025-07-08T11:38:51+00:00", + "datePublished": "2025-09-01T07:00:42+00:00", "description": "

\n \n \n \"nf-core/pixelator\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/pixelator/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/pixelator/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/pixelator/actions/workflows/linting.yml)\n[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/pixelator/results)\n[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.10015112-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.10015112)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-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-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\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/pixelator)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23pixelator-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/pixelator)[![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/pixelator** is a bioinformatics best-practice analysis pipeline for analysis of data from the\nMolecular Pixelation (MPX) and Proximity Network (PNA) assays. It takes a samplesheet as input and will process your data\nusing `pixelator` to produce a PXL file containing single-cell protein abundance and protein interactomics data.\n\n![](./docs/images/nf-core-pixelator-metromap.svg)\n\nDepending on the input data the pipeline will run different steps.\n\nFor PNA data, the pipeline will run the following steps:\n\n1. Do quality control checks of input reads and build amplicons ([`pixelator single-cell-pna amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Create groups of amplicons based on their marker assignments ([`pixelator single-cell-pna demux`](https://github.com/PixelgenTechnologies/pixelator))\n3. Derive original molecules to use as edge list downstream by error correcting, and counting input amplicons ([`pixelator single-cell-pna collapse`](https://github.com/PixelgenTechnologies/pixelator))\n4. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-pna graph`](https://github.com/PixelgenTechnologies/pixelator))\n5. Denoise the cell graphs ([`pixelator single-cell-pna denoise`](https://github.com/PixelgenTechnologies/pixelator))\n6. Analyze the spatial information in the cell graphs ([`pixelator single-cell-pna analysis`](https://github.com/PixelgenTechnologies/pixelator))\n7. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-pna layout`](https://github.com/PixelgenTechnologies/pixelator))\n8. Report generation ([`pixelator single-cell-pna report`](https://github.com/PixelgenTechnologies/pixelator))\n\nFor MPX data, the pipeline will run the following steps:\n\n1. Build an amplicons from the input reads ([`pixelator single-cell-mpx amplicon`](https://github.com/PixelgenTechnologies/pixelator))\n2. Read QC and filtering, correctness of the pixel binding sequence sequences ([`pixelator single-cell-mpx preqc | pixelator adapterqc`](https://github.com/PixelgenTechnologies/pixelator))\n3. Assign a marker (barcode) to each read ([`pixelator single-cell-mpx demux`](https://github.com/PixelgenTechnologies/pixelator))\n4. Error correction, duplicate removal, compute read counts ([`pixelator single-cell-mpx collapse`](https://github.com/PixelgenTechnologies/pixelator))\n5. Compute the components of the graph from the edge list in order to create putative cells ([`pixelator single-cell-mpx graph`](https://github.com/PixelgenTechnologies/pixelator))\n6. Call and annotate cells ([`pixelator single-cell-mpx annotate`](https://github.com/PixelgenTechnologies/pixelator))\n7. Analyze the cells for polarization and colocalization ([`pixelator single-cell-mpx analysis`](https://github.com/PixelgenTechnologies/pixelator))\n8. Generate 3D graph layouts for visualization of cells ([`pixelator single-cell-mpx layout`](https://github.com/PixelgenTechnologies/pixelator))\n9. Report generation ([`pixelator single-cell-mpx report`](https://github.com/PixelgenTechnologies/pixelator))\n\n> [!WARNING]\n> Since Nextflow 23.07.0-edge, Nextflow no longer mounts the host's home directory when using Apptainer or Singularity.\n> This causes issues in some dependencies. As a workaround, you can revert to the old behavior by setting the environment variable\n> `NXF_APPTAINER_HOME_MOUNT` or `NXF_SINGULARITY_HOME_MOUNT` to `true` in the machine from which you launch the pipeline.\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/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.\n\nFirst, prepare a samplesheet with your input data that looks as follows (the exact values you need to input depend on the design and panel you are using):\n\n`samplesheet.csv`:\n\n```csv\nsample,sample_alias,condition,design,panel,fastq_1,fastq_2\nsample1,s1,control,pna-2,proxiome-immuno-155,sample1_R1_001.fastq.gz,sample1_R2_001.fastq.gz\n```\n\nEach row represents a sample and gives the design, a panel file and the input fastq files.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/pixelator \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> This version of the pipeline does not support conda environments, due to issues with upstream dependencies.\n> This means you cannot use the `conda` and `mamba` profiles. Please use `docker` or `singularity` instead.\n> We hope to add support for conda environments in the future.\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/usage/getting_started/configuration#custom-configuration-files).\n\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/pixelator/usage) and the [parameter documentation](https://nf-co.re/pixelator/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/pixelator/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/pixelator/output).\n\n## Credits\n\nnf-core/pixelator was originally written for [Pixelgen Technologies AB](https://www.pixelgen.com/) by:\n\n- Florian De Temmerman\n- Johan Dahlberg\n- Alvaro Martinez Barrio\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#pixelator` channel](https://nfcore.slack.com/channels/pixelator) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/pixelator for your analysis, please cite it using the following doi: [10.5281/zenodo.10015112](https://doi.org/10.5281/zenodo.10015112)\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\nYou can cite the molecular pixelation technology as follows:\n\n> **Molecular pixelation: spatial proteomics of single cells by sequencing.**\n>\n> Filip Karlsson, Tomasz Kallas, Divya Thiagarajan, Max Karlsson, Maud Schweitzer, Jose Fernandez Navarro, Louise Leijonancker, Sylvain Geny, Erik Pettersson, Jan Rhomberg-Kauert, Ludvig Larsson, Hanna van Ooijen, Stefan Petkov, Marcela Gonz\u00e1lez-Granillo, Jessica Bunz, Johan Dahlberg, Michele Simonetti, Prajakta Sathe, Petter Brodin, Alvaro Martinez Barrio & Simon Fredriksson\n>\n> _Nat Methods._ 2024 May 08. doi: [10.1038/s41592-024-02268-9](https://doi.org/10.1038/s41592-024-02268-9)\n", "hasPart": [ { @@ -105,7 +105,7 @@ }, "mentions": [ { - "@id": "#53f691f9-b217-48af-b193-bcbb3af540f7" + "@id": "#62e83080-a3fc-4320-a06a-f4464e6d22fd" } ], "name": "nf-core/pixelator" @@ -141,7 +141,7 @@ } ], "dateCreated": "", - "dateModified": "2025-07-08T11:38:51Z", + "dateModified": "2025-09-01T09:00:42Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -175,10 +175,10 @@ }, "url": [ "https://github.com/nf-core/pixelator", - "https://nf-co.re/pixelator/2.0.0/" + "https://nf-co.re/pixelator/2.1.0/" ], "version": [ - "2.0.0" + "2.1.0" ] }, { @@ -194,11 +194,11 @@ "version": "!>=24.10.5" }, { - "@id": "#53f691f9-b217-48af-b193-bcbb3af540f7", + "@id": "#62e83080-a3fc-4320-a06a-f4464e6d22fd", "@type": "TestSuite", "instance": [ { - "@id": "#2d94b44c-70ec-40e4-b8ea-98052871e6e3" + "@id": "#1a6258f9-30b9-430d-992c-cfa2adbc7f41" } ], "mainEntity": { @@ -207,7 +207,7 @@ "name": "Test suite for nf-core/pixelator" }, { - "@id": "#2d94b44c-70ec-40e4-b8ea-98052871e6e3", + "@id": "#1a6258f9-30b9-430d-992c-cfa2adbc7f41", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/pixelator", "resource": "repos/nf-core/pixelator/actions/workflows/nf-test.yml", diff --git a/tests/save_all.nf.test.snap b/tests/save_all.nf.test.snap index 69babc7e..905127cd 100644 --- a/tests/save_all.nf.test.snap +++ b/tests/save_all.nf.test.snap @@ -31,7 +31,7 @@ "pixelator": "0.21.4" }, "Workflow": { - "nf-core/pixelator": "v2.0.0" + "nf-core/pixelator": "v2.1.0" } }, [ From 6877a86045950d613d07e708a0f04c98bdc2118a Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 1 Sep 2025 08:34:58 +0000 Subject: [PATCH 59/64] Update test snapshots --- tests/default_mpx.nf.test.snap | 6 +++--- tests/default_pna.nf.test.snap | 6 +++--- tests/pna_es.nf.test.snap | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/default_mpx.nf.test.snap b/tests/default_mpx.nf.test.snap index f5706a0d..48d51328 100644 --- a/tests/default_mpx.nf.test.snap +++ b/tests/default_mpx.nf.test.snap @@ -90,7 +90,7 @@ "pixelator": "0.21.4" }, "Workflow": { - "nf-core/pixelator": "v2.0.0" + "nf-core/pixelator": "v2.1.0" } }, [ @@ -145,8 +145,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-28T15:20:55.474023282" + "timestamp": "2025-09-01T08:00:33.053912672" } } \ No newline at end of file diff --git a/tests/default_pna.nf.test.snap b/tests/default_pna.nf.test.snap index 170b95b2..9d2804a4 100644 --- a/tests/default_pna.nf.test.snap +++ b/tests/default_pna.nf.test.snap @@ -90,7 +90,7 @@ "pixelator": "0.21.4" }, "Workflow": { - "nf-core/pixelator": "v2.0.0" + "nf-core/pixelator": "v2.1.0" } }, [ @@ -144,8 +144,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "25.04.6" }, - "timestamp": "2025-07-28T15:27:26.808862581" + "timestamp": "2025-09-01T08:03:18.225519143" } } \ No newline at end of file diff --git a/tests/pna_es.nf.test.snap b/tests/pna_es.nf.test.snap index 19ce2e5b..8efff243 100644 --- a/tests/pna_es.nf.test.snap +++ b/tests/pna_es.nf.test.snap @@ -34,7 +34,7 @@ "pixelator": "0.21.4" }, "Workflow": { - "nf-core/pixelator": "v2.0.0" + "nf-core/pixelator": "v2.1.0" } }, [ @@ -122,7 +122,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-27T08:04:38.973408779" + "timestamp": "2025-09-01T08:09:15.051954045" }, "small - stub": { "content": [ From e0d3d8a14cd0b345e5a8be481b70996944eb34a6 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 1 Sep 2025 13:24:56 +0200 Subject: [PATCH 60/64] Prepare the changelog --- CHANGELOG.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de62ef79..ff51cb01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements & fixes -- Switch PIXELATOR_PNA_LAYOUT process label to process_high to allocate less memory. -- Template update for nf-core/tools v3.3.2 -- Add a denoise step to the PNA workflow, that cleans data between the graph and analysis steps. -- Move to using quay.io as the container source, to avoid issues with users needing to - login to access the Github Container Registry. -- Fix the PNA report not being generated. -- Add the `experiment_summary` step which generates the Proximity Experiment Summary report. +- Move to using quay.io as the container source, to avoid issues with users needing to login to access the + Github Container Registry by @johandahlberg in [#140](https://github.com/nf-core/pixelator/pull/140) +- Add a denoise step to the PNA workflow, that cleans data between the graph and analysis steps + by @johandahlberg in [#140](https://github.com/nf-core/pixelator/pull/140) +- Fix the PNA report not being generated by @fbdtemme in [#142](https://github.com/nf-core/pixelator/pull/142) +- Template update for nf-core/tools v3.3.2 by @fbdtemme in [#143](https://github.com/nf-core/pixelator/pull/143) +- Add the `experiment_summary` step which generates the Proximity Experiment Summary report by @johandahlberg in [#144](https://github.com/nf-core/pixelator/pull/144) +- Switch PIXELATOR_PNA_LAYOUT process label to process_high to allocate less memory by @ptajvar in [#147](https://github.com/nf-core/pixelator/pull/147) ### Parameters From 94446da2df34e885f06d00c7bf764bf5d140b336 Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Mon, 1 Sep 2025 14:04:44 +0200 Subject: [PATCH 61/64] Fix full test samplesheet path --- conf/test_full.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test_full.config b/conf/test_full.config index 1cb281af..106e2708 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -14,6 +14,6 @@ params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' - input = params.pipelines_testdata_base_path + "/pixelator/samplesheet/mpx/samplesheet_full.csv" + input = params.pipelines_testdata_base_path + "/samplesheet/mpx/samplesheet_full.csv" input_basedir = "s3://pixelgen-technologies-datasets/nf-core-pixelator/testdata/full/" } From ea5bcc972e5566a799cf48b9b0dee228b0ee865a Mon Sep 17 00:00:00 2001 From: Johan Dahlberg Date: Wed, 17 Sep 2025 09:54:29 +0200 Subject: [PATCH 62/64] Remove hard-coded version in ES stub --- modules/local/experiment_summary/main.nf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/local/experiment_summary/main.nf b/modules/local/experiment_summary/main.nf index 12ecc413..7f7c5413 100644 --- a/modules/local/experiment_summary/main.nf +++ b/modules/local/experiment_summary/main.nf @@ -42,11 +42,9 @@ process EXPERIMENT_SUMMARY { """ touch experiment-summary.html - # Hard coding the version for the stub, since for some - # reason it work in nf-test otherwise. cat <<-END_VERSIONS > versions.yml "${task.process}": - experiment-summary: 0.4.2 + experiment-summary: \$(Rscript -e 'cat(as.character(packageVersion("pixelatorES")), "\\n")') END_VERSIONS """ } From a2ce064e0650bdcfa01b11c2e683c6eef4996030 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Wed, 17 Sep 2025 14:26:27 +0200 Subject: [PATCH 63/64] Refactor PNA_GENERATE_REPORT subworkflow --- CHANGELOG.md | 3 +- modules/local/experiment_summary/main.nf | 20 +- .../experiment_summary/tests/main.nf.test | 214 +++++++++--------- .../pixelator/single-cell-pna/report/main.nf | 19 +- .../single-cell-pna/report/tests/main.nf.test | 54 +++-- .../report/tests/main.nf.test.snap | 2 +- subworkflows/local/pna/generate_reports.nf | 111 ++++----- 7 files changed, 207 insertions(+), 216 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff51cb01..d485bee2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ 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). -## [[2.1.0](https://github.com/nf-core/pixelator/releases/tag/x.x.x)] - YYYY-MM-DD +## [[2.1.0](https://github.com/nf-core/pixelator/releases/tag/2.1.0)] - 2025-09-17 ### Enhancements & fixes @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Template update for nf-core/tools v3.3.2 by @fbdtemme in [#143](https://github.com/nf-core/pixelator/pull/143) - Add the `experiment_summary` step which generates the Proximity Experiment Summary report by @johandahlberg in [#144](https://github.com/nf-core/pixelator/pull/144) - Switch PIXELATOR_PNA_LAYOUT process label to process_high to allocate less memory by @ptajvar in [#147](https://github.com/nf-core/pixelator/pull/147) +- Simplify PNA_GENERATE_REPORTS subworkflow by @fbdtemme in [#150](https://github.com/nf-core/pixelator/pull/50) ### Parameters diff --git a/modules/local/experiment_summary/main.nf b/modules/local/experiment_summary/main.nf index 7f7c5413..af6f39a5 100644 --- a/modules/local/experiment_summary/main.nf +++ b/modules/local/experiment_summary/main.nf @@ -1,21 +1,23 @@ process EXPERIMENT_SUMMARY { tag "${meta.id}" label "process_medium" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'quay.io/pixelgen-technologies/pixelatores:0.4.3' : 'quay.io/pixelgen-technologies/pixelatores:0.4.3'}" input: - val(meta) path samplesheet_path - path amplicon_data , stageAs: "results/amplicon/*" - path demux_data , stageAs: "results/demux/*" - path collapse_data , stageAs: "results/collapse/*" - path graph_data , stageAs: "results/graph/*" - path denoise_data , stageAs: "results/denoise/*" - path analysis_data , stageAs: "results/analysis/*" - path layout_data , stageAs: "results/layout/*" - + tuple ( + val(meta), + path(amplicon_data , stageAs: "results/amplicon/*"), + path(demux_data , stageAs: "results/demux/*"), + path(collapse_data , stageAs: "results/collapse/*"), + path(graph_data , stageAs: "results/graph/*"), + path(denoise_data , stageAs: "results/denoise/*"), + path(analysis_data , stageAs: "results/analysis/*"), + path(layout_data , stageAs: "results/layout/*") + ) output: tuple val(meta), path("*experiment-summary.html") , emit: html diff --git a/modules/local/experiment_summary/tests/main.nf.test b/modules/local/experiment_summary/tests/main.nf.test index f8766e6a..93dfea28 100644 --- a/modules/local/experiment_summary/tests/main.nf.test +++ b/modules/local/experiment_summary/tests/main.nf.test @@ -12,59 +12,60 @@ nextflow_process { when { process { """ - input[0] = [ id:'all', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ] - // samplesheet - input[1] = file(params.pipelines_testdata_base_path + 'samplesheet/pna/samplesheet_pna_es.csv', checkIfExists: true) - // amplicon - input[2] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // demux - input[3] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // (combined collapse) - input[4] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // graph - input[5] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // denoise - input[6] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // analysis - input[7] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // layout - input[8] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.layout.pxl', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.layout.pxl', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + input[0] = [ file(params.pipelines_testdata_base_path + 'samplesheet/pna/samplesheet_pna_es.csv', checkIfExists: true) ] + input[1] = [ + [id:'all', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ], + // amplicon + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // demux + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // (combined collapse) + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // graph + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // denoise + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // analysis + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // layout + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] ] """ } @@ -90,59 +91,60 @@ nextflow_process { when { process { """ - input[0] = [ id:'all', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ] - // samplesheet - input[1] = file(params.pipelines_testdata_base_path + 'samplesheet/pna/samplesheet_pna_es.csv', checkIfExists: true) - // amplicon - input[2] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // demux - input[3] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // (combined collapse) - input[4] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // graph - input[5] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // denoise - input[6] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // analysis - input[7] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), - ] - // layout - input[8] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.layout.pxl', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.layout.pxl', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + input[0] = [ file(params.pipelines_testdata_base_path + 'samplesheet/pna/samplesheet_pna_es.csv', checkIfExists: true) ] + input[1] = [ + [id:'all', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ], + // amplicon + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // demux + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // (combined collapse) + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // graph + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // denoise + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // analysis + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ], + // layout + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.layout.pxl', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_unfiltered_S7.report.json', checkIfExists: true), + ] ] """ } diff --git a/modules/local/pixelator/single-cell-pna/report/main.nf b/modules/local/pixelator/single-cell-pna/report/main.nf index a46d643c..b119cfaf 100644 --- a/modules/local/pixelator/single-cell-pna/report/main.nf +++ b/modules/local/pixelator/single-cell-pna/report/main.nf @@ -10,13 +10,18 @@ process PIXELATOR_PNA_REPORT { : 'quay.io/pixelgen-technologies/pixelator:0.21.4'}" input: - tuple val(meta), path(panel_file), val(panel) - path amplicon_data, stageAs: "results/amplicon/*" - path demux_data, stageAs: "results/demux/*" - path collapse_data, stageAs: "results/collapse/*" - path graph_data, stageAs: "results/graph/*" - path analysis_data, stageAs: "results/analysis/*" - path layout_data, stageAs: "results/layout/*" + tuple ( + val(meta), + path(panel_file), + val(panel), + path(amplicon_data, stageAs: "results/amplicon/*"), + path(demux_data, stageAs: "results/demux/*"), + path(collapse_data, stageAs: "results/collapse/*"), + path(graph_data, stageAs: "results/graph/*"), + path(denoise_data, stageAs: "results/denoise/*"), + path(analysis_data, stageAs: "results/analysis/*"), + path(layout_data, stageAs: "results/layout/*") + ) output: tuple val(meta), path("report/*.html"), emit: report diff --git a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test index 2172392c..078f2094 100644 --- a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test +++ b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test @@ -16,31 +16,35 @@ nextflow_process { [ id:'PNA055_Sample07_filtered_S7', design:'pna-2', panel:'proxiome-immuno-155', technology:'pna' ], [], 'proxiome-immuno-155', - ] - input[1] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - ] - input[2] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - ] - input[3] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - ] - input[4] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.graph.pxl', checkIfExists: true), - ] - input[5] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), - ] - input[6] = [ - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), - file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/amplicon/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + ], + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/demux/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + ], + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/collapse/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + ], + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/graph/PNA055_Sample07_filtered_S7.graph.pxl', checkIfExists: true), + ], + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/denoise/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + ], + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/analysis/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + ], + [ + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.meta.json', checkIfExists: true), + file(params.pipelines_testdata_base_path + 'testdata/pna/modules/layout/PNA055_Sample07_filtered_S7.report.json', checkIfExists: true), + ] ] """ } diff --git a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap index 5b38bc80..f186d128 100644 --- a/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap +++ b/modules/local/pixelator/single-cell-pna/report/tests/main.nf.test.snap @@ -9,6 +9,6 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-08-28T06:27:29.902626458" + "timestamp": "2025-09-17T14:22:24.534737422" } } \ No newline at end of file diff --git a/subworkflows/local/pna/generate_reports.nf b/subworkflows/local/pna/generate_reports.nf index c769903e..cf5383cd 100644 --- a/subworkflows/local/pna/generate_reports.nf +++ b/subworkflows/local/pna/generate_reports.nf @@ -42,81 +42,58 @@ workflow PNA_GENERATE_REPORTS { return [id, data] } - ch_panel_col = panel_files.map { meta, data -> [meta.id, data] } - - ch_amplicon_col = amplicon_data.map { meta, data -> [ meta.id, data] } - ch_demux_col = demux_data.map { meta, data -> [ meta.id, data] } - ch_collapse_col = collapse_data.map { meta, data -> [ meta.id, data] } - ch_graph_col = graph_data.map { meta, data -> [meta.id, data] } - ch_analysis_col = analysis_data.map { meta, data -> [meta.id, data] } - ch_denoise_col = denoise_data.map { meta, data -> [meta.id, data] } - ch_layout_col = layout_data.map { meta, data -> [meta.id, data] } - ch_report_data = ch_meta_col - .concat ( ch_panel_col ) - .concat ( ch_amplicon_col ) - .concat ( ch_demux_col ) - .concat ( ch_collapse_col ) - .concat ( ch_graph_col ) - .concat ( ch_denoise_col) - .concat ( ch_analysis_col ) - .concat ( ch_layout_col ) - .groupTuple (size: 9) - - ch_split_report_data = ch_report_data.multiMap { - _id, data -> - panel_files: [ data[0], data[1], data[1] ? null : data[0].panel ] - amplicon: data[2] ? data[2].flatten() : [] - demux: data[3] ? data[3].flatten() : [] - collapse: data[4] ? data[4].flatten() : [] - graph: data[5] ? data[5].flatten() : [] - denoise: data[6] ? data[6].flatten() : [] - analysis: data[7] ? data[7].flatten() : [] - layout: data[8] ? data[8].flatten() : [] - } + .join( panel_files.map { meta, data -> [ meta.id, data ] } ) + .join( amplicon_data.map { meta, data -> [ meta.id, data ] } ) + .join( demux_data.map { meta, data -> [ meta.id, data ] } ) + .join( collapse_data.map { meta, data -> [ meta.id, data ] } ) + .join( graph_data.map { meta, data -> [ meta.id, data ] } ) + .join( denoise_data.map { meta, data -> [ meta.id, data ] } ) + .join( analysis_data.map { meta, data -> [ meta.id, data ] } ) + .join( layout_data.map { meta, data -> [ meta.id, data ] } ) + + ch_pna_report_input = ch_report_data.map { + _id, meta, panels, amplicon, demux, collapse, graph, denoise, analysis, layout -> + [meta, panels, panels ? null : meta.panel, amplicon, demux, collapse, graph, denoise, analysis, layout] + } - PIXELATOR_PNA_REPORT ( - ch_split_report_data.panel_files, - ch_split_report_data.amplicon, - ch_split_report_data.demux, - ch_split_report_data.collapse, - ch_split_report_data.graph, - ch_split_report_data.analysis, - ch_split_report_data.layout - ) - - ch_meta_grouped = ch_report_data.map { _id, data -> data[0] }.flatten().collect().map { - def newMeta = [:] - newMeta.id = "all-samples" - newMeta.samples = it.collect { e -> e.id } - return newMeta + PIXELATOR_PNA_REPORT ( ch_pna_report_input ) + + // Accumulate results across all samples grouped per stage + + def accumulator = [ + meta: [ id: "all-samples", samples: [] ], + amplicon: [], + demux: [], + collapse: [], + graph: [], + denoise: [], + analysis: [], + layout: [] + ] + + ch_grouped_data = ch_report_data.reduce ( accumulator ) { acc, val -> + def (_id, meta, _panels, amplicon, demux, collapse, graph, denoise, analysis, layout) = val + acc.meta.samples += meta.id + acc.amplicon += amplicon + acc.demux += demux + acc.collapse += collapse + acc.graph += graph + acc.denoise += denoise + acc.analysis += analysis + acc.layout += layout + return acc + }.map { acc -> + [ acc.meta, acc.amplicon, acc.demux, acc.collapse, acc.graph, acc.denoise, acc.analysis, acc.layout ] } - ch_amplicon_flat = ch_split_report_data.amplicon.flatten().collect() - ch_demux_flat = ch_split_report_data.demux.flatten().collect() - ch_collapse_flat = ch_split_report_data.collapse.flatten().collect() - ch_graph_flat = ch_split_report_data.graph.flatten().collect() - ch_denoise_flat = ch_split_report_data.denoise.flatten().collect() - ch_analysis_flat = ch_split_report_data.analysis.flatten().collect() - ch_layout_flat = ch_split_report_data.layout.flatten().collect() - - if (!skip_experiment_summary) { - EXPERIMENT_SUMMARY( - ch_meta_grouped, - samplesheet, - ch_amplicon_flat, - ch_demux_flat, - ch_collapse_flat, - ch_graph_flat, - ch_denoise_flat, - ch_analysis_flat, - ch_layout_flat - ) + EXPERIMENT_SUMMARY ( samplesheet, ch_grouped_data ) + ch_versions = ch_versions.mix(EXPERIMENT_SUMMARY.out.versions) ch_experiment_summary = EXPERIMENT_SUMMARY.out.html } else { - ch_experiment_summary = ch_meta_grouped.combine(Channel.of([])) + ch_experiment_summary = ch_grouped_data.map { it -> it[0] }.combine(Channel.of([])) } ch_versions = ch_versions.mix(PIXELATOR_PNA_REPORT.out.versions.first()) From f4fee3bb43a758b3392cc9b688718fa3af845b57 Mon Sep 17 00:00:00 2001 From: Florian De Temmerman Date: Wed, 17 Sep 2025 17:09:31 +0200 Subject: [PATCH 64/64] Fix experiment-summary running on MPX samples --- subworkflows/local/pna/generate_reports.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/subworkflows/local/pna/generate_reports.nf b/subworkflows/local/pna/generate_reports.nf index cf5383cd..eb62302f 100644 --- a/subworkflows/local/pna/generate_reports.nf +++ b/subworkflows/local/pna/generate_reports.nf @@ -86,6 +86,8 @@ workflow PNA_GENERATE_REPORTS { }.map { acc -> [ acc.meta, acc.amplicon, acc.demux, acc.collapse, acc.graph, acc.denoise, acc.analysis, acc.layout ] } + // Filter out the entry if it just contains empty lists, eg when no PNA samples are present + .filter { it -> it[0].samples.size() > 0 } if (!skip_experiment_summary) { EXPERIMENT_SUMMARY ( samplesheet, ch_grouped_data )