diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b290e090..97c8c97f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,20 +1,20 @@ { "name": "nfcore", - "image": "nfcore/gitpod:latest", - "remoteUser": "gitpod", - "runArgs": ["--privileged"], + "image": "nfcore/devcontainer:latest", - // Configure tool-specific properties. - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": { - "python.defaultInterpreterPath": "/opt/conda/bin/python" - }, + "remoteUser": "root", + "privileged": true, - // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } + "remoteEnv": { + // Workspace path on the host for mounting with docker-outside-of-docker + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" + }, + + "onCreateCommand": "./.devcontainer/setup.sh", + + "hostRequirements": { + "cpus": 4, + "memory": "16gb", + "storage": "32gb" } } diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100755 index 00000000..a01e7369 --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Customise the terminal command prompt +echo "export PROMPT_DIRTRIM=2" >> $HOME/.bashrc +echo "export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] '" >> $HOME/.bashrc +export PROMPT_DIRTRIM=2 +export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] ' + +# Update Nextflow +nextflow self-update + +# Update welcome message +echo "Welcome to the nf-core/seqinspector devcontainer!" > /usr/local/etc/vscode-dev-containers/first-run-notice.txt diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index dd9ffa53..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 Readme -[README.md] -indent_style = unset - -# ignore python -[*.{py,md}] -indent_style = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ee3dfbd0..683399e5 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# nf-core/seqinspector: Contributing Guidelines +# `nf-core/seqinspector`: Contributing Guidelines Hi there! Many thanks for taking an interest in improving nf-core/seqinspector. @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/seqinspector, the standard workflow 1. Check that there isn't already an issue about your idea in the [nf-core/seqinspector issues](https://github.com/nf-core/seqinspector/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/seqinspector repository](https://github.com/nf-core/seqinspector) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core pipelines schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -40,7 +40,7 @@ There are typically two types of tests that run: ### Lint tests `nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core pipelines lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. @@ -55,9 +55,9 @@ These tests are run both with the latest available version of `Nextflow` and als :warning: Only in the unlikely and regretful event of a release happening with a bug. -- On your own fork, make a new branch `patch` based on `upstream/master`. +- On your own fork, make a new branch `patch` based on `upstream/main` or `upstream/master`. - Fix the bug, and bump version (X.Y.Z+1). -- A PR should be made on `master` from patch to directly this particular bug. +- Open a pull-request from `patch` to `main`/`master` with the changes. ## Getting help @@ -65,32 +65,38 @@ For further information/help, please consult the [nf-core/seqinspector documenta ## Pipeline contribution conventions -To make the nf-core/seqinspector code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. +To make the `nf-core/seqinspector` code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. ### Adding a new step If you wish to contribute a new step, please use the following coding standards: -1. Define the corresponding input channel into your new process from the expected previous process channel +1. Define the corresponding input channel into your new process from the expected previous process channel. 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new parameters to `nextflow.config` with a default (see below). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). +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`. +### Things to consider regarding displaying results for a new tool + +- If a MultiQC module exist for the tool, use the standard settings for it to start with. +- If no Multiqc module exists, the results of the tool should be made available in the results directory. +- If a tool doesn’t produce output files, the stdout should be channeled into a output file that can be accessible from the outdir of the pipeline. + ### Default values -Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. +Parameters should be initialised / defined with default values within the `params` scope in `nextflow.config`. -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. +Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. @@ -103,7 +109,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### Nextflow version bumping -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core pipelines bump-version --nextflow . [min-nf-version]` ### Images and figures diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5bcf7a88..6e640abf 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,7 +9,6 @@ body: - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - [nf-core/seqinspector pipeline documentation](https://nf-co.re/seqinspector/usage) - - type: textarea id: description attributes: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5d27c53a..9dcf6a33 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,8 +17,8 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/seqi - [ ] If you've fixed a bug or added code that should be tested, add tests! - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/seqinspector/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/seqinspector _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). -- [ ] Ensure the test suite passes (`nf-test test main.nf.test -profile test,docker`). +- [ ] Make sure your code lints (`nf-core pipelines lint`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. 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..356bc683 --- /dev/null +++ b/.github/actions/nf-test/action.yml @@ -0,0 +1,111 @@ +name: "nf-test Action" +description: "Runs nf-test with common setup steps" +inputs: + profile: + description: "Profile to use" + required: true + shard: + description: "Shard number for this CI job" + required: true + total_shards: + description: "Total number of test shards(NOT the total number of matrix jobs)" + required: true + paths: + description: "Test paths" + required: true + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +runs: + using: "composite" + steps: + - name: Setup Nextflow + uses: nf-core/setup-nextflow@v2 + with: + version: "${{ env.NXF_VERSION }}" + + - name: Set up Python + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 + with: + python-version: "3.14" + + - 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 + channels: conda-forge,bioconda + channel-priority: strict + conda-remove-defaults: true + + - name: Run nf-test + shell: bash + env: + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + run: | + nf-test test \ + --profile=+${{ inputs.profile }} \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --ci \ + --changed-since HEAD^ \ + --verbose \ + --tap=test.tap \ + --shard ${{ inputs.shard }}/${{ inputs.total_shards }} + + # Save the absolute path of the test.tap file to the output + echo "tap_file_path=$(realpath test.tap)" >> $GITHUB_OUTPUT + + - name: Generate test summary + if: always() + shell: bash + run: | + # Add header if it doesn't exist (using a token file to track this) + if [ ! -f ".summary_header" ]; then + echo "# 🚀 nf-test results" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Status | Test Name | Profile | Shard |" >> $GITHUB_STEP_SUMMARY + echo "|:------:|-----------|---------|-------|" >> $GITHUB_STEP_SUMMARY + touch .summary_header + fi + + if [ -f test.tap ]; then + while IFS= read -r line; do + if [[ $line =~ ^ok ]]; then + test_name="${line#ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ✅ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + elif [[ $line =~ ^not\ ok ]]; then + test_name="${line#not ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ❌ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + done < test.tap + else + echo "| ⚠️ | No test results found | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + + - name: Clean up + if: always() + shell: bash + run: | + sudo rm -rf /home/ubuntu/tests/ diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 1b153a69..9cec6234 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,39 +1,45 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the main/master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: + workflow_dispatch: + pull_request_review: + types: [submitted] release: types: [published] - workflow_dispatch: + jobs: - run-tower: + run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/seqinspector' + # 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/seqinspector' && github.event.review.state == 'approved' && (github.event.pull_request.base.ref == 'master' || github.event.pull_request.base.ref == 'main') || github.event_name == 'workflow_dispatch' || github.event_name == 'release' runs-on: ubuntu-latest steps: - - name: Launch workflow via tower + - name: Set revision variable + id: revision + run: | + echo "revision=${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'release') && github.sha || 'dev' }}" >> "$GITHUB_OUTPUT" + + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 - # TODO nf-core: You can customise AWS full pipeline tests as required - # Add full size test data (but still relatively small datasets for few samples) - # on the `test_full.config` test runs with only one set of parameters with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/seqinspector/work-${{ github.sha }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} + revision: ${{ steps.revision.outputs.revision }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/seqinspector/work-${{ steps.revision.outputs.revision }} parameters: | { "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/seqinspector/results-${{ github.sha }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/seqinspector/results-${{ steps.revision.outputs.revision }}" } profiles: test_full - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: - name: Tower debug log file + name: Seqera Platform debug log file path: | tower_action_*.log tower_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 6def58c8..b3346993 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -5,29 +5,29 @@ name: nf-core AWS test on: workflow_dispatch: jobs: - run-tower: + run-platform: name: Run AWS tests if: github.repository == 'nf-core/seqinspector' runs-on: ubuntu-latest steps: - # Launch workflow using Tower CLI tool action - - name: Launch workflow via tower + # Launch workflow using Seqera Platform CLI tool action + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + workspace_id: ${{ vars.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + compute_env: ${{ vars.TOWER_COMPUTE_ENV }} revision: ${{ github.sha }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/seqinspector/work-${{ github.sha }} + workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/seqinspector/work-${{ github.sha }} parameters: | { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/seqinspector/results-test-${{ github.sha }}" + "outdir": "s3://${{ vars.AWS_S3_BUCKET }}/seqinspector/results-test-${{ github.sha }}" } profiles: test - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: - name: Tower debug log file + name: Seqera Platform debug log file path: | tower_action_*.log tower_action_*.json diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 5a2fffda..ffe93094 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -1,15 +1,17 @@ name: nf-core branch protection -# This workflow is triggered on PRs to master branch on the repository -# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +# This workflow is triggered on PRs to `main`/`master` branch on the repository +# It fails when someone tries to make a PR against the nf-core `main`/`master` branch instead of `dev` on: pull_request_target: - branches: [master] + branches: + - main + - master jobs: test: runs-on: ubuntu-latest steps: - # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches + # PRs to the nf-core repo main/master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches - name: Check PRs if: github.repository == 'nf-core/seqinspector' run: | @@ -22,7 +24,7 @@ jobs: uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 with: message: | - ## This PR is against the `master` branch :x: + ## This PR is against the `${{github.event.pull_request.base.ref}}` branch :x: * Do not close this PR * Click _Edit_ and change the `base` to `dev` @@ -32,9 +34,9 @@ jobs: Hi @${{ github.event.pull_request.user.login }}, - It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `master` branch. - The `master` branch on nf-core repositories should always contain code from the latest release. - Because of this, PRs to `master` are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. + It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) ${{github.event.pull_request.base.ref}} branch. + The ${{github.event.pull_request.base.ref}} branch on nf-core repositories should always contain code from the latest release. + Because of this, PRs to ${{github.event.pull_request.base.ref}} are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page. Note that even after this, the test will continue to show as failing until you push a new commit. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 7a2be9af..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: nf-core CI -# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors -on: - push: - branches: - - dev - pull_request: - release: - types: [published] - -env: - NXF_ANSI_LOG: false - -concurrency: - group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" - cancel-in-progress: true - -jobs: - test: - name: Run pipeline with test data - # Only run on push if this is the nf-core dev branch (merged PRs) - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/seqinspector') }}" - runs-on: ubuntu-latest - strategy: - matrix: - NXF_VER: - - "23.04.0" - - "latest-everything" - steps: - - name: Check out pipeline code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 - - - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 - with: - version: "${{ matrix.NXF_VER }}" - - - name: Disk space cleanup - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: Run pipeline with test data - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix - run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 0b6b1f27..6adb0fff 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@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10 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 08622fd5..45884ff9 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -1,72 +1,134 @@ -name: Test successful pipeline download with 'nf-core download' +name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually -# - when a PR is opened or reopened to master branch +# - when a PR is opened or reopened to main/master branch # - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev. on: workflow_dispatch: inputs: testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core download." + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." required: true default: "dev" pull_request: - types: - - opened - branches: - - master - pull_request_target: branches: + - main - master env: NXF_ANSI_LOG: false jobs: + configure: + runs-on: ubuntu-latest + outputs: + REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} + REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} + REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} + steps: + - name: Get the repository name and current branch + id: get_repo_properties + run: | + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" + download: runs-on: ubuntu-latest + needs: configure steps: - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + uses: nf-core/setup-nextflow@v2 + + - name: Disk space cleanup + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.11" + python-version: "3.14" architecture: "x64" - - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 with: - singularity-version: 3.8.3 + apptainer-version: 1.3.4 - name: Install dependencies run: | python -m pip install --upgrade pip - pip install git+https://github.com/nf-core/tools.git@dev + pip install git+https://github.com/nf-core/tools.git - - name: Get the repository name and current branch set as environment variable + - name: Make a cache directory for the container images run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV} - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + mkdir -p ./singularity_container_images - name: Download the pipeline env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core download ${{ env.REPO_LOWERCASE }} \ - --revision ${{ env.REPO_BRANCH }} \ - --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \ + --revision ${{ needs.configure.outputs.REPO_BRANCH }} \ + --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ --container-cache-utilisation 'amend' \ - --download-configuration + --download-configuration 'yes' - name: Inspect download - run: tree ./${{ env.REPOTITLE_LOWERCASE }} + run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} - - name: Run the downloaded pipeline + - name: Inspect container images + run: tree ./singularity_container_images | tee ./container_initial + + - name: Count the downloaded number of container images + id: count_initial + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Initial container image count: $image_count" + echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT" + + - name: Run the downloaded pipeline (stub) + id: stub_run_pipeline + continue-on-error: true + env: + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images + NXF_SINGULARITY_HOME_MOUNT: true + run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + - name: Run the downloaded pipeline (stub run not supported) + id: run_pipeline + if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results + + - name: Count the downloaded number of container images + id: count_afterwards + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Post-pipeline run container image count: $image_count" + echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" + + - name: Compare container image counts + id: count_comparison + run: | + if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} + final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} + difference=$((final_count - initial_count)) + echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" + tree ./singularity_container_images > ./container_afterwards + diff ./container_initial ./container_afterwards + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi + + - name: Upload Nextflow logfile for debugging purposes + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + 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 80% rename from .github/workflows/fix-linting.yml rename to .github/workflows/fix_linting.yml index 45e06861..205093c1 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix_linting.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: token: ${{ secrets.nf_core_bot_auth_token }} # indication that the linting is being fixed - name: React on comment - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: eyes @@ -32,9 +32,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: 3.11 + python-version: "3.14" - name: Install pre-commit run: pip install pre-commit @@ -47,7 +47,7 @@ jobs: # indication that the linting has finished - name: react if linting finished succesfully if: steps.pre-commit.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: "+1" @@ -67,21 +67,21 @@ jobs: - name: react if linting errors were fixed id: react-if-fixed if: steps.commit-and-push.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: hooray - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: confused - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: issue-number: ${{ github.event.issue.number }} body: | diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 073e1876..7a527a34 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,11 +1,8 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: - push: - branches: - - dev pull_request: release: types: [published] @@ -14,13 +11,12 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - - name: Set up Python 3.11 - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - name: Set up Python 3.14 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: 3.11 - cache: "pip" + python-version: "3.14" - name: Install pre-commit run: pip install pre-commit @@ -32,27 +28,42 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - name: Install Nextflow - uses: nf-core/setup-nextflow@v1 + uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.11" + python-version: "3.14" architecture: "x64" + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - - name: Run nf-core lint + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} @@ -60,7 +71,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index b706875f..e6e9bc26 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@f6b0bace624032e30a85a8fd9c1a7f8f611f5737 # v3 + uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11 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@773744901bac0e8cbb5a0dc842800d45e9b2b405 # 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..a5e6e302 --- /dev/null +++ b/.github/workflows/nf-test.yml @@ -0,0 +1,147 @@ +name: Run nf-test +on: + pull_request: + paths-ignore: + - "docs/**" + - "**/meta.yml" + - "**/*.md" + - "**/*.png" + - "**/*.svg" + release: + types: [published] + workflow_dispatch: null + +# 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.3" + # NFT_WORKDIR: "~" + NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity + +jobs: + nf-test-changes: + name: nf-test-changes + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-nf-test-changes + - runner=4cpu-linux-x64 + outputs: + shard: ${{ steps.set-shards.outputs.shard }} + total_shards: ${{ steps.set-shards.outputs.total_shards }} + steps: + - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 + + - name: get number of shards + id: set-shards + uses: ./.github/actions/get-shards + env: + NFT_VER: ${{ env.NFT_VER }} + with: + max_shards: 7 + + - name: debug + run: | + echo ${{ steps.set-shards.outputs.shard }} + echo ${{ steps.set-shards.outputs.total_shards }} + + nf-test: + name: "${{ matrix.profile }} | ${{ matrix.NXF_VER }} | ${{ matrix.shard }}/${{ needs.nf-test-changes.outputs.total_shards }}" + needs: [nf-test-changes] + if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }} + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-nf-test + - runner=4cpu-linux-x64 + strategy: + fail-fast: false + matrix: + shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} + profile: [conda, docker, singularity] + isMain: + - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} + # Exclude conda and singularity on dev + exclude: + - isMain: false + profile: "conda" + - isMain: false + profile: "singularity" + NXF_VER: + - 25.10.4 + - latest-everything + env: + NXF_ANSI_LOG: false + TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} + + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 + + - name: Set NFT_WORKDIR dynamically + run: echo "NFT_WORKDIR=$HOME" >> $GITHUB_ENV + + - name: Run nf-test + id: run_nf_test + uses: ./.github/actions/nf-test + continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} + env: + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + NXF_VERSION: ${{ matrix.NXF_VER }} + with: + profile: ${{ matrix.profile }} + shard: ${{ matrix.shard }} + total_shards: ${{ env.TOTAL_SHARDS }} + + - name: Report test status + if: ${{ always() }} + run: | + if [[ "${{ steps.run_nf_test.outcome }}" == "failure" ]]; then + echo "::error::Test with ${{ matrix.NXF_VER }} failed" + # Add to workflow summary + echo "## ❌ Test failed: ${{ matrix.profile }} | ${{ matrix.NXF_VER }} | Shard ${{ matrix.shard }}/${{ env.TOTAL_SHARDS }}" >> $GITHUB_STEP_SUMMARY + if [[ "${{ matrix.NXF_VER }}" == "latest-everything" ]]; then + echo "::warning::Test with latest-everything failed but will not cause workflow failure. Please check if the error is expected or if it needs fixing." + fi + if [[ "${{ matrix.NXF_VER }}" != "latest-everything" ]]; then + exit 1 + fi + fi + + confirm-pass: + needs: [nf-test] + if: always() + runs-on: # use self-hosted runners + - runs-on=${{ github.run_id }}-confirm-pass + - runner=2cpu-linux-x64 + steps: + - name: One or more tests failed (excluding latest-everything) + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + - name: One or more tests cancelled + if: ${{ contains(needs.*.result, 'cancelled') }} + run: exit 1 + + - name: All tests ok + if: ${{ contains(needs.*.result, 'success') }} + run: exit 0 + + - name: debug-print + if: always() + run: | + echo "::group::DEBUG: `needs` Contents" + echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}" + echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" + echo "::endgroup::" diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index d468aeaa..431d3d44 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,8 +12,12 @@ jobs: - name: get topics and convert to hashtags id: get_topics run: | - curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ' >> $GITHUB_OUTPUT + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT + - name: get description + id: get_description + run: | + echo "description=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .description')" >> $GITHUB_OUTPUT - uses: rzr/fediverse-action@master with: access-token: ${{ secrets.MASTODON_ACCESS_TOKEN }} @@ -22,48 +26,15 @@ jobs: # https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#release message: | Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - + ${{ steps.get_description.outputs.description }} Please see the changelog: ${{ github.event.release.html_url }} - ${{ steps.get_topics.outputs.GITHUB_OUTPUT }} #nfcore #openscience #nextflow #bioinformatics - - send-tweet: - runs-on: ubuntu-latest - - steps: - - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 - with: - python-version: "3.10" - - name: Install dependencies - run: pip install tweepy==4.14.0 - - name: Send tweet - shell: python - run: | - import os - import tweepy - - client = tweepy.Client( - access_token=os.getenv("TWITTER_ACCESS_TOKEN"), - access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), - consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), - consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), - ) - tweet = os.getenv("TWEET") - client.create_tweet(text=tweet) - env: - TWEET: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} - TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} - TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} - TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} + ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics bsky-post: runs-on: ubuntu-latest steps: - - uses: zentered/bluesky-post-action@80dbe0a7697de18c15ad22f4619919ceb5ccf597 # v0.1.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/.github/workflows/template-version-comment.yml b/.github/workflows/template-version-comment.yml new file mode 100644 index 00000000..e8560fc7 --- /dev/null +++ b/.github/workflows/template-version-comment.yml @@ -0,0 +1,46 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: pull_request_target + +jobs: + template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Read template version from .nf-core.yml + uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Check nf-core outdated + id: nf_core_outdated + run: echo "OUTPUT=$(pip list --outdated | grep nf-core)" >> ${GITHUB_ENV} + + - name: Post nf-core template version comment + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + if: | + contains(env.OUTPUT, 'nf-core') + with: + repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} + allow-repeats: false + message: | + > [!WARNING] + > Newer version of the nf-core template is available. + > + > Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + > Please update your pipeline to the latest version. + > + > For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + # diff --git a/.gitignore b/.gitignore index 5124c9ac..ce640bc7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,8 @@ results/ testing/ testing* *.pyc +null/ +.nf-test +.nf-test.log +modules/nf-core/**/tests/ +subworkflows/nf-core/**/tests/ diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 105a1821..00000000 --- a/.gitpod.yml +++ /dev/null @@ -1,20 +0,0 @@ -image: nfcore/gitpod:latest -tasks: - - name: Update Nextflow and setup pre-commit - command: | - pre-commit install --install-hooks - nextflow self-update - - name: unset JAVA_TOOL_OPTIONS - command: | - unset JAVA_TOOL_OPTIONS - -vscode: - extensions: # based on nf-core.nf-core-extensionpack - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - # - nextflow.nextflow # Nextflow syntax highlighting - - oderwat.indent-rainbow # Highlight indentation level - - streetsidesoftware.code-spell-checker # Spelling checker for source code - - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index 3805dc81..3e335c69 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1 +1,24 @@ +lint: + multiqc_config: false + files_exist: + - tests/default.nf.test + files_unchanged: + - .github/CONTRIBUTING.md + - assets/nf-core-seqinspector_logo_light.png + - docs/images/nf-core-seqinspector_logo_dark.png + - docs/images/nf-core-seqinspector_logo_light.png + nextflow_config: + - config_defaults: + - params.fastq_screen_references + nf_test_content: false +nf_core_version: 3.5.2 repository_type: pipeline +template: + author: Adrien Coulier + description: Pipeline to QC your sequences + force: false + is_nfcore: true + name: seqinspector + org: nf-core + outdir: . + version: 1.0.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index af57081f..d06777a8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,8 +3,25 @@ repos: rev: "v3.1.0" hooks: - id: prettier - - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "2.7.3" + additional_dependencies: + - prettier@3.6.2 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 hooks: - - id: editorconfig-checker - alias: ec + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/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/.prettierignore b/.prettierignore index 437d763d..dd749d43 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,7 @@ testing/ testing* *.pyc bin/ +.nf-test/ +ro-crate-metadata.json +modules/nf-core/ +subworkflows/nf-core/ diff --git a/.prettierrc.yml b/.prettierrc.yml index 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/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..a33b527c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "markdown.styles": ["public/vscode_markdown.css"] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 58a53ef4..ea501326 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,91 @@ 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.0dev - [date] +## [1.0.0](https://github.com/nf-core/seqinspector/releases/tag/1.0.0) - Inspector Gadget Initial release of nf-core/seqinspector, created with the [nf-core](https://nf-co.re/) template. ### `Added` +- [#2](https://github.com/nf-core/seqinspector/pull/2) Input workflow and schema definition +- [#13](https://github.com/nf-core/seqinspector/pull/13) Generate reports per run, per project and per lane +- [#20](https://github.com/nf-core/seqinspector/pull/20) Use tags to generate group reports +- [#50](https://github.com/nf-core/seqinspector/pull/50) Add an optional subsampling step +- [#51](https://github.com/nf-core/seqinspector/pull/51) Add nf-test to CI +- [#53](https://github.com/nf-core/seqinspector/pull/53), [#64](https://github.com/nf-core/seqinspector/pull/64) Add FastQ-Screen database multiplexing and limit scope of nf-test in CI +- [#56](https://github.com/nf-core/seqinspector/pull/56) Added SeqFu stats module +- [#63](https://github.com/nf-core/seqinspector/pull/63) Contribution guidelines added about displaying results for new tools +- [#68](https://github.com/nf-core/seqinspector/pull/68) Add tool selector +- [#75](https://github.com/nf-core/seqinspector/pull/75) Set up nft-utils +- [#96](https://github.com/nf-core/seqinspector/pull/96) Added missing citations to citation tool +- [#100](https://github.com/nf-core/seqinspector/pull/100) Added official logos +- [#103](https://github.com/nf-core/seqinspector/pull/103) Configure full-tests +- [#106](https://github.com/nf-core/seqinspector/pull/106) Parse rundir metadata +- [#108](https://github.com/nf-core/seqinspector/pull/108) Test data validation (#94) +- [#108](https://github.com/nf-core/seqinspector/pull/108) Update lists of default steps in the pipeline (#86) +- [#110](https://github.com/nf-core/seqinspector/pull/110) Update input schema to accept either tar file or directory as rundir, and fastq messages and patterns +- [#111](https://github.com/nf-core/seqinspector/pull/111) Short summary of seqinspector in README.md (#84) +- [#127](https://github.com/nf-core/seqinspector/pull/127) Added alignment tools - bwamem2 - index and mem +- [#128](https://github.com/nf-core/seqinspector/pull/128) Added Picard tools - Collect Multiple Mterics to collect QC metrics +- [#132](https://github.com/nf-core/seqinspector/pull/132) Added a bwamem2 index params for faster output +- [#135](https://github.com/nf-core/seqinspector/pull/135) Added index section to MultiQC reports to facilitate report navigation (#125) +- [#148](https://github.com/nf-core/seqinspector/pull/148) Add Tubemap +- [#151](https://github.com/nf-core/seqinspector/pull/151) Added a prepare_genome subworkflow to handle bwamem2 indexing +- [#156](https://github.com/nf-core/seqinspector/pull/156) Added relative sample_size and warning when a sample has less reads than desired sample_size +- [#159](https://github.com/nf-core/seqinspector/pull/159) Added a subworkflow QC_BAM including picard_collecthsmetrics for alignment QC of hybrid-selection data +- [#162](https://github.com/nf-core/seqinspector/pull/162) Add tests for prepare_genome subworkflow +- [#168](https://github.com/nf-core/seqinspector/pull/168) Add contributors list +- [#168](https://github.com/nf-core/seqinspector/pull/168) Add logo to the pipeline logo +- [#174](https://github.com/nf-core/seqinspector/pull/174) Add nf-core-utils 0.4.0 + ### `Fixed` +- [#71](https://github.com/nf-core/seqinspector/pull/71) FASTQSCREEN does not fail when multiple reads are provided +- [#77](https://github.com/nf-core/seqinspector/pull/77) Use a params for fastqscreen csv file, and not the hardcoded example one +- [#99](https://github.com/nf-core/seqinspector/pull/99) Fix group reports for paired reads +- [#107](https://github.com/nf-core/seqinspector/pull/107) Put SeqFU-stats section reports together +- [#108](https://github.com/nf-core/seqinspector/pull/108) Go through and validate test data (#94) +- [#112](https://github.com/nf-core/seqinspector/pull/112) Making fastq_screen_references value to use parentDir +- [#121](https://github.com/nf-core/seqinspector/pull/121) Cleanup sample naming for MultiQC report (#105) +- [#150](https://github.com/nf-core/seqinspector/pull/150) Fix pipeline linting issues +- [#162](https://github.com/nf-core/seqinspector/pull/162) Fix bugs in qc_bam and prepare_genome subworkflows and add tests +- [#163](https://github.com/nf-core/seqinspector/pull/163) Run fastqscreen with subsampled data if available +- [#167](https://github.com/nf-core/seqinspector/pull/167) RunDirParser is now skipped if no Run Directory information is available +- [#169](https://github.com/nf-core/seqinspector/pull/169) Rescue missing versions from PREPARE_GENOME subworkflow +- [#171](https://github.com/nf-core/seqinspector/pull/171) Rescue number of tasks in the pipeline level tests +- [#172](https://github.com/nf-core/seqinspector/pull/172) More complete conda environment for rundir parser +- [#173](https://github.com/nf-core/seqinspector/pull/173) Fix warning message for tag name collision +- [#174](https://github.com/nf-core/seqinspector/pull/174) Fix null message when no rundir information is available +- [#175](https://github.com/nf-core/seqinspector/pull/175) Fix conda setup in CI + +### `Changed` + +- [#15](https://github.com/nf-core/seqinspector/pull/15) Template update for nf-core/tools v2.14.1 +- [#26](https://github.com/nf-core/seqinspector/pull/26), [#49](https://github.com/nf-core/seqinspector/pull/49) Template update for nf-core/tools v3.0.2 +- [#69](https://github.com/nf-core/seqinspector/pull/69) Template update for nf-core/tools v3.1.0 +- [#72](https://github.com/nf-core/seqinspector/pull/72) Template update for nf-core/tools v3.1.2dev0 +- [#74](https://github.com/nf-core/seqinspector/pull/74) Template update for nf-core/tools v3.2.0 +- [#114](https://github.com/nf-core/seqinspector/pull/114) Update CI +- [#133](https://github.com/nf-core/seqinspector/pull/133) Template update for nf-core/tools v3.4.1 +- [#144](https://github.com/nf-core/seqinspector/pull/144) Template update for nf-core/tools v3.5.1 +- [#145](https://github.com/nf-core/seqinspector/pull/145) Remove outdated comments +- [#148](https://github.com/nf-core/seqinspector/pull/148), [#152](https://github.com/nf-core/seqinspector/pull/152), [#153](https://github.com/nf-core/seqinspector/pull/153) Update documentation +- [#158](https://github.com/nf-core/seqinspector/pull/158) Moved picard_collectmultiplemetrics to the subworkflow QC_BAM +- [#164](https://github.com/nf-core/seqinspector/pull/164) Refactor local subworkflow and pipeline tests +- [#168](https://github.com/nf-core/seqinspector/pull/168) Adhere to strict syntax +- [#169](https://github.com/nf-core/seqinspector/pull/169) Prepare release 1.0.0 +- [#173](https://github.com/nf-core/seqinspector/pull/173) Improve documentation +- [#174](https://github.com/nf-core/seqinspector/pull/174) Refactor tests +- [#174](https://github.com/nf-core/seqinspector/pull/174) More strict syntax +- [#174](https://github.com/nf-core/seqinspector/pull/174) No params included in workflows +- [#175](https://github.com/nf-core/seqinspector/pull/175) Update all modules and migrate the whole pipeline to using topic versions +- [#176](https://github.com/nf-core/seqinspector/pull/176) No modules binaries +- [#177](https://github.com/nf-core/seqinspector/pull/177) Remove non used modules +- [#177](https://github.com/nf-core/seqinspector/pull/177) Move PREPARE_GENOME to the root main.nf script + ### `Dependencies` +- [#116](https://github.com/nf-core/seqinspector/pull/116) Update MultiQC to 1.28 +- [#174](https://github.com/nf-core/seqinspector/pull/174) Update nf-schema to 2.6.1 + ### `Deprecated` diff --git a/CITATIONS.md b/CITATIONS.md index a5854252..6b025bee 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -10,14 +10,36 @@ ## Pipeline tools +- [BWAMEM2](https://ieeexplore.ieee.org/abstract/document/8820962) + + > Vasimuddin Md, Misra S, Li H, Aluru S. Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems. In: 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS). IEEE; 2019:314-324. doi:10.1109/IPDPS.2019.00041 + - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. +- [FastQ Screen](https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/) + + > Wingett SW and Andrews S. FastQ Screen: A tool for multi-genome mapping and quality control [version 2; referees: 4 approved]. F1000Research 2018, 7:1338 (https://doi.org/10.12688/f1000research.15931.2) + - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. +- [Picard Tools](https://broadinstitute.github.io/picard/) + + > Broad Institute, “Picard Toolkit.” 2019. GitHub Repository. https://broadinstitute.github.io/picard/ + +- [SAMTOOLS](https://academic.oup.com/bioinformatics/article/25/16/2078/204688) + + > Danecek P, Bonfield JK, Liddle J, et al. Twelve years of SAMtools and BCFtools. GigaScience. 2021;10(2):giab008. doi:10.1093/gigascience/giab008 + +- [SeqFu](https://telatin.github.io/seqfu2/) + + > Telatin A, Fariselli P, Birolo G. SeqFu: A Suite of Utilities for the Robust and Reproducible Manipulation of Sequence Files. Bioengineering 2021, 8, 59. doi.org/10.3390/bioengineering8050059 + +- [Seqtk](https://github.com/lh3/seqtk) + ## Software packaging/containerisation tools - [Anaconda](https://anaconda.com) diff --git a/LICENSE b/LICENSE index f3045f2f..3295b9f8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Adrien Coulier +Copyright (c) The nf-core/seqinspector team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 5e2bc4ca..f48b9894 100644 --- a/README.md +++ b/README.md @@ -5,60 +5,84 @@ -[![GitHub Actions CI Status](https://github.com/nf-core/seqinspector/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/seqinspector/actions/workflows/ci.yml) +[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/seqinspector) +[![GitHub Actions CI Status](https://github.com/nf-core/seqinspector/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/seqinspector/actions/workflows/nf-test.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/seqinspector/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/seqinspector/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/seqinspector/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%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.4-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) +[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.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.5.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://tower.nf/launch?pipeline=https://github.com/nf-core/seqinspector) +[![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/seqinspector) -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23seqinspector-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/seqinspector)[![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%23seqinspector-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/seqinspector)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) ## Introduction -**nf-core/seqinspector** is a bioinformatics pipeline that ... - - - - - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +**nf-core/seqinspector** is a bioinformatics pipeline that processes raw sequence data (FASTQ) to provide comprehensive quality control. +It can perform subsampling, quality assessment, duplication level analysis, and complexity evaluation on a per-sample basis, while also detecting adapter content, technical artifacts, and common biological contaminants. +The pipeline generates detailed MultiQC reports with flexible output options, ranging from individual sample reports to project-wide summaries, making it particularly useful for sequencing core facilities and research groups with access to sequencing instruments. +If provided, nf-core/seqinspector can also parse statistics from an Illumina run folder directory into the final MultiQC reports. + +### Compatibility between tools and data type + + + +| Tool Type | Tool Name | Tool Description | Compatibility with Data | Dependencies | Default tool | +| ------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `Subsampling` | [`Seqtk`](https://github.com/lh3/seqtk) | Global subsampling of reads. Only performs subsampling if `--sample_size` parameter is given. | [RNA, DNA, synthetic] | [N/A] | no | +| `Indexing, Mapping` | [`Bwamem2`](https://github.com/bwa-mem2/bwa-mem2) | Align reads to reference | [RNA, DNA] | [N/A] | yes | +| `Indexing` | [`SAMtools`](http://github.com/samtools) | Index aligned BAM files, create FASTA index | [DNA] | [N/A] | yes | +| `QC` | [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) | Read QC | [RNA, DNA] | [N/A] | yes | +| `QC` | [`FastqScreen`](https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/) | Basic contamination detection | [RNA, DNA] | [N/A] | yes | +| `QC` | [`SeqFu Stats`](https://github.com/telatin/seqfu2) | Sequence statistics | [RNA, DNA] | [N/A] | yes | +| `QC` | [`Picard collect multiple metrics`](https://broadinstitute.github.io/picard/picard-metric-definitions.html) | Collect multiple QC metrics | [RNA, DNA] | [Bwamem2, SAMtools, `--genome`] | yes | +| `QC` | [`Picard_collecthsmetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360036856051-CollectHsMetrics-Picard) | Collect alignment QC metrics of hybrid-selection data. | [RNA, DNA] | [Bwamem2, SAMtools, `--fasta`, `--run_picard_collecths_metrics`, `--bait_intervals`, `--target_intervals` (`--ref_dict`)] | no | +| `Reporting` | [`MultiQC`](http://multiqc.info/) | Present QC for raw reads | [RNA, DNA, synthetic] | [N/A] | yes | + +### Workflow diagram + + + + + Fallback image description + + +### Summary of tools and version used in the pipeline + +| Tool | Version | +| ----------- | ------- | +| bwamem2 | 2.3 | +| fastqc | 0.12.1 | +| fastqscreen | 0.16.0 | +| multiqc | 1.33 | +| picard | 3.4.0 | +| samtools | 1.22.1 | +| seqfu | 1.22.3 | +| seqtk | 1.4 | ## Usage > [!NOTE] > If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data. - +Each row represents a fastq file (single-end with only `fastq_1`) or a pair of fastq files (paired end with `fastq_1` and `fastq_2`). +`rundir` is the path to the runfolder. +`tags` is a colon-separated list of tags that will be added to the MultiQC report for this `sample`. Now, you can run the pipeline using: - - ```bash nextflow run nf-core/seqinspector \ -profile \ @@ -67,8 +91,7 @@ nextflow run nf-core/seqinspector \ ``` > [!WARNING] -> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; -> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). +> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/seqinspector/usage) and the [parameter documentation](https://nf-co.re/seqinspector/parameters). @@ -80,11 +103,30 @@ For more details about the output files and reports, please refer to the ## Credits -nf-core/seqinspector was originally written by Adrien Coulier. +nf-core/seqinspector was originally written by [@agrima2010](https://github.com/agrima2010), [@Aratz](https://github.com/Aratz), [@FranBonath](https://github.com/FranBonath), [@kedhammar](https://github.com/kedhammar), and [@MatthiasZepper](https://github.com/MatthiasZepper) from the Swedish [National Genomics Infrastructure](https://github.com/NationalGenomicsInfrastructure/) and [Clinical Genomics Stockholm](https://clinical.scilifelab.se/). + +Maintenance is now lead by Maxime U Garcia ([National Genomics Infrastructure](https://github.com/NationalGenomicsInfrastructure/)) We thank the following people for their extensive assistance in the development of this pipeline: - +- [@adamrtalbot](https://github.com/adamrtalbot) +- [@alneberg](https://github.com/alneberg) +- [@beatrizsavinhas](https://github.com/beatrizsavinhas) +- [@ctuni](https://github.com/ctuni) +- [@edmundmiller](https://github.com/edmundmiller) +- [@EliottBo](https://github.com/EliottBo) +- [@KarNair](https://github.com/KarNair) +- [@kjellinjonas](https://github.com/kjellinjonas) +- [@mahesh-panchal](https://github.com/mahesh-panchal) +- [@matrulda](https://github.com/matrulda) +- [@mirpedrol](https://github.com/mirpedrol) +- [@nggvs](https://github.com/nggvs) +- [@nkongenelly](https://github.com/nkongenelly) +- [@Patricie34](https://github.com/Patricie34) +- [@pontushojer](https://github.com/pontushojer) +- [@ramprasadn](https://github.com/ramprasadn) +- [@rannick](https://github.com/rannick) +- [@torigiffin](https://github.com/torigiffin) ## Contributions and Support @@ -94,9 +136,6 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - - - An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/assets/example_fastq_screen_references.csv b/assets/example_fastq_screen_references.csv new file mode 100644 index 00000000..59f0cdf6 --- /dev/null +++ b/assets/example_fastq_screen_references.csv @@ -0,0 +1,4 @@ +name,dir,basename,aligner +Ecoli,s3://ngi-igenomes/igenomes/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/Bowtie2Index/,genome,bowtie2 +PhiX,s3://ngi-igenomes/igenomes/PhiX/Illumina/RTA/Sequence/Bowtie2Index/,genome,bowtie2 +Scerevisiae,s3://ngi-igenomes/igenomes/Saccharomyces_cerevisiae/NCBI/build3.1/Sequence/Bowtie2Index/,genome,bowtie2 diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index 3eadd2bd..a5e583a4 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -3,8 +3,6 @@ description: "Suggested text and references to use when describing pipeline usag section_name: "nf-core/seqinspector Methods Description" section_href: "https://github.com/nf-core/seqinspector" plot_type: "html" -## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline -## You inject any metadata in the Nextflow '${workflow}' object data: |

Methods

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

diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index e960d07e..9f11f5fa 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,11 +1,11 @@ report_comment: > - This report has been generated by the nf-core/seqinspector - analysis pipeline. For information about how to interpret these results, please see the - documentation. + This report has been generated by the nf-core/seqinspector analysis pipeline. For information about how to interpret these results, please see the documentation. report_section_order: + "nf-core-seqinspector-index": + order: -999 "nf-core-seqinspector-methods-description": order: -1000 - software_versions: + multiqc_software_versions: order: -1001 "nf-core-seqinspector-summary": order: -1002 @@ -13,3 +13,22 @@ report_section_order: export_plots: true disable_version_detection: true + +fn_clean_trim: + - "_screen" # Added by FastqScreen + +# Make sample name with indexes a bit prettier +# for SE: "SampleName_01" -> "SampleName #01" +# for PE: "SampleName_01_1" -> "SampleName #01_1" +# and: "SampleName_01_2" -> "SampleName #01_2" +sample_names_replace_regex: true +sample_names_replace: + "(.+)_(\\d{2,}|\\d{2,}_[12])$": "\\1 #\\2" + +table_sample_merge: + "Read1": + - type: regex + pattern: "_1$" + "Read2": + - type: regex + pattern: "_2$" diff --git a/assets/nf-core-seqinspector_logo_light.png b/assets/nf-core-seqinspector_logo_light.png index 647c46d4..f1737c85 100644 Binary files a/assets/nf-core-seqinspector_logo_light.png and b/assets/nf-core-seqinspector_logo_light.png differ diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index fbe5de2d..ba2542dd 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,3 +1,7 @@ -sample,lane,project,fastq_1,fastq_2,rundir -SAMPLE_PAIRED_END,1,P001,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz,/path/to/rundir -SAMPLE_SINGLE_END,2,P002,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz,,/path/to/rundir +sample,fastq_1,fastq_2,rundir,tags +SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz,/path/to/rundir,paired_sample:lane1 +SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A2_S2_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A2_S2_L002_R2_001.fastq.gz,/path/to/rundir,paired_sample:lane1 +SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A3_S3_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A3_S3_L002_R2_001.fastq.gz,/path/to/rundir,paired_sample:lane2 +SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz,,/path/to/rundir,group1 +SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz,,/path/to/rundir,group2 +SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz,,/path/to/rundir,group3 diff --git a/assets/schema_fastq_screen_references.json b/assets/schema_fastq_screen_references.json new file mode 100644 index 00000000..e5e0aa12 --- /dev/null +++ b/assets/schema_fastq_screen_references.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://raw.githubusercontent.com/nf-core/seqinspector/master/assets/schema_fastq_screen_references.json", + "title": "nf-core/seqinspector pipeline - params.fastq_screen_references schema", + "description": "Schema for the file provided with params.fastq_screen_references", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "The reference name as referred to by FastQ Screen." + }, + "dir": { + "type": "string", + "format": "directory-path", + "exists": true, + "pattern": "^\\S+$", + "errorMessage": "Path to the dir containing the aligner reference and index. Can be remote." + }, + "basename": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "The shared basename of the reference and index files contained in the dir." + }, + "aligner": { + "type": "string", + "enum": ["bowtie", "bowtie2", "bwa", "minimap2"], + "errorMessage": "Specify the aligner to use for the mapping. Valid arguments are 'bowtie', bowtie2' (default), 'bwa' or 'minimap2'." + } + }, + "required": ["name", "dir", "basename", "aligner"] + } +} diff --git a/assets/schema_input.json b/assets/schema_input.json index 9fb321b5..7fb2b711 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/seqinspector/master/assets/schema_input.json", "title": "nf-core/seqinspector pipeline - params.input schema", "description": "Schema for the file provided with params.input", @@ -13,41 +13,45 @@ "errorMessage": "Sample name must be provided and cannot contain spaces", "meta": ["sample"] }, - "lane": { - "type": "integer", - "pattern": "^\\d+$", - "errorMessage": "Lane ID must be a number", - "meta": ["lane"] - }, - "project": { - "type": "string", - "pattern": "^\\S+$", - "errorMessage": "Project ID cannot contain spaces", - "meta": ["project"] - }, "fastq_1": { "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'" }, "rundir": { - "type": "string", - "format": "path", - "exists": true, - "errorMessage": "Run directory must be a path", + "oneOf": [ + { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "\\.tar\\.gz$" + }, + { + "type": "string", + "format": "directory-path", + "exists": true + } + ], + "errorMessage": "Run directory must be a path or tar directory", "meta": ["rundir"] + }, + "tags": { + "type": "string", + "pattern": "^([A-Za-z0-9_-]+:)*([A-Za-z0-9_-]+)$", + "errorMessage": "Tags must be separated by colons and only consist of lowercase letters, numbers, underscores and hyphens.", + "meta": ["tags"] } }, - "required": ["sample", "lane", "fastq_1"], + "required": ["sample", "fastq_1"], "dependentRequired": { "fastq_2": ["fastq_1"] } diff --git a/bin/parse_illumina.py b/bin/parse_illumina.py new file mode 100755 index 00000000..d8728832 --- /dev/null +++ b/bin/parse_illumina.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + +# Author: @matrulda +# Licence: MIT + +import os +import yaml +import sys +from datetime import datetime +from pathlib import Path +import xmltodict + + +def read_run_parameters(directory): + alt_1 = directory / "runParameters.xml" + alt_2 = directory / "RunParameters.xml" + if alt_1.exists(): + with open(alt_1) as f: + return xmltodict.parse(f.read()) + elif alt_2.exists(): + with open(alt_2) as f: + return xmltodict.parse(f.read()) + else: + raise Exception( + "Could not find Illumina [Rr]unParameters.xml. " + "Please provide RunParameters.xml or skip module." + ) + + +def find(d, tag): + if isinstance(d, dict): + if tag in d: + yield d[tag] + for k, v in d.items(): + if isinstance(v, dict): + yield from find(v, tag) + if isinstance(v, list): + for i in v: + yield from find(i, tag) + + +def construct_data(run_parameters): + run_parameters_tags = { + "RunId": "Run ID", + "RunID": "Run ID", + "InstrumentType": "Instrument type", + "ApplicationName": "Control software", + "Application": "Control software", + "ApplicationVersion": "Control software version", + "SystemSuiteVersion": "Control software version", + "Flowcell": "Flowcell type", + "FlowCellMode": "Flowcell type", + "ReagentKitVersion": "Reagent kit version", + "RTAVersion": "RTA Version", + "RtaVersion": "RTA Version", + } + data = {} + for k, v in run_parameters_tags.items(): + for key, value in run_parameters_tags.items(): + info = list(find(run_parameters, key)) + if info: + data[value] = {"Value": info[0]} + return data + + +def construct_multiqc_yaml(directory): + + directory_name = directory.name + run_parameters = read_run_parameters(directory) + + data = construct_data(run_parameters) + + metadata = { + "id": "mqc_seq_metadata", + "section_name": "Sequencing instrument metadata", + "description": "Sequencing metadata gathered from the run directory", + "plot_type": "table", + "pconfig": { + "id": "mqc_seq_metadata", + "title": "Run directory Metadata", + "col1_header": "Metadata", + }, + "data": data, + } + + return metadata + + +if __name__ == "__main__": + rundir_path = Path(sys.argv[1]) + output_file = "illumina_mqc.yml" + + multiqc_yaml = construct_multiqc_yaml(rundir_path) + + with open(output_file, "w") as f: + yaml.dump(multiqc_yaml, f) diff --git a/conf/base.config b/conf/base.config index 8d7dffc6..af915353 100644 --- a/conf/base.config +++ b/conf/base.config @@ -9,57 +9,55 @@ */ process { + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } - // TODO nf-core: Check the defaults for all processes - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } - - errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in ((130..145) + 104 + 175) ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' // Process-specific resource requirements - // NOTE - Please try and re-use the labels below as much as possible. + // NOTE - Please try and reuse the labels below as much as possible. // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. - // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors - withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + withLabel: process_single { + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } - withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + withLabel: process_low { + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } - withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + withLabel: process_medium { + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } - withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + withLabel: process_high { + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } - withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + withLabel: process_long { + time = { 20.h * task.attempt } } - withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + withLabel: process_high_memory { + memory = { 200.GB * task.attempt } } - withLabel:error_ignore { + withLabel: error_ignore { errorStrategy = 'ignore' } - withLabel:error_retry { + withLabel: error_retry { errorStrategy = 'retry' maxRetries = 2 } - withName:CUSTOM_DUMPSOFTWAREVERSIONS { - cache = false + withLabel: process_gpu { + ext.use_gpu = { workflow.profile.contains('gpu') } + accelerator = { workflow.profile.contains('gpu') ? 1 : null } } } diff --git a/conf/igenomes.config b/conf/igenomes.config index 3f114377..9fb1acad 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -11,430 +11,430 @@ params { // illumina iGenomes reference file paths genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'CHM13' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" - bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" - gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" - mito_name = "chrM" - } - 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" - } - 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" + GRCh37 { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + } + GRCh38 { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + CHM13 { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" + bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" + gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" + mito_name = "chrM" + } + GRCm38 { + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + } + TAIR10 { + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" + } + EB2 { + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" } 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" - } - 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" + } + WBcel235 { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" } 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" - } - 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" - } - 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" - } - 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" - } - 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" - } - 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" + } + GRCz10 { + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" + } + BDGP6 { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" + } + EquCab2 { + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" + } + EB1 { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + } + Galgal4 { + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" + } + Gm01 { + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" + } + Mmul_1 { + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" } 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" } 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" } 'Rnor_5.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" - mito_name = "MT" + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" + mito_name = "MT" } 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" } 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" - } - 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" - } - 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" + } + EF2 { + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" + } + Sbi1 { + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" } 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" - } - 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" - } - 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" - } - 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" - } - 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" - } - 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.37e9" - } - 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" - } - 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" - } - 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" - } - 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" - } - 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" - } - 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" + } + AGPv3 { + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + hg38 { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + hg19 { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" + } + mm10 { + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" + } + bosTau8 { + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + ce10 { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" + } + canFam3 { + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" + } + danRer10 { + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.37e9" + } + dm6 { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" + } + equCab2 { + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" + } + galGal4 { + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" + } + panTro4 { + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" + } + rn6 { + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + sacCer3 { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" + } + susScr3 { + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" } } } diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 00000000..b4034d82 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index e3ea8fa6..f84f48ff 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -11,32 +11,116 @@ */ process { - publishDir = [ path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + mode: params.publish_dir_mode ] + withName: SEQTK_SAMPLE { + ext.args = '-s100' + } + withName: FASTQC { ext.args = '--quiet' } - withName: CUSTOM_DUMPSOFTWAREVERSIONS { + withName: SEQFU_STATS { + ext.args = '' publishDir = [ - path: { "${params.outdir}/pipeline_info" }, + path: { "${params.outdir}/seqfu_stats" }, mode: params.publish_dir_mode, - pattern: '*_versions.yml' + saveAs: { filename -> "${meta.sample_id}_${filename}" } + ] + } + + withName: BWAMEM2_INDEX { + publishDir = [ + path: { "${params.outdir}/bwamem2_index" }, + mode: params.publish_dir_mode + ] + } + + withName: PICARD_CREATESEQUENCEDICTIONARY { + publishDir = [ + path: { "${params.outdir}/picard_createsequencedictionary" }, + mode: params.publish_dir_mode + ] + } + + withName: BWAMEM2_MEM { + publishDir = [ + path: { "${params.outdir}/bwamem2_mem" }, + mode: params.publish_dir_mode + ] + } + + withName: PICARD_COLLECTMULTIPLEMETRICS { + publishDir = [ + path: { "${params.outdir}/picard_collectmultiplemetrics" }, + mode: params.publish_dir_mode + ] + } + + withName: PICARD_COLLECTHSMETRICS { + ext.args = { "--TMP_DIR ." } + publishDir = [ + path: { "${params.outdir}/picard_collecthsmetrics" }, + mode: params.publish_dir_mode + ] + } + + withName: SAMTOOLS_FAIDX { + publishDir = [ + path: { "${params.outdir}/samtools_faidx" }, + mode: params.publish_dir_mode ] } - withName: 'MULTIQC' { - ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } + withName: SAMTOOLS_INDEX { publishDir = [ - path: { "${params.outdir}/multiqc" }, + path: { "${params.outdir}/bwamem2_mem" }, + mode: params.publish_dir_mode + ] + } + + withName: RUNDIRPARSER { + // The process _mqc.txt outputs should have identical names for the same sequencing platforms + // in order to be grouped together in the MultiQC report, but here we need to enforce uniqueness + // to avoid overwriting results in the publishDir. + publishDir = [ + path: { "${params.outdir}/rundirparser" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> "${meta.dirname}_${filename}" }] + } + + withName: MULTIQC_GLOBAL { + ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' } + publishDir = [ + path: { "${params.outdir}/multiqc/global_report" }, + mode: params.publish_dir_mode ] } + withName: MULTIQC_PER_TAG { + ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' } + publishDir = [ + path: { "${params.outdir}/multiqc/group_reports" }, + mode: params.publish_dir_mode, + saveAs: { filename -> + if (filename == 'versions.yml') { + return null + } + else if (filename =~ /\[TAG:.+\]_multiqc_(report\.html|plots|data)/) { + def tag = (filename =~ /\[TAG:(.+)\]_multiqc_(report\.html|plots|data)/)[0][1] + def new_filename = filename.replaceFirst( + "(?.*)\\[TAG:${tag}\\]_(?multiqc_(report\\.html|plots|data).*)", + '${prefix}${suffix}', + ) + return "${tag}/${new_filename}" + } + else { + return filename + } + }] + } } diff --git a/conf/test.config b/conf/test.config index 38e9ee32..4ab15ba5 100644 --- a/conf/test.config +++ b/conf/test.config @@ -14,16 +14,18 @@ params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/KarNair/test-datasets/seqinspector/testdata/MiSeq/samplesheet.csv' + input = params.pipelines_testdata_base_path + 'seqinspector/testdata/NovaSeq6000/samplesheet.csv' + fastq_screen_references = "${projectDir}/assets/example_fastq_screen_references.csv" // Genome references - genome = 'R64-1-1' + genome = 'R64-1-1' +} + +process { + resourceLimits = [ + cpus: 4, + memory: '8.GB', + time: '1.h' + ] } diff --git a/conf/test_full.config b/conf/test_full.config index 6fbea31a..d9ea691c 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -10,15 +10,14 @@ ---------------------------------------------------------------------------------------- */ + params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' + input = params.pipelines_testdata_base_path + 'seqinspector/full_tests/SampleSheet.csv' // Genome references - genome = 'R64-1-1' + genome = 'R64-1-1' } diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47..00000000 Binary files a/docs/images/mqc_fastqc_adapter.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_counts.png b/docs/images/mqc_fastqc_counts.png deleted file mode 100755 index cb39ebb8..00000000 Binary files a/docs/images/mqc_fastqc_counts.png and /dev/null differ diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf5..00000000 Binary files a/docs/images/mqc_fastqc_quality.png and /dev/null differ diff --git a/docs/images/nf-core-seqinspector_logo_dark.png b/docs/images/nf-core-seqinspector_logo_dark.png index efd8845b..77509b5f 100644 Binary files a/docs/images/nf-core-seqinspector_logo_dark.png and b/docs/images/nf-core-seqinspector_logo_dark.png differ diff --git a/docs/images/nf-core-seqinspector_logo_dark.svg b/docs/images/nf-core-seqinspector_logo_dark.svg new file mode 100644 index 00000000..dca9e6ec --- /dev/null +++ b/docs/images/nf-core-seqinspector_logo_dark.svg @@ -0,0 +1,303 @@ + +nf-core/seqinspector diff --git a/docs/images/nf-core-seqinspector_logo_light.png b/docs/images/nf-core-seqinspector_logo_light.png index 197c1de0..f1737c85 100644 Binary files a/docs/images/nf-core-seqinspector_logo_light.png and b/docs/images/nf-core-seqinspector_logo_light.png differ diff --git a/docs/images/nf-core-seqinspector_logo_light.svg b/docs/images/nf-core-seqinspector_logo_light.svg new file mode 100644 index 00000000..bad479ef --- /dev/null +++ b/docs/images/nf-core-seqinspector_logo_light.svg @@ -0,0 +1,242 @@ + +nf-core/seqinspector diff --git a/docs/images/nfcore-seqinspector-logo-hex-dark.png b/docs/images/nfcore-seqinspector-logo-hex-dark.png new file mode 100644 index 00000000..d92e0d09 Binary files /dev/null and b/docs/images/nfcore-seqinspector-logo-hex-dark.png differ diff --git a/docs/images/nfcore-seqinspector-logo-hex-dark.svg b/docs/images/nfcore-seqinspector-logo-hex-dark.svg new file mode 100644 index 00000000..54e490be --- /dev/null +++ b/docs/images/nfcore-seqinspector-logo-hex-dark.svg @@ -0,0 +1,229 @@ + + + +seqinspectornf-core/ diff --git a/docs/images/nfcore-seqinspector-logo-hex-light.png b/docs/images/nfcore-seqinspector-logo-hex-light.png new file mode 100644 index 00000000..dbb12c0d Binary files /dev/null and b/docs/images/nfcore-seqinspector-logo-hex-light.png differ diff --git a/docs/images/nfcore-seqinspector-logo-hex-light.svg b/docs/images/nfcore-seqinspector-logo-hex-light.svg new file mode 100644 index 00000000..7636b59c --- /dev/null +++ b/docs/images/nfcore-seqinspector-logo-hex-light.svg @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + seqinspector + + + + + + + + + + + + + + + nf- + core/ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/seqinspector_tubemap_V1.0.png b/docs/images/seqinspector_tubemap_V1.0.png new file mode 100644 index 00000000..4a505165 Binary files /dev/null and b/docs/images/seqinspector_tubemap_V1.0.png differ diff --git a/docs/images/seqinspector_tubemap_V1.0.svg b/docs/images/seqinspector_tubemap_V1.0.svg new file mode 100644 index 00000000..d4846c37 --- /dev/null +++ b/docs/images/seqinspector_tubemap_V1.0.svg @@ -0,0 +1,1383 @@ + + + + + + + FastQC + + + Run + + metadata + + + + + seqtk + + + FastQ Screen + MultiQC + Global Report + + + + + + + fastq + + + + + fastq + + + + + fastq + + + + + fastq + + + + SeqFu Stats + + + + + + Reports by group + sample tags + + + + + + + + + + D lane1 : special + + + + + A project5 : workset3 : lane1 + + + + + C workset2 : lane2 : project5 + + + + + D + + + + + A + A + D + D + A + A + + C + + + + B lane1 : project4 : workset2 + B + B + B + B + + C + C + C + + + + MultiQC + + + + + + lane2 + + + + MultiQC + + + + + project5 + + + + MultiQC + + + + + project4 + + + + + MultiQC + + + + + + workset3 + + + + MultiQC + + + + + workset2 + + + + MultiQC + + + + + special + + + + MultiQC + + + + + lane1 + + + + + MultiQC + + + + + + + + + + + Run + Folder + + + + BWAmem2 + + + + Picard + + + + + diff --git a/docs/images/seqinspector_tubemap_V1.0_dark.png b/docs/images/seqinspector_tubemap_V1.0_dark.png new file mode 100644 index 00000000..bccb0147 Binary files /dev/null and b/docs/images/seqinspector_tubemap_V1.0_dark.png differ diff --git a/docs/images/seqinspector_tubemap_V1.0_dark.svg b/docs/images/seqinspector_tubemap_V1.0_dark.svg new file mode 100644 index 00000000..aa180bb2 --- /dev/null +++ b/docs/images/seqinspector_tubemap_V1.0_dark.svg @@ -0,0 +1,2801 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FastQC + + + Run + + metadata + + + + + seqtk + + + FastQ Screen + MultiQC + Global Report + + + + + + + fastq + + + + + fastq + + + + + fastq + + + + + fastq + + + + SeqFu Stats + + + + + + Reports by group + sample tags + + + + + + + + + + D lane1 : special + + + + + A project5 : workset3 : lane1 + + + + + C workset2 : lane2 : project5 + + + + + D + + + + + A + A + D + D + A + A + + C + + + + B lane1 : project4 : workset2 + B + B + B + B + + C + C + C + + + + MultiQC + + + + + + lane2 + + + + MultiQC + + + + + project5 + + + + MultiQC + + + + + project4 + + + + + MultiQC + + + + + + workset3 + + + + MultiQC + + + + + workset2 + + + + MultiQC + + + + + special + + + + MultiQC + + + + + lane1 + + + + + MultiQC + + + + + + + + + + + Run + Folder + + + BWAmem2 + + + Picard + + + diff --git a/docs/output.md b/docs/output.md index 77e4cc1c..cf453e24 100644 --- a/docs/output.md +++ b/docs/output.md @@ -6,16 +6,34 @@ This document describes the output produced by the pipeline. Most of the plots a The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. - - ## Pipeline overview -The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: +The pipeline is built using [Nextflow](https://www.nextflow.io/) and can generate output files from the following steps: +- [Seqtk](#seqtk) - Subsample a specific number of reads per sample - [FastQC](#fastqc) - Raw read QC +- [SeqFu Stats](#seqfu_stats) - Statistics for FASTA or FASTQ files +- [FastQ Screen](#fastqscreen) - Mapping against a set of references for basic contamination QC +- [BWA-MEM2_INDEX](#bwamem2_index) - Create BWA-MEM2 index of a chosen reference genome OR use pre-built index +- [BWA-MEM2_MEM](#bwamem2_mem) - Mapping reads against a chosen reference genome +- [Samtools index](#samtools-index) - Index BAM files with Samtools +- [Picard collect multiple metrics](#picard-collect-multiple-metrics) - Combine BAM and BAI outputs for Picard +- [Picard collecthsmetrics](#picard-collecthsmetrics) - Collect alignment QC metrics of hybrid-selection data - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution +### Seqtk + +
+Output files + +- `seqtk/` + - `*_fastq`: FastQ file after being subsampled to the sample_size value. + +
+ +[Seqtk](https://github.com/lh3/seqtk) samples sequences by number. + ### FastQC
@@ -29,25 +47,129 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) +### SeqFu Stats + +
+Output files + +- `seqfu_stats/` + - `*.tsv`: Tab-separated file containing quality metrics. + - `*_mqc.txt`: File containing the same quality metrics as the TSV file, ready to be read by MultiQC. + +
-![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) +[SeqFu](https://telatin.github.io/seqfu2/) is general-purpose program to manipulate and parse information from FASTA/FASTQ files, supporting gzipped input files. Includes functions to interleave and de-interleave FASTQ files, to rename sequences and to count and print statistics on sequence lengths. In this pipeline, the `seqfu stats` module is used to produce general quality metrics statistics. -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) +### FastQ Screen -:::note -The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -::: +
+Output files + +- `fastqscreen/` + - `*_screen.html`: Interactive graphical report. + - `*_screen.png`: Static graphical report. + - `*_screen.txt` : Text-based report. + +
+ +[FastQ Screen](https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/) allows you to set up a standard set of references against which all of your samples can be mapped. Your references might contain the genomes of all of the organisms you work on, along with PhiX, vectors or other contaminants commonly seen in sequencing experiments. + +To use FastQ Screen, this pipeline requires a `.csv` detailing: + +- the working name of the reference +- the name of the aligner used to generate its index (which is also the aligner and index used by the tool) +- the file basename of the reference and its index (e.g. the reference `genome.fa` and its index `genome.bt2` have the basename `genome`) +- the path to a dir where the reference and index files both reside. + +See `assets/example_fastq_screen_references.csv` for example. + +The `.csv` is provided as a pipeline parameter `fastq_screen_references` and is used to construct a `FastQ Screen` configuration file within the context of the process work directory in order to properly mount the references. + +### BWAMEM2_INDEX + +
+Output files + +Generates the full set of bwamem2 indexes: + +- `bwamem2_index/` + - `*.fa` + - `*.fa.amb` + - `*.fa.ann` + - `*.fa.bwt` + - `*.fa.pac` + +### BWAMEM2_MEM + +[BWA-mem2](https://github.com/bwa-mem2/bwa-mem2) is a tool next version of bwa-mem for mapping sequencies with low divergence against a reference genome with increased processing speed (~1.3-3.1x). Aligned reads are then potentially filtered and coordinate-sorted using [samtools](#samtools-index). + +
+Output files + +- `bwamem2/` + - `*.bam`: The original BAM file containing read alignments to the reference genome. + - `*.bam.bai`: BAM index files + +### Samtools index + +
+Output files + +- `samtools_faidex` + - `*.fa.fai` + - `*.fa.fai` + +### Picard collect multiple metrics + +
+Output files + +- `picard_collectmultiplemetrics` + - `*.CollectMultipleMetrics.alignment_summary_metrics` + - `*.CollectMultipleMetrics.base_distribution_by_cycle_metrics` + - `*.CollectMultipleMetrics.base_distribution_by_cycle.pdf` + - `*.CollectMultipleMetrics.quality_by_cycle_metrics` + - `*.CollectMultipleMetrics.quality_by_cycle.pdf` + - `*.CollectMultipleMetrics.quality_distribution.pdf` + - `*.CollectMultipleMetrics.read_length_histogram.pdf` + +### Picard CollectHSmetrics + +
+Output files + +- `picard_collecthsmetrics/` + - `*.coverage_metrics`: Tab-separated file containing quality metrics for hybrid-selection data. + +
+ +[Picard_collecthsmetrics](https://gatk.broadinstitute.org/hc/en-us/articles/360036856051-CollectHsMetrics-Picard) is a tool to collect metrics on the aligment SAM/BAM files that are specific for sequence datasets generated through hybrid-selection (mostly used to capture exon-specific sequences for targeted sequencing). ### MultiQC +nf-core/seqinspector will generate the following MultiQC reports: + +- one global reports including all the samples listed in the samplesheet +- one group report per unique tag. These reports compile samples that share the same tag. +
Output files - `multiqc/` - - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - - `multiqc_plots/`: directory containing static images from the report in various formats. + - `global_report` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. + - `group_reports` + - `tag1/` + - `multiqc_report.html` + - `multiqc_data/` + - `multiqc_plots/` + - `tag2/` + - `multiqc_report.html` + - `multiqc_data/` + - `multiqc_plots/` + - ...
diff --git a/docs/usage.md b/docs/usage.md index f926de73..a58ba6af 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -2,59 +2,68 @@ ## :warning: Please read this documentation on the nf-core website: [https://nf-co.re/seqinspector/usage](https://nf-co.re/seqinspector/usage) -> _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ - ## Introduction - +### General points + +The nf-core/seqinspector pipeline is a general QC pipeline for sequencing data. +The current version only supports data in fastq format. +The pipeline is meant to include a large amount of possible QC tools to chose from, but not all of them may be relevant to your data. +As such we highly recommend to familiarize yourself with the different QC tools available and to remove any QC tool you would like to exclude with the `--skip-tools` command line parameter. +For repeated use we suggest to create a params file containing the `--skip-tools` parameters (for details see the "Running the pipeline" section). +Be aware that some tools are skipped by default and will need to be included in the list of skipped tools when curating your own list. +To identify defaults included or excluded please check out [the overview compatibility between tools and data type table](../#compatibility-between-tools-and-data-type). + +### What nf-core/seqinspector is not for + +The results of the nf-core/seqinspector pipeline are not meant to be used for any downstream analysis, but are exclusively for QC purposes. +Even tools that may be used in other pipelines as a starting point for analysis are run in a QC perspective, most likely with a downsampled input. ## Samplesheet input -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. +You will need to create a samplesheet with information about the samples/fastq files you would like to analyse before running the pipeline. Use this parameter to specify its location. ```bash --input '[path to samplesheet file]' ``` -### Multiple runs of the same sample +### Full samplesheet -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: +The following simple run dir structure... -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz +```bash +run_dir +├── sample1_lane1_group1_r1.fq.gz +├── sample2_lane1_group1_r1.fq.gz +├── sample3_lane2_group2_r1.fq.gz +└── sample4_lane2_group3_r1.fq.gz ``` -### Full samplesheet - -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. - -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. +...would be represented in the following samplesheet (shown as .tsv for readability) ```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, +sample fastq_1 fastq_2 rundir tags +sample1 path/to/run_dir/sample1_lane1_group1_r1.fq.gz path/to/run_dir project1:group1 +sample2 path/to/run_dir/sample2_lane1_group1_r1.fq.gz path/to/run_dir project1:group1 +sample3 path/to/run_dir/sample3_lane2_group2_r1.fq.gz path/to/run_dir project1:group2 +sample4 path/to/run_dir/sample4_lane2_group3_r1.fq.gz path/to/run_dir control ``` | Column | Description | | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `sample` | 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 (`_`). | | `fastq_1` | Full 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` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz" (optional). | +| `rundir` | Path to the runfolder containing extra information about the sequencing run (optional\*). | +| `tags` | Colon-separated list of tags to group samples in special reports. | + +\*If rundir is not provided, the RUNDIRPARSER module is skipped and the sequencing run metadata is not collected. -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +Another [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. ## Running the pipeline -The typical command for running the pipeline is as follows: +A typical command for running the pipeline is as follows: ```bash nextflow run nf-core/seqinspector --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker @@ -75,9 +84,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -:::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -::: +> [!WARNING] +> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). The above pipeline run specified with a params file in yaml format: @@ -85,9 +93,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/seqinspector -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -96,6 +104,29 @@ genome: 'GRCh37' You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). +### Sample size selection + +Optionally, the `sample_size` parameter allows you to subset a random number of reads to be analysed. +Both absolute numbers (e.g 100) and relative numbers (e.g 0.25) can be specified. + +```bash +nextflow run nf-core/seqinspector --input ./samplesheet.csv --outdir ./results --sample_size 1000000 -profile docker +``` + +### Hybrid-selection QC metrics + +The pipeline supports hybrid-selection (HS) QC metrics collection . +Use `--run_picard_collecthsmetrics true` to run the QC tool [picard CollectHSmetrics](https://gatk.broadinstitute.org/hc/en-us/articles/360036856051-CollectHsMetrics-Picard). +This tool is otherwise not run by default. + +### Skipping tools + +Some tools might not be compatible with your data. +In this case you can skip them by providing a comma-separated list of tools to be skipped with the `--skip_tools` parameter. + +The nextflow configuration file can also be use to customise tool arguments. +See official [nexflow](https://www.nextflow.io/docs/latest/config.html) and [nf-core](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) documentation for further details. + ### Updating the pipeline When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: @@ -106,23 +137,21 @@ nextflow pull nf-core/seqinspector ### Reproducibility -It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +It is a good idea to specify the pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/seqinspector releases page](https://github.com/nf-core/seqinspector/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. -To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. +To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -:::tip -If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. -::: +> [!TIP] +> If you wish to share such profiles (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. ## Core Nextflow arguments -:::note -These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). -::: +> [!NOTE] +> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen) ### `-profile` @@ -130,16 +159,15 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +> [!IMPORTANT] +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer environment. - `test` - A profile with a complete configuration for automated testing @@ -153,9 +181,11 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `shifter` - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + - A generic configuration profile to be used with [Charliecloud](https://charliecloud.io/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) +- `wave` + - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow `24.03.0-edge` or later). - `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. @@ -173,13 +203,13 @@ Specify the path to a specific config file (this is a core Nextflow command). Se ### Resource requests -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the pipeline steps, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher resources request (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. ### Custom Containers -In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases, you may wish to change the container or conda environment used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However, in some cases the pipeline specified version maybe out of date. To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. @@ -197,14 +227,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/main.nf b/main.nf index 1e9c2ede..10bb5d94 100644 --- a/main.nf +++ b/main.nf @@ -7,9 +7,6 @@ Website: https://nf-co.re/seqinspector Slack : https://nfcore.slack.com/channels/seqinspector ---------------------------------------------------------------------------------------- -*/ - -nextflow.enable.dsl = 2 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -20,8 +17,8 @@ nextflow.enable.dsl = 2 include { SEQINSPECTOR } from './workflows/seqinspector' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_seqinspector_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_seqinspector_pipeline' - -include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_seqinspector_pipeline' +include { PREPARE_GENOME } from './subworkflows/local/prepare_genome' +include { getGenomeAttribute } from 'plugin/nf-core-utils' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -29,38 +26,10 @@ include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_seqi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// TODO nf-core: Remove this line if you don't need a FASTA file -// This is an example of how to use getGenomeAttribute() to fetch parameters -// from igenomes.config using `--genome` -// params.fasta = getGenomeAttribute('fasta') - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - NAMED WORKFLOWS FOR PIPELINE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// -// WORKFLOW: Run main analysis pipeline depending on type of input -// -workflow NFCORE_SEQINSPECTOR { - - take: - samplesheet // channel: samplesheet read in from --input - - main: - - // - // WORKFLOW: Run pipeline - // - SEQINSPECTOR ( - samplesheet - ) - - emit: - multiqc_report = SEQINSPECTOR.out.multiqc_report // channel: /path/to/multiqc_report.html +params.fasta = getGenomeAttribute('fasta') +params.bwamem2 = getGenomeAttribute('bwamem2') +params.dict = getGenomeAttribute('dict') -} /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -69,44 +38,99 @@ workflow NFCORE_SEQINSPECTOR { workflow { - main: + def fasta = params.fasta + ? channel.fromPath(params.fasta, checkIfExists: true).map { file -> tuple([id: file.name], file) }.collect() + : channel.value([[:], []]) // // SUBWORKFLOW: Run initialisation tasks // - PIPELINE_INITIALISATION ( + + PIPELINE_INITIALISATION( params.version, - params.help, params.validate_params, params.monochrome_logs, args, params.outdir, - params.input + params.input, + params.help, + params.help_full, + params.show_hidden, + ) + + PREPARE_GENOME( + fasta, + params.bwamem2, + params.skip_tools ? params.skip_tools.split(',') : ['no_skip_tools'], + params.run_picard_collecthsmetrics, + params.dict, ) // // WORKFLOW: Run main workflow // - NFCORE_SEQINSPECTOR ( - PIPELINE_INITIALISATION.out.samplesheet + NFCORE_SEQINSPECTOR( + PIPELINE_INITIALISATION.out.samplesheet, + fasta, + PREPARE_GENOME.out.bwamem2_index, + PREPARE_GENOME.out.reference_dict, + PREPARE_GENOME.out.reference_fai, ) - // // SUBWORKFLOW: Run completion tasks // - PIPELINE_COMPLETION ( + PIPELINE_COMPLETION( params.email, params.email_on_fail, params.plaintext_email, params.outdir, params.monochrome_logs, params.hook_url, - NFCORE_SEQINSPECTOR.out.multiqc_report + NFCORE_SEQINSPECTOR.out.global_report, ) } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - THE END + NAMED WORKFLOWS FOR PIPELINE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +// +// WORKFLOW: Run main analysis pipeline depending on type of input +// +workflow NFCORE_SEQINSPECTOR { + take: + samplesheet // channel: samplesheet read in from --input + fasta + bwamem2_index + dict + fasta_fai + + main: + // + // WORKFLOW: Run pipeline + // + SEQINSPECTOR( + samplesheet, + params.bait_intervals, + bwamem2_index, + fasta, + params.fastq_screen_references, + params.multiqc_config, + params.multiqc_logo, + params.multiqc_methods_description, + params.outdir, + dict, + fasta_fai, + params.run_picard_collecthsmetrics, + params.sample_size, + params.skip_tools ? params.skip_tools.split(',') : ['no_skip_tools'], + params.sort_bam, + params.target_intervals, + ) + + emit: + global_report = SEQINSPECTOR.out.global_report // channel: /path/to/multiqc_report.html + grouped_reports = SEQINSPECTOR.out.grouped_reports // channel: /path/to/multiqc_report.html +} diff --git a/modules.json b/modules.json index ebbc5dc2..e8f2421e 100644 --- a/modules.json +++ b/modules.json @@ -5,14 +5,66 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "bwamem2/index": { + "branch": "master", + "git_sha": "5dd46a36fca68d6ad1a6b22ec47adc8c6863717d", + "installed_by": ["modules"] + }, + "bwamem2/mem": { + "branch": "master", + "git_sha": "8325a8155a77a336a613a504b8e4d6cea7a2344a", + "installed_by": ["modules"], + "patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff" + }, "fastqc": { "branch": "master", - "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c", + "git_sha": "3009f27c4e4b6e99da4eeebe82799e13924a4a1f", "installed_by": ["modules"] }, + "fastqscreen/fastqscreen": { + "branch": "master", + "git_sha": "ab2e7b785ee4fa6d108472862edbf983cea7db49", + "installed_by": ["modules"], + "patch": "modules/nf-core/fastqscreen/fastqscreen/fastqscreen-fastqscreen.diff" + }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "575e1a4b51a9bad7a8cd1316a88fb85684ef7c7b", + "installed_by": ["modules"] + }, + "picard/collecthsmetrics": { + "branch": "master", + "git_sha": "a631e12055f6c23ba2c942d3902b3ed1b9eed859", + "installed_by": ["modules"] + }, + "picard/collectmultiplemetrics": { + "branch": "master", + "git_sha": "a631e12055f6c23ba2c942d3902b3ed1b9eed859", + "installed_by": ["modules"] + }, + "picard/createsequencedictionary": { + "branch": "master", + "git_sha": "a631e12055f6c23ba2c942d3902b3ed1b9eed859", + "installed_by": ["modules"] + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "b2e78932ef01165fd85829513eaca29eff8e640a", + "installed_by": ["modules"] + }, + "samtools/index": { + "branch": "master", + "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", + "installed_by": ["modules"] + }, + "seqfu/stats": { + "branch": "master", + "git_sha": "6b81c03dc4465ac9351b293dc6caada2a5e7556c", + "installed_by": ["modules"] + }, + "seqtk/sample": { + "branch": "master", + "git_sha": "a46713779030a5f508117080cbf4b693dd4c6e33", "installed_by": ["modules"] } } @@ -21,17 +73,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "65f5e638d901a51534c68fd5c1c19e8112fb4df1", "installed_by": ["subworkflows"] }, - "utils_nfvalidation_plugin": { + "utils_nfschema_plugin": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "fdc08b8b1ae74f56686ce21f7ea11ad11990ce57", "installed_by": ["subworkflows"] } } diff --git a/modules/local/rundirparser/environment.yml b/modules/local/rundirparser/environment.yml new file mode 100644 index 00000000..82d343f1 --- /dev/null +++ b/modules/local/rundirparser/environment.yml @@ -0,0 +1,9 @@ +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::python=3.13.2 + - pip=25.3 + - pip: + - PyYAML==6.0.2 + - xmltodict==1.0.2 diff --git a/modules/local/rundirparser/main.nf b/modules/local/rundirparser/main.nf new file mode 100644 index 00000000..3864b3ec --- /dev/null +++ b/modules/local/rundirparser/main.nf @@ -0,0 +1,55 @@ +process RUNDIRPARSER { + tag "${rundir.simpleName}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/41/412df2cdcf04e0a12971ba61b12cacaa5a49705442afe99ad96668bebbb8f880/data' + : 'community.wave.seqera.io/library/pip_pyyaml_xmltodict:a4e48bd1ab4b6a53'}" + + input: + tuple val(meta), path(rundir) + + output: + tuple val(meta), path("*_mqc.*"), emit: multiqc + tuple val("${task.process}"), val('Python'), eval("python --version |& sed '1!d ; s/Python //'"), emit: versions_python, topic: versions + tuple val("${task.process}"), val('PyYAML'), eval("python -c 'import yaml; print(yaml.__version__)'"), emit: versions_pyyaml, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def input_tar = rundir.toString().endsWith(".tar.gz") ? true : false + def input_dir = input_tar ? rundir.toString() - '.tar.gz' : rundir + """ + if [ ! -d ${input_dir} ]; then + mkdir -p ${input_dir} + fi + + if ${input_tar}; then + ## Ensures --strip-components only applied when top level of tar contents is a directory + ## If just files or multiple directories, place all in ${input_dir} + + if [[ \$(tar -taf ${rundir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + tar \\ + -C ${input_dir} --strip-components 1 \\ + -xavf \\ + ${rundir} + else + tar \\ + -C ${input_dir} \\ + -xavf \\ + ${rundir} + fi + fi + + # TODO: check what kind of seq platfrom to decide which script to use + # or replace with a smarter solution, like the MultiQC_SAV plugin + parse_illumina.py ${input_dir} + """ + + stub: + """ + touch ${rundir}_mqc.yml + """ +} diff --git a/modules/local/rundirparser/tests/main.nf.test b/modules/local/rundirparser/tests/main.nf.test new file mode 100644 index 00000000..9a0befcf --- /dev/null +++ b/modules/local/rundirparser/tests/main.nf.test @@ -0,0 +1,48 @@ +nextflow_process { + + name "Test Process RUNDIRPARSER" + script "../main.nf" + process "RUNDIRPARSER" + + test("NovaSeq6000") { + + when { + process { + """ + input[0] = [[], + file(params.pipelines_testdata_base_path + 'seqinspector/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz', checkIfExists: true) + ] + """ + } + } + then { + assert process.success + assert snapshot( + process.out.multiqc[0][1], + process.out.findAll { key, val -> key.startsWith("versions")} + ).match() + } + } + + test("NovaSeq6000 - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [[], + file(params.pipelines_testdata_base_path + 'seqinspector/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz', checkIfExists: true) + ] + """ + } + } + then { + assert process.success + assert snapshot( + process.out.multiqc[0][1], + process.out.findAll { key, val -> key.startsWith("versions")} + ).match() + } + } +} diff --git a/modules/local/rundirparser/tests/main.nf.test.snap b/modules/local/rundirparser/tests/main.nf.test.snap new file mode 100644 index 00000000..59e9f50c --- /dev/null +++ b/modules/local/rundirparser/tests/main.nf.test.snap @@ -0,0 +1,54 @@ +{ + "NovaSeq6000": { + "content": [ + "illumina_mqc.yml:md5,29e05fed18bca0e9a857c992b6d59a40", + { + "versions_python": [ + [ + "RUNDIRPARSER", + "Python", + "3.13.2" + ] + ], + "versions_pyyaml": [ + [ + "RUNDIRPARSER", + "PyYAML", + "6.0.2" + ] + ] + } + ], + "timestamp": "2025-12-12T13:30:03.998435274", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + }, + "NovaSeq6000 - stub": { + "content": [ + "200624_A00834_0183_BHMTFYDRXX.tar.gz_mqc.yml:md5,d41d8cd98f00b204e9800998ecf8427e", + { + "versions_python": [ + [ + "RUNDIRPARSER", + "Python", + "3.13.2" + ] + ], + "versions_pyyaml": [ + [ + "RUNDIRPARSER", + "PyYAML", + "6.0.2" + ] + ] + } + ], + "timestamp": "2025-12-12T13:30:11.388290534", + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml new file mode 100644 index 00000000..f3637444 --- /dev/null +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -0,0 +1,13 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda + +dependencies: + # renovate: datasource=conda depName=bioconda/bwa-mem2 + - bwa-mem2=2.3 + # renovate: datasource=conda depName=bioconda/htslib + - htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - samtools=1.22.1 diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf new file mode 100644 index 00000000..cb2c4bb2 --- /dev/null +++ b/modules/nf-core/bwamem2/index/main.nf @@ -0,0 +1,45 @@ +process BWAMEM2_INDEX { + tag "$fasta" + // NOTE Requires 28N GB memory where N is the size of the reference sequence, floor of 280M + // source: https://github.com/bwa-mem2/bwa-mem2/issues/9 + memory { 280.MB * Math.ceil(fasta.size() / 10000000) * task.attempt } + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e0/e05ce34b46ad42810eb29f74e4e304c0cb592b2ca15572929ed8bbaee58faf01/data' : + 'community.wave.seqera.io/library/bwa-mem2_htslib_samtools:db98f81f55b64113' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("bwamem2"), emit: index + tuple val("${task.process}"), val('bwamem2'), eval('bwa-mem2 version | grep -o -E "[0-9]+(\\.[0-9]+)+"'), emit: versions_bwamem2, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${fasta}" + def args = task.ext.args ?: '' + """ + mkdir bwamem2 + bwa-mem2 \\ + index \\ + $args \\ + -p bwamem2/${prefix} \\ + $fasta + """ + + stub: + def prefix = task.ext.prefix ?: "${fasta}" + + """ + mkdir bwamem2 + touch bwamem2/${prefix}.0123 + touch bwamem2/${prefix}.ann + touch bwamem2/${prefix}.pac + touch bwamem2/${prefix}.amb + touch bwamem2/${prefix}.bwt.2bit.64 + """ +} diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml new file mode 100644 index 00000000..12074860 --- /dev/null +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -0,0 +1,73 @@ +name: bwamem2_index +description: Create BWA-mem2 index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - bwamem2: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: https://github.com/bwa-mem2/bwa-mem2#usage + licence: + - "MIT" + identifier: "biotools:bwa-mem2" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file + ontologies: + - edam: "http://edamontology.org/data_2044" + - edam: "http://edamontology.org/format_1929" +output: + index: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bwamem2: + type: string + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + ontologies: + - edam: "http://edamontology.org/data_3210" + versions_bwamem2: + - - ${task.process}: + type: string + description: The name of the process + - bwamem2: + type: string + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + ontologies: + - edam: "http://edamontology.org/data_3210" + - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - bwamem2: + type: string + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + ontologies: + - edam: "http://edamontology.org/data_3210" + - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+": + type: eval + description: The expression to obtain the version of the tool +authors: + - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/bwamem2/mem/bwamem2-mem.diff b/modules/nf-core/bwamem2/mem/bwamem2-mem.diff new file mode 100644 index 00000000..c9127f46 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/bwamem2-mem.diff @@ -0,0 +1,18 @@ +Changes in component 'nf-core/bwamem2/mem' +'modules/nf-core/bwamem2/mem/meta.yml' is unchanged +'modules/nf-core/bwamem2/mem/environment.yml' is unchanged +Changes in 'bwamem2/mem/main.nf': +--- modules/nf-core/bwamem2/mem/main.nf ++++ modules/nf-core/bwamem2/mem/main.nf +@@ -1,6 +1,6 @@ + process BWAMEM2_MEM { + tag "${meta.id}" +- label 'process_high' ++ label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + +'modules/nf-core/bwamem2/mem/tests/main.nf.test' is unchanged +'modules/nf-core/bwamem2/mem/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml new file mode 100644 index 00000000..f3637444 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -0,0 +1,13 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda + +dependencies: + # renovate: datasource=conda depName=bioconda/bwa-mem2 + - bwa-mem2=2.3 + # renovate: datasource=conda depName=bioconda/htslib + - htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - samtools=1.22.1 diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf new file mode 100644 index 00000000..92dfc72a --- /dev/null +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -0,0 +1,74 @@ +process BWAMEM2_MEM { + tag "${meta.id}" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e0/e05ce34b46ad42810eb29f74e4e304c0cb592b2ca15572929ed8bbaee58faf01/data' + : 'community.wave.seqera.io/library/bwa-mem2_htslib_samtools:db98f81f55b64113'}" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(index) + tuple val(meta3), path(fasta) + val sort_bam + + output: + tuple val(meta), path("*.sam"), emit: sam, optional: true + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true + tuple val("${task.process}"), val('bwamem2'), eval('bwa-mem2 version | grep -o -E "[0-9]+(\\.[0-9]+)+"'), emit: versions_bwamem2, topic: versions + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension == "cram" ? "--reference ${fasta}" : "" + if (!fasta && extension == "cram") { + error("Fasta reference is required for CRAM output") + } + """ + INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` + + bwa-mem2 \\ + mem \\ + ${args} \\ + -t ${task.cpus} \\ + \$INDEX \\ + ${reads} \\ + | samtools ${samtools_command} ${args2} -@ ${task.cpus} ${reference} -o ${prefix}.${extension} - + """ + + stub: + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + if (!fasta && extension == "cram") { + error("Fasta reference is required for CRAM output") + } + + def create_index = "" + if (extension == "cram") { + create_index = "touch ${prefix}.crai" + } + else if (extension == "bam") { + create_index = "touch ${prefix}.csi" + } + """ + touch ${prefix}.${extension} + ${create_index} + """ +} diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml new file mode 100644 index 00000000..a60d6788 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -0,0 +1,167 @@ +name: bwamem2_mem +description: Performs fastq alignment to a fasta reference using BWA +keywords: + - mem + - bwa + - alignment + - map + - fastq + - bam + - sam +tools: + - bwa: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 + licence: + - "MIT" + identifier: "biotools:bwa-mem2" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + ontologies: + - edam: "http://edamontology.org/data_2044" + - edam: "http://edamontology.org/format_1930" + - - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + ontologies: + - edam: "http://edamontology.org/data_3210" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + ontologies: + - edam: "http://edamontology.org/data_2044" + - edam: "http://edamontology.org/format_1929" + - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" +output: + sam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" + ontologies: + - edam: "http://edamontology.org/format_2573" + bam: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + ontologies: + - edam: "http://edamontology.org/format_2572" + cram: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + ontologies: + - edam: "http://edamontology.org/format_3462" + crai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: Index file for CRAM file + pattern: "*.{crai}" + ontologies: [] + csi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Index file for BAM file + pattern: "*.{csi}" + ontologies: [] + versions_bwamem2: + - - ${task.process}: + type: string + description: The name of the process + - bwamem2: + type: string + description: The name of the tool + - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+": + type: eval + description: The expression to obtain the version of the tool + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - bwamem2: + type: string + description: The name of the tool + - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +authors: + - "@maxulysse" + - "@matthdsm" +maintainers: + - "@maxulysse" + - "@matthdsm" diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38a..f9f54ee9 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,7 @@ -name: fastqc +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 9e19a74c..f5629527 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -1,6 +1,6 @@ process FASTQC { - tag "$meta.id" - label 'process_medium' + tag "${meta.id}" + label 'process_low' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -11,34 +11,38 @@ process FASTQC { tuple val(meta), path(reads) output: - tuple val(meta), path("*.html"), emit: html - tuple val(meta), path("*.zip") , emit: zip - path "versions.yml" , emit: versions + tuple val(meta) , path("*.html") , emit: html + tuple val(meta) , path("*.zip") , emit: zip + tuple val("${task.process}"), val('fastqc'), eval('fastqc --version | sed "/FastQC v/!d; s/.*v//"'), emit: versions_fastqc, topic: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" // Make list of old name and new name pairs to use for renaming in the bash while loop def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } - def rename_to = old_new_pairs*.join(' ').join(' ') - def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') + def rename_to = old_new_pairs*.join(' ').join(' ') + def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ') + + // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) + // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 + // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label + def memory_in_mb = task.memory ? task.memory.toUnit('MB') / task.cpus : null + // FastQC memory value allowed range (100 - 10000) + def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) + """ - printf "%s %s\\n" $rename_to | while read old_name new_name; do + printf "%s %s\\n" ${rename_to} | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name done fastqc \\ - $args \\ - --threads $task.cpus \\ - $renamed_files - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS + ${args} \\ + --threads ${task.cpus} \\ + --memory ${fastqc_memory} \\ + ${renamed_files} """ stub: @@ -46,10 +50,5 @@ process FASTQC { """ touch ${prefix}.html touch ${prefix}.zip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS """ } diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e0..49164c88 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -11,40 +11,70 @@ tools: FastQC gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other overrepresented sequences. homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + ontologies: [] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + html: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + ontologies: [] + zip: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + ontologies: [] + versions_fastqc: + - - ${task.process}: + type: string + description: The process the versions were collected from + - fastqc: + type: string + description: The tool name + - fastqc --version | sed "/FastQC v/!d; s/.*v//": + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - fastqc: + type: string + description: The tool name + - fastqc --version | sed "/FastQC v/!d; s/.*v//": + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@grst" @@ -55,3 +85,27 @@ maintainers: - "@grst" - "@ewels" - "@FelixKrueger" +containers: + conda: + linux_amd64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-af7a5314d5015c29_1/condalock + linux_arm64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-df99cb252670875a_2/condalock + docker: + linux_amd64: + build_id: bd-af7a5314d5015c29_1 + name: community.wave.seqera.io/library/fastqc:0.12.1--af7a5314d5015c29 + scanId: sc-a618548acbee5a8a_30 + linux_arm64: + build_id: bd-df99cb252670875a_2 + name: community.wave.seqera.io/library/fastqc:0.12.1--df99cb252670875a + scanId: sc-b5913ed5d42b22d2_18 + singularity: + linux_amd64: + build_id: bd-104d26ddd9519960_1 + name: oras://community.wave.seqera.io/library/fastqc:0.12.1--104d26ddd9519960 + https: https://community.wave.seqera.io/v2/library/fastqc/blobs/sha256:e0c976cb2eca5fee72618a581537a4f8ea42fcae24c9b201e2e0f764fd28648a + linux_arm64: + build_id: bd-d56b505a93aef38a_1 + name: oras://community.wave.seqera.io/library/fastqc:0.12.1--d56b505a93aef38a + https: https://community.wave.seqera.io/v2/library/fastqc/blobs/sha256:fd39534bf298698cbe3ee4d4a6f1e73330ec4bca44c38dd9a4d06cb5ea838017 diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test deleted file mode 100644 index 70edae4d..00000000 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ /dev/null @@ -1,212 +0,0 @@ -nextflow_process { - - name "Test Process FASTQC" - script "../main.nf" - process "FASTQC" - - tag "modules" - tag "modules_nfcore" - tag "fastqc" - - test("sarscov2 single-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
Mon 2 Oct 2023
test.gz
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } - ) - } - } - - test("sarscov2 paired-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } - ) - } - } - - test("sarscov2 interleaved [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } - ) - } - } - - test("sarscov2 paired-end [bam]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } - ) - } - } - - test("sarscov2 multiple [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } - ) - } - } - - test("sarscov2 custom_prefix") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'mysample', single_end:true ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } - ) - } - } - - test("sarscov2 single-end [fastq] - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } - ) - } - } - -} diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap deleted file mode 100644 index 86f7c311..00000000 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ /dev/null @@ -1,88 +0,0 @@ -{ - "fastqc_versions_interleaved": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:40:07.293713" - }, - "fastqc_stub": { - "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:31:01.425198" - }, - "fastqc_versions_multiple": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:40:55.797907" - }, - "fastqc_versions_bam": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:40:26.795862" - }, - "fastqc_versions_single": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:39:27.043675" - }, - "fastqc_versions_paired": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:39:47.584191" - }, - "fastqc_versions_custom_prefix": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-31T17:41:14.576531" - } -} \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml deleted file mode 100644 index 7834294b..00000000 --- a/modules/nf-core/fastqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastqc: - - modules/nf-core/fastqc/** diff --git a/modules/nf-core/fastqscreen/fastqscreen/environment.yml b/modules/nf-core/fastqscreen/fastqscreen/environment.yml new file mode 100644 index 00000000..9ff968c9 --- /dev/null +++ b/modules/nf-core/fastqscreen/fastqscreen/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::fastq-screen=0.16.0 + - bioconda::perl-gdgraph=1.54 diff --git a/modules/nf-core/fastqscreen/fastqscreen/fastqscreen-fastqscreen.diff b/modules/nf-core/fastqscreen/fastqscreen/fastqscreen-fastqscreen.diff new file mode 100644 index 00000000..f75616f0 --- /dev/null +++ b/modules/nf-core/fastqscreen/fastqscreen/fastqscreen-fastqscreen.diff @@ -0,0 +1,59 @@ +Changes in component 'nf-core/fastqscreen/fastqscreen' +'modules/nf-core/fastqscreen/fastqscreen/meta.yml' is unchanged +'modules/nf-core/fastqscreen/fastqscreen/environment.yml' is unchanged +Changes in 'fastqscreen/fastqscreen/main.nf': +--- modules/nf-core/fastqscreen/fastqscreen/main.nf ++++ modules/nf-core/fastqscreen/fastqscreen/main.nf +@@ -8,8 +8,8 @@ + : 'community.wave.seqera.io/library/fastq-screen_perl-gdgraph:5c1786a5d5bc1309'}" + + input: +- tuple val(meta), path(reads) +- path database ++ tuple val(meta), path(reads, arity: '1..2') ++ tuple val(ref_names), path(ref_dirs, name: "ref*"), val(ref_basenames), val(ref_aligners) + + output: + tuple val(meta), path("*.txt"), emit: txt +@@ -22,13 +22,33 @@ + task.ext.when == null || task.ext.when + + script: ++ def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: "" ++ def config_content = ref_names.withIndex().collect { name, i -> "DATABASE ${name} ./${ref_dirs[i]}/${ref_basenames[i]} ${ref_aligners[i]}" }.join('\n') + ++ // Build mv commands to rename the output files. Dual reads will be appended with '_1' and '_2' ++ def num_reads = reads instanceof List ? reads.size() : 1 ++ def file_extensions = ['txt', 'html', 'png'] ++ def mv_cmd = file_extensions ++ .collect { ext -> ++ reads ++ .withIndex() ++ .collect { read, i -> ++ "mv ${read.simpleName}_screen.${ext} ${prefix}${num_reads > 1 ? "_${i + 1}" : ''}_screen.${ext}" ++ } ++ .join(' && ') ++ } ++ .join(' && ') + """ +- fastq_screen --threads ${task.cpus} \\ +- --conf ${database}/fastq_screen.conf \\ ++ echo '${config_content}' > fastq_screen.conf ++ ++ fastq_screen \\ ++ --conf fastq_screen.conf \\ ++ --threads ${task.cpus} \\ + ${reads} \\ +- ${args} \\ ++ ${args} ++ ++ ${mv_cmd} + """ + + stub: + +'modules/nf-core/fastqscreen/fastqscreen/tests/main.nf.test' is unchanged +'modules/nf-core/fastqscreen/fastqscreen/tests/nextflow.config' is unchanged +'modules/nf-core/fastqscreen/fastqscreen/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/fastqscreen/fastqscreen/main.nf b/modules/nf-core/fastqscreen/fastqscreen/main.nf new file mode 100644 index 00000000..cc5c0fa7 --- /dev/null +++ b/modules/nf-core/fastqscreen/fastqscreen/main.nf @@ -0,0 +1,61 @@ +process FASTQSCREEN_FASTQSCREEN { + tag "${meta.id}" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/fc/fc53eee7ca23c32220a9662fbb63c67769756544b6d74a1ee85cf439ea79a7ee/data' + : 'community.wave.seqera.io/library/fastq-screen_perl-gdgraph:5c1786a5d5bc1309'}" + + input: + tuple val(meta), path(reads, arity: '1..2') + tuple val(ref_names), path(ref_dirs, name: "ref*"), val(ref_basenames), val(ref_aligners) + + output: + tuple val(meta), path("*.txt"), emit: txt + tuple val(meta), path("*.png"), emit: png, optional: true + tuple val(meta), path("*.html"), emit: html + tuple val(meta), path("*.fastq.gz"), emit: fastq, optional: true + tuple val("${task.process}"), val('fastqscreen'), eval('fastq_screen --version 2>&1 | sed "s/^.*FastQ Screen v//;"'), emit: versions_fastqscreen, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: "" + def config_content = ref_names.withIndex().collect { name, i -> "DATABASE ${name} ./${ref_dirs[i]}/${ref_basenames[i]} ${ref_aligners[i]}" }.join('\n') + + // Build mv commands to rename the output files. Dual reads will be appended with '_1' and '_2' + def num_reads = reads instanceof List ? reads.size() : 1 + def file_extensions = ['txt', 'html', 'png'] + def mv_cmd = file_extensions + .collect { ext -> + reads + .withIndex() + .collect { read, i -> + "mv ${read.simpleName}_screen.${ext} ${prefix}${num_reads > 1 ? "_${i + 1}" : ''}_screen.${ext}" + } + .join(' && ') + } + .join(' && ') + """ + echo '${config_content}' > fastq_screen.conf + + fastq_screen \\ + --conf fastq_screen.conf \\ + --threads ${task.cpus} \\ + ${reads} \\ + ${args} + + ${mv_cmd} + """ + + stub: + def prefix = task.ext.prefix ?: meta.id + """ + touch ${prefix}_screen.html + touch ${prefix}_screen.png + touch ${prefix}_screen.txt + """ +} diff --git a/modules/nf-core/fastqscreen/fastqscreen/meta.yml b/modules/nf-core/fastqscreen/fastqscreen/meta.yml new file mode 100644 index 00000000..f8d7e0ab --- /dev/null +++ b/modules/nf-core/fastqscreen/fastqscreen/meta.yml @@ -0,0 +1,100 @@ +name: fastqscreen_fastqscreen +description: Align reads to multiple reference genomes using fastq-screen +keywords: + - align + - map + - fasta + - fastq + - genome + - reference +tools: + - "fastqscreen": + description: "FastQ Screen allows you to screen a library of sequences in FastQ + format against a set of sequence databases so you can see if the composition + of the library matches with what you expect." + homepage: "https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/" + documentation: "https://stevenwingett.github.io/FastQ-Screen/" + tool_dev_url: "https://github.com/StevenWingett/FastQ-Screen/archive/refs/tags/v0.15.3.zip" + doi: "10.5281/zenodo.5838377" + licence: ["GPL-3.0-or-later"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + ontologies: [] + - database: + type: directory + description: fastq screen database folder containing config file and index folders + pattern: "FastQ_Screen_Genomes" +output: + txt: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.txt": + type: file + description: TXT file containing alignment statistics + pattern: "*.txt" + ontologies: [] + png: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.png": + type: file + description: PNG file with graphical representation of alignments + pattern: "*.png" + ontologies: [] + html: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.html": + type: file + description: HTML file containing mapping results as a table and graphical + representation + pattern: "*.html" + ontologies: [] + fastq: + - - meta: + type: map + description: Groovy Map containing sample information + - "*.fastq.gz": + type: file + description: FastQ file containing reads that did not align to any database + (optional) + pattern: "*.fastq.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + versions_fastqscreen: + - - ${task.process}: + type: string + description: The name of the process + - fastqscreen: + type: string + description: The name of the tool + - fastq_screen --version 2>&1 | sed "s/^.*FastQ Screen v//;": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - fastqscreen: + type: string + description: The name of the tool + - fastq_screen --version 2>&1 | sed "s/^.*FastQ Screen v//;": + type: eval + description: The expression to obtain the version of the tool +authors: + - "@snesic" + - "@JPejovicApis" diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb67..009874d4 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,7 @@ -name: multiqc +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.33 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352f..3b0e975b 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,53 +3,53 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data' : + 'community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b' }" input: - path multiqc_files, stageAs: "?/*" + path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: - path "*multiqc_report.html", emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - path "versions.yml" , emit: versions + path "*.html" , emit: report + path "*_data" , emit: data + path "*_plots" , optional:true, emit: plots + tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions + // MultiQC should not push its versions to the `versions` topic. Its input depends on the versions topic to be resolved thus outputting to the topic will let the pipeline hang forever when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def config = multiqc_config ? "--config $multiqc_config" : '' - def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' + def config = multiqc_config ? "--config ${multiqc_config}" : '' + def extra_config = extra_multiqc_config ? "--config ${extra_multiqc_config}" : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ - $args \\ - $config \\ - $extra_config \\ - $logo \\ + ${args} \\ + ${config} \\ + ${prefix} \\ + ${extra_config} \\ + ${logo} \\ + ${replace} \\ + ${samples} \\ . - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ stub: """ mkdir multiqc_data - touch multiqc_plots + touch multiqc_data/.stub + mkdir multiqc_plots touch multiqc_report.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) - END_VERSIONS """ } diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35..9fd34f37 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,40 +13,76 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc input: - multiqc_files: type: file description: | List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + ontologies: [] - multiqc_config: type: file description: Optional config yml for MultiQC pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML - extra_multiqc_config: type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML - multiqc_logo: type: file description: Optional logo file for MultiQC pattern: "*.{png}" -output: - - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" - - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" - - plots: + ontologies: [] + - replace_names: type: file - description: Plots created by MultiQC - pattern: "*_data" - - versions: + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - sample_names: type: file - description: File containing software versions - pattern: "versions.yml" + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV +output: + report: + - "*.html": + type: file + description: MultiQC report file + pattern: ".html" + ontologies: [] + data: + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + plots: + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_plots" + ontologies: [] + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - multiqc: + type: string + description: The tool name + - multiqc --version | sed "s/.* //g": + type: eval + description: The expression to obtain the version of the tool authors: - "@abhi18av" - "@bunop" @@ -56,3 +93,27 @@ maintainers: - "@bunop" - "@drpatelh" - "@jfy133" +containers: + conda: + linux/amd64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-ee7739d47738383b_1/condalock + linux/arm64: + lock_file: https://wave.seqera.io/v1alpha1/builds/bd-58d7dee710ab3aa8_1/condalock + docker: + linux/amd64: + build_id: bd-ee7739d47738383b_1 + name: community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b + scanId: sc-6ddec592dcadd583_4 + linux/arm64: + build_id: bd-58d7dee710ab3aa8_1 + name: community.wave.seqera.io/library/multiqc:1.33--58d7dee710ab3aa8 + scanId: sc-a04c42273e34c55c_2 + singularity: + linux/amd64: + build_id: bd-e3576ddf588fa00d_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data + name: oras://community.wave.seqera.io/library/multiqc:1.33--e3576ddf588fa00d + linux/arm64: + build_id: bd-2537ca5f8445e3c2_1 + https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/78/78b89e91d89e9cc99ad5ade5be311f347838cb2acbfb4f13bc343b170be09ce4/data + name: oras://community.wave.seqera.io/library/multiqc:1.33--2537ca5f8445e3c2 diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test deleted file mode 100644 index f1c4242e..00000000 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ /dev/null @@ -1,84 +0,0 @@ -nextflow_process { - - name "Test Process MULTIQC" - script "../main.nf" - process "MULTIQC" - - tag "modules" - tag "modules_nfcore" - tag "multiqc" - - test("sarscov2 single-end [fastqc]") { - - when { - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_single") } - ) - } - - } - - test("sarscov2 single-end [fastqc] [config]") { - - when { - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.versions).match("multiqc_versions_config") } - ) - } - } - - test("sarscov2 single-end [fastqc] - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out.report.collect { file(it).getName() } + - process.out.data.collect { file(it).getName() } + - process.out.plots.collect { file(it).getName() } + - process.out.versions ).match("multiqc_stub") } - ) - } - - } -} diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap deleted file mode 100644 index bfebd802..00000000 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ /dev/null @@ -1,41 +0,0 @@ -{ - "multiqc_versions_single": { - "content": [ - [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-29T08:48:55.657331" - }, - "multiqc_stub": { - "content": [ - [ - "multiqc_report.html", - "multiqc_data", - "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-29T08:49:49.071937" - }, - "multiqc_versions_config": { - "content": [ - [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-29T08:49:25.457567" - } -} \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml deleted file mode 100644 index bea6c0d3..00000000 --- a/modules/nf-core/multiqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -multiqc: - - modules/nf-core/multiqc/** diff --git a/modules/nf-core/picard/collecthsmetrics/environment.yml b/modules/nf-core/picard/collecthsmetrics/environment.yml new file mode 100644 index 00000000..b4ac4fe0 --- /dev/null +++ b/modules/nf-core/picard/collecthsmetrics/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/picard + - bioconda::picard=3.4.0 diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf new file mode 100644 index 00000000..96045b5d --- /dev/null +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -0,0 +1,70 @@ +process PICARD_COLLECTHSMETRICS { + tag "${meta.id}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" + + input: + tuple val(meta), path(bam), path(bai), path(bait_intervals, stageAs: "baits/*"), path(target_intervals, stageAs: 'targets/*') + tuple val(meta2), path(ref) + tuple val(meta3), path(ref_fai) + tuple val(meta4), path(ref_dict) + tuple val(meta5), path(ref_gzi) + + output: + tuple val(meta), path("*_metrics"), emit: metrics + tuple val("${task.process}"), val('picard'), eval("picard CollectHsMetrics --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = ref ? "--REFERENCE_SEQUENCE ${ref}" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info('[Picard CollectHsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() + } + + def bait_interval_list = bait_intervals + def bait_intervallist_cmd = "" + if (bait_intervals =~ /.(bed|bed.gz)$/) { + bait_interval_list = bait_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") + bait_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${bait_intervals} --OUTPUT ${bait_interval_list} --SEQUENCE_DICTIONARY ${ref_dict} --TMP_DIR ." + } + + def target_interval_list = target_intervals + def target_intervallist_cmd = "" + if (target_intervals =~ /.(bed|bed.gz)$/) { + target_interval_list = target_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") + target_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${target_intervals} --OUTPUT ${target_interval_list} --SEQUENCE_DICTIONARY ${ref_dict} --TMP_DIR ." + } + """ + ${bait_intervallist_cmd} + ${target_intervallist_cmd} + + picard \\ + -Xmx${avail_mem}M \\ + CollectHsMetrics \\ + ${args} \\ + ${reference} \\ + --BAIT_INTERVALS ${bait_interval_list} \\ + --TARGET_INTERVALS ${target_interval_list} \\ + --INPUT ${bam} \\ + --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.CollectHsMetrics.coverage_metrics + """ +} diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml new file mode 100644 index 00000000..89bc502c --- /dev/null +++ b/modules/nf-core/picard/collecthsmetrics/meta.yml @@ -0,0 +1,129 @@ +name: picard_collecthsmetrics +description: Collects hybrid-selection (HS) metrics for a SAM or BAM file. +keywords: + - alignment + - metrics + - statistics + - insert + - hybrid-selection + - quality + - bam +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + tool_dev_url: https://github.com/broadinstitute/picard/ + licence: ["MIT"] + identifier: biotools:picard_tools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: An aligned BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + ontologies: [] + - bai: + type: file + description: Optional aligned BAM/CRAM/SAM file index + pattern: "*.{bai,crai,sai}" + ontologies: [] + - bait_intervals: + type: file + description: An interval file that contains the locations of the baits used. + pattern: "*.{interval_list,bed,bed.gz}" + ontologies: [] + - target_intervals: + type: file + description: An interval file that contains the locations of the targets. + pattern: "*.{interval_list,bed,bed.gz}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - ref: + type: file + description: | + A reference file to calculate dropout metrics measuring reduced representation of reads. + Optional input. + pattern: "*.{fa,fa.gz,fasta,fasta.gz,fna,fna.gz}" + ontologies: [] + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - ref_fai: + type: file + description: Index of reference file. Only needed when reference is supplied. + pattern: "*.fai" + ontologies: [] + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - ref_dict: + type: file + description: Sequence dictionary of FASTA file. Only needed when bed interval + lists are supplied. + pattern: "*.dict" + ontologies: [] + - - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - ref_gzi: + type: file + description: Index of reference file. Only needed when gzipped reference is supplied. + pattern: "*.gzi" + ontologies: [] +output: + metrics: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_metrics": + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" + ontologies: [] + versions_picard: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard CollectHsMetrics --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard CollectHsMetrics --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool +authors: + - "@projectoriented" + - "@matthdsm" +maintainers: + - "@projectoriented" + - "@matthdsm" diff --git a/modules/nf-core/picard/collectmultiplemetrics/environment.yml b/modules/nf-core/picard/collectmultiplemetrics/environment.yml new file mode 100644 index 00000000..b4ac4fe0 --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/picard + - bioconda::picard=3.4.0 diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf new file mode 100644 index 00000000..9de927e6 --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -0,0 +1,58 @@ +process PICARD_COLLECTMULTIPLEMETRICS { + tag "${meta.id}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" + + input: + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("*_metrics"), emit: metrics + tuple val(meta), path("*.pdf"), emit: pdf, optional: true + tuple val("${task.process}"), val('picard'), eval("picard CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" + def avail_mem = 3072 + if (!task.memory) { + log.info('[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() + } + """ + picard \\ + -Xmx${avail_mem}M \\ + CollectMultipleMetrics \\ + ${args} \\ + --INPUT ${bam} \\ + --OUTPUT ${prefix}.CollectMultipleMetrics \\ + ${reference} + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.CollectMultipleMetrics.alignment_summary_metrics + touch ${prefix}.CollectMultipleMetrics.insert_size_metrics + touch ${prefix}.CollectMultipleMetrics.quality_distribution.pdf + touch ${prefix}.CollectMultipleMetrics.base_distribution_by_cycle_metrics + touch ${prefix}.CollectMultipleMetrics.quality_by_cycle_metrics + touch ${prefix}.CollectMultipleMetrics.read_length_histogram.pdf + touch ${prefix}.CollectMultipleMetrics.base_distribution_by_cycle.pdf + touch ${prefix}.CollectMultipleMetrics.quality_by_cycle.pdf + touch ${prefix}.CollectMultipleMetrics.insert_size_histogram.pdf + touch ${prefix}.CollectMultipleMetrics.quality_distribution_metrics + """ +} diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml new file mode 100644 index 00000000..213d600b --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml @@ -0,0 +1,103 @@ +name: picard_collectmultiplemetrics +description: Collect multiple metrics from a BAM file +keywords: + - alignment + - metrics + - statistics + - insert + - quality + - bam +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + licence: ["MIT"] + identifier: biotools:picard_tools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: SAM/BAM/CRAM file + pattern: "*.{sam,bam,cram}" + ontologies: [] + - bai: + type: file + description: Optional SAM/BAM/CRAM file index + pattern: "*.{sai,bai,crai}" + ontologies: [] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - fasta: + type: file + description: Genome fasta file + ontologies: [] + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - fai: + type: file + description: Index of FASTA file. Only needed when fasta is supplied. + pattern: "*.fai" + ontologies: [] +output: + metrics: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_metrics": + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" + ontologies: [] + pdf: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pdf": + type: file + description: PDF plots of metrics + pattern: "*.{pdf}" + ontologies: [] + versions_picard: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool + +authors: + - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/picard/createsequencedictionary/environment.yml b/modules/nf-core/picard/createsequencedictionary/environment.yml new file mode 100644 index 00000000..b4ac4fe0 --- /dev/null +++ b/modules/nf-core/picard/createsequencedictionary/environment.yml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/picard + - bioconda::picard=3.4.0 diff --git a/modules/nf-core/picard/createsequencedictionary/main.nf b/modules/nf-core/picard/createsequencedictionary/main.nf new file mode 100644 index 00000000..c2aadd9f --- /dev/null +++ b/modules/nf-core/picard/createsequencedictionary/main.nf @@ -0,0 +1,44 @@ +process PICARD_CREATESEQUENCEDICTIONARY { + tag "${meta.id}" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("*.dict"), emit: reference_dict + tuple val("${task.process}"), val('picard'), eval("picard CreateSequenceDictionary --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3072 + if (!task.memory) { + log.info('[Picard CreateSequenceDictionary] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() + } + """ + picard \\ + -Xmx${avail_mem}M \\ + CreateSequenceDictionary \\ + ${args} \\ + --REFERENCE ${fasta} \\ + --OUTPUT ${prefix}.dict + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.dict + """ +} diff --git a/modules/nf-core/picard/createsequencedictionary/meta.yml b/modules/nf-core/picard/createsequencedictionary/meta.yml new file mode 100644 index 00000000..02487d5f --- /dev/null +++ b/modules/nf-core/picard/createsequencedictionary/meta.yml @@ -0,0 +1,67 @@ +name: picard_createsequencedictionary +description: Creates a sequence dictionary for a reference sequence. +keywords: + - sequence + - dictionary + - picard +tools: + - picard: + description: | + Creates a sequence dictionary file (with ".dict" extension) from a reference sequence provided in FASTA format, which is required by many processing and analysis tools. The output file contains a header but no SAMRecords, and the header contains only sequence records. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036712531-CreateSequenceDictionary-Picard- + tool_dev_url: https://github.com/broadinstitute/picard + licence: ["MIT"] + identifier: biotools:picard_tools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + ontologies: [] +output: + reference_dict: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.dict": + type: file + description: picard dictionary file + pattern: "*.{dict}" + ontologies: [] + versions_picard: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard CreateSequenceDictionary --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - picard: + type: string + description: The tool name + - "picard CreateSequenceDictionary --version 2>&1 | sed -n 's/.*Version://p'": + type: string + description: The command used to generate the version of the tool +authors: + - "@sateeshperi" + - "@mjcipriano" + - "@hseabolt" +maintainers: + - "@sateeshperi" + - "@mjcipriano" + - "@hseabolt" diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml new file mode 100644 index 00000000..89e12a64 --- /dev/null +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf new file mode 100644 index 00000000..97bfb578 --- /dev/null +++ b/modules/nf-core/samtools/faidx/main.nf @@ -0,0 +1,49 @@ +process SAMTOOLS_FAIDX { + tag "$fasta" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" + + input: + tuple val(meta), path(fasta), path(fai) + val get_sizes + + output: + tuple val(meta), path ("*.{fa,fasta}") , emit: fa, optional: true + tuple val(meta), path ("*.sizes") , emit: sizes, optional: true + tuple val(meta), path ("*.fai") , emit: fai, optional: true + tuple val(meta), path ("*.gzi") , emit: gzi, optional: true + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def get_sizes_command = get_sizes ? "cut -f 1,2 ${fasta}.fai > ${fasta}.sizes" : '' + """ + samtools \\ + faidx \\ + $fasta \\ + $args + + ${get_sizes_command} + """ + + stub: + def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll() + def fastacmd = match[0] ? "touch ${match[0][1]}" : '' + def get_sizes_command = get_sizes ? "touch ${fasta}.sizes" : '' + """ + ${fastacmd} + touch ${fasta}.fai + if [[ "${fasta.extension}" == "gz" ]]; then + touch ${fasta}.gzi + fi + + ${get_sizes_command} + """ +} diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml new file mode 100644 index 00000000..80aae1da --- /dev/null +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -0,0 +1,112 @@ +name: samtools_faidx +description: Index FASTA file, and optionally generate a file of chromosome + sizes +keywords: + - index + - fasta + - faidx + - chromosome +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: + - "MIT" + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + ontologies: [] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" + ontologies: [] + - get_sizes: + type: boolean + description: use cut to get the sizes of the index (true) or not (false) +output: + fa: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{fa,fasta}": + type: file + description: FASTA file + pattern: "*.{fa}" + ontologies: [] + sizes: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sizes": + type: file + description: File containing chromosome lengths + pattern: "*.{sizes}" + ontologies: [] + fai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" + ontologies: [] + gzi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The process the versions were collected from + - samtools: + type: string + description: The tool name + - "samtools version | sed '1!d;s/.* //'": + type: eval + description: The command used to generate the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - samtools: + type: string + description: The tool name + - "samtools version | sed '1!d;s/.* //'": + type: eval + description: The command used to generate the version of the tool +authors: + - "@drpatelh" + - "@ewels" + - "@phue" +maintainers: + - "@maxulysse" + - "@phue" diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml new file mode 100644 index 00000000..89e12a64 --- /dev/null +++ b/modules/nf-core/samtools/index/environment.yml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf new file mode 100644 index 00000000..e2a0e56d --- /dev/null +++ b/modules/nf-core/samtools/index/main.nf @@ -0,0 +1,39 @@ +process SAMTOOLS_INDEX { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.bai") , optional:true, emit: bai + tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai"), optional:true, emit: crai + tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + samtools \\ + index \\ + -@ ${task.cpus} \\ + $args \\ + $input + """ + + stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" + """ + touch ${input}.${extension} + """ +} diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml new file mode 100644 index 00000000..c6d4ce25 --- /dev/null +++ b/modules/nf-core/samtools/index/meta.yml @@ -0,0 +1,92 @@ +name: samtools_index +description: Index SAM/BAM/CRAM file +keywords: + - index + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: + - "MIT" + identifier: biotools:samtools +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file + ontologies: [] +output: + bai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + ontologies: [] + csi: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: CSI index file + pattern: "*.{csi}" + ontologies: [] + crai: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + ontologies: [] + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool +authors: + - "@drpatelh" + - "@ewels" + - "@maxulysse" +maintainers: + - "@drpatelh" + - "@ewels" + - "@maxulysse" diff --git a/modules/nf-core/seqfu/stats/environment.yml b/modules/nf-core/seqfu/stats/environment.yml new file mode 100644 index 00000000..210e292b --- /dev/null +++ b/modules/nf-core/seqfu/stats/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::seqfu=1.22.3 diff --git a/modules/nf-core/seqfu/stats/main.nf b/modules/nf-core/seqfu/stats/main.nf new file mode 100644 index 00000000..2f98c852 --- /dev/null +++ b/modules/nf-core/seqfu/stats/main.nf @@ -0,0 +1,42 @@ +process SEQFU_STATS { + tag "${meta.id}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/seqfu:1.22.3--hfd12232_2' + : 'biocontainers/seqfu:1.22.3--hfd12232_2'}" + + input: + // stats can get one or more fasta or fastq files + tuple val(meta), path(files) + + output: + tuple val(meta), path("*.tsv"), emit: stats + tuple val(meta), path("*_mqc.txt"), emit: multiqc + tuple val("${task.process}"), val('seqfu'), eval('seqfu version'), emit: versions_seqfu, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + seqfu \\ + stats \\ + ${args} \\ + --multiqc ${prefix}_mqc.txt \\ + ${files} > ${prefix}.tsv + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + echo ${args} + + touch ${prefix}.tsv + touch ${prefix}_mqc.txt + """ +} diff --git a/modules/nf-core/seqfu/stats/meta.yml b/modules/nf-core/seqfu/stats/meta.yml new file mode 100644 index 00000000..856e6f79 --- /dev/null +++ b/modules/nf-core/seqfu/stats/meta.yml @@ -0,0 +1,78 @@ +name: "seqfu_stats" +description: Statistics for FASTA or FASTQ files +keywords: + - seqfu + - stats + - n50 +tools: + - "seqfu": + description: "Cross-platform compiled suite of tools to manipulate and inspect + FASTA and FASTQ files" + homepage: "https://telatin.github.io/seqfu2/" + documentation: "https://telatin.github.io/seqfu2/" + tool_dev_url: "https://github.com/telatin/seqfu2" + doi: "10.3390/bioengineering8050059" + licence: + - "GPL v3" + identifier: biotools:seqfu +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - files: + type: file + description: One or more FASTA or FASTQ files + pattern: "*.{fasta,fastq,fasta.gz,fastq.gz,fq,fq.gz}" + ontologies: + - edam: http://edamontology.org/format_1930 +output: + stats: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.tsv": + type: file + description: Tab-separated output file with basic sequence statistics. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 + multiqc: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*_mqc.txt": + type: file + description: MultiQC ready table + pattern: "*.{_mqc.txt}" + ontologies: [] + versions_seqfu: + - - ${task.process}: + type: string + description: The name of the process + - seqfu: + type: string + description: The name of the tool + - seqfu version: + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - seqfu: + type: string + description: The name of the tool + - seqfu version: + type: eval + description: The expression to obtain the version of the tool +authors: + - "@telatin" +maintainers: + - "@telatin" diff --git a/modules/nf-core/seqtk/sample/environment.yml b/modules/nf-core/seqtk/sample/environment.yml new file mode 100644 index 00000000..b1d11cbd --- /dev/null +++ b/modules/nf-core/seqtk/sample/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::seqtk=1.4 diff --git a/modules/nf-core/seqtk/sample/main.nf b/modules/nf-core/seqtk/sample/main.nf new file mode 100644 index 00000000..1a5d8cd7 --- /dev/null +++ b/modules/nf-core/seqtk/sample/main.nf @@ -0,0 +1,48 @@ +process SEQTK_SAMPLE { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/seqtk:1.4--he4a0461_1' : + 'biocontainers/seqtk:1.4--he4a0461_1' }" + + input: + tuple val(meta), path(reads), val(sample_size) + + output: + tuple val(meta), path("*.fastq.gz"), emit: reads + tuple val("${task.process}"), val('seqtk'), eval("seqtk 2>&1 | sed -n 's/^Version: //p'"), emit: versions_seqtk, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + if (!(args ==~ /.*\ -s\ ?[0-9]+.*/)) { + args += " -s100" + } + if ( !sample_size ) { + error "SEQTK/SAMPLE must have a sample_size value included" + } + """ + printf "%s\\n" $reads | while read f; + do + seqtk \\ + sample \\ + $args \\ + \$f \\ + $sample_size \\ + | gzip --no-name > ${prefix}_\$(basename \$f) + done + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + echo "" | gzip > ${prefix}.fastq.gz + """ + +} diff --git a/modules/nf-core/seqtk/sample/meta.yml b/modules/nf-core/seqtk/sample/meta.yml new file mode 100644 index 00000000..9574c705 --- /dev/null +++ b/modules/nf-core/seqtk/sample/meta.yml @@ -0,0 +1,70 @@ +name: seqtk_sample +description: Subsample reads from FASTQ files +keywords: + - sample + - fastx + - reads +tools: + - seqtk: + description: Seqtk is a fast and lightweight tool for processing sequences + in the FASTA or FASTQ format. Seqtk sample command subsamples sequences. + homepage: https://github.com/lh3/seqtk + documentation: https://docs.csc.fi/apps/seqtk/ + tool_dev_url: https://github.com/lh3/seqtk + licence: ["MIT"] + identifier: biotools:seqtk +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: List of input FastQ files + pattern: "*.{fastq.gz}" + ontologies: [] + - sample_size: + type: float + description: Fraction (<1.0) or number (>=1) of reads to sample. +output: + reads: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fastq.gz": + type: file + description: Subsampled FastQ files + pattern: "*.{fastq.gz}" + ontologies: [] + versions_seqtk: + - - ${task.process}: + type: string + description: The name of the process + - seqtk: + type: string + description: The name of the tool + - "seqtk 2>&1 | sed -n 's/^Version: //p'": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - seqtk: + type: string + description: The name of the tool + - "seqtk 2>&1 | sed -n 's/^Version: //p'": + type: eval + description: The expression to obtain the version of the tool +authors: + - "@kaurravneet4123" + - "@sidorov-si" + - "@adamrtalbot" +maintainers: + - "@kaurravneet4123" + - "@sidorov-si" + - "@adamrtalbot" diff --git a/nextflow.config b/nextflow.config index 776814f7..6f51793f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -8,111 +8,114 @@ // Global default params, used in configs params { - - // TODO nf-core: Specify your pipeline's command line flags // Input options - input = null + input = null + sample_size = 0 + skip_tools = '' + // References - genome = null - igenomes_base = 's3://ngi-igenomes/igenomes/' - igenomes_ignore = false - fasta = null// MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' - multiqc_methods_description = null + genome = null + igenomes_base = 's3://ngi-igenomes/igenomes/' + igenomes_ignore = false + sort_bam = true + + // Fastqscreen options + fastq_screen_references = "${projectDir}/assets/example_fastq_screen_references.csv" + + // MultiQC options + multiqc_config = null + multiqc_title = null + multiqc_logo = null + max_multiqc_email_size = '25.MB' + multiqc_methods_description = null // Boilerplate options - outdir = null - publish_dir_mode = 'copy' - email = null - email_on_fail = null - plaintext_email = false - monochrome_logs = false - hook_url = null - help = false - version = false + outdir = null + publish_dir_mode = 'copy' + email = null + email_on_fail = null + plaintext_email = false + monochrome_logs = false + hook_url = System.getenv('HOOK_URL') + help = false + help_full = false + show_hidden = false + version = false + modules_testdata_base_path = 's3://ngi-igenomes/testdata/nf-core/modules/' + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + trace_report_suffix = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + + // picard_collecthsmetrics options + run_picard_collecthsmetrics = false + bait_intervals = null + target_intervals = null // Config options - config_profile_name = null - config_profile_description = null - custom_config_version = 'master' - custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - config_profile_contact = null - config_profile_url = null + config_profile_name = null + config_profile_description = null - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' + custom_config_version = 'master' + custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" + config_profile_contact = null + config_profile_url = null // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true - + validate_params = true } // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/seqinspector custom profiles from different institutions. -// Warning: Uncomment only if a pipeline-specific institutional config already exists on nf-core/configs! -// try { -// includeConfig "${params.custom_config_base}/pipeline/seqinspector.config" -// } catch (Exception e) { -// System.err.println("WARNING: Could not load nf-core/config/seqinspector profiles: ${params.custom_config_base}/pipeline/seqinspector.config") -// } profiles { debug { - dumpHashes = true - process.beforeScript = 'echo $HOSTNAME' - cleanup = false + dumpHashes = true + process.beforeScript = 'echo $HOSTNAME' + cleanup = false nextflow.enable.configProcessNamesValidation = true } conda { - conda.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - channels = ['conda-forge', 'bioconda', 'defaults'] - apptainer.enabled = false + conda.enabled = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + conda.channels = ['conda-forge', 'bioconda'] + apptainer.enabled = false } mamba { - conda.enabled = true - conda.useMamba = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + conda.enabled = true + conda.useMamba = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } docker { - docker.enabled = true - conda.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false - docker.runOptions = '-u $(id -u):$(id -g)' + docker.enabled = true + conda.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false + docker.runOptions = '-u $(id -u):$(id -g)' + } + arm64 { + process.arch = 'arm64' + // TODO https://github.com/nf-core/modules/issues/6694 + // For now if you're using arm64 you have to use wave for the sake of the maintainers + // wave profile + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' } - arm { - docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' + emulate_amd64 { + docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { singularity.enabled = true @@ -125,70 +128,84 @@ profiles { apptainer.enabled = false } podman { - podman.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + podman.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + shifter.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } shifter { - shifter.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - charliecloud.enabled = false - apptainer.enabled = false + shifter.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + charliecloud.enabled = false + apptainer.enabled = false } charliecloud { - charliecloud.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - apptainer.enabled = false + charliecloud.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + apptainer.enabled = false } apptainer { - apptainer.enabled = true - apptainer.autoMounts = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false + apptainer.enabled = true + apptainer.autoMounts = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + wave { + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' + } + gpu { + docker.runOptions = '-u $(id -u):$(id -g) --gpus all' + apptainer.runOptions = '--nv' + singularity.runOptions = '--nv' + } + test { + includeConfig 'conf/test.config' } - gitpod { - executor.name = 'local' - executor.cpus = 4 - executor.memory = 8.GB + test_full { + includeConfig 'conf/test_full.config' } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled +// 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/seqinspector 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/seqinspector custom profiles from different institutions. +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/seqinspector.config" : "/dev/null" + +// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' singularity.registry = 'quay.io' - -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} +charliecloud.registry = 'quay.io' // Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} +includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' + // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -200,73 +217,208 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// Set bash options +process.shell = [ + "bash", + "-C", // No clobber - prevent output redirection from overwriting files. + "-e", // Exit if a tool returns a non-zero status/exit code + "-u", // Treat unset variables and parameters as an error + "-o", // Returns the status of the last command to exit.. + "pipefail" // ..with a non-zero status or zero if all successfully execute +] // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false -def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true - file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html" } report { enabled = true - file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html" } trace { enabled = true - file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt" } dag { enabled = true - file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html" } manifest { name = 'nf-core/seqinspector' - author = """Adrien Coulier""" + contributors = [ + [ + name: 'Adrien Coulier', + affiliation: 'Pixelgen Technologies', + github: 'Aratz', + contribution: ['author'], + orcid: '0000-0003-2702-1103', + ], + [ + name: 'Alfred Kedhammar', + affiliation: 'Clinical Genomics', + github: 'kedhammar', + contribution: ['author'], + ], + [ + name: 'Agrima Bhatt', + affiliation: 'National Genomics Infrastructure', + github: 'agrima2010', + contribution: ['author'], + orcid: '0009-0004-5536-7210', + ], + [ + name: 'Maxime U Garcia', + affiliation: 'National Genomics Infrastructure', + github: 'maxulysse', + contribution: ['contributor', 'maintainer'], + orcid: '0000-0003-2827-9261', + ], + [ + name: 'Natalia Garcia Garcia', + github: 'nggvs', + contribution: ['contributor'], + ], + [ + name: 'Franziska Bonath', + affiliation: 'National Genomics Infrastructure', + github: 'FranBonath', + contribution: ['author'], + orcid: '0000-0002-1270-1504', + ], + [ + name: 'Pontus Höjer', + affiliation: 'National Genomics Infrastructure', + github: 'pontushojer', + contribution: ['contributor'], + orcid: '0000-0001-8010-4755', + ], + [ + name: 'Edmund Miller', + affiliation: 'Seqera', + github: 'edmundmiller', + contribution: ['contributor'], + ], + [ + name: 'Mahesh Binzer-Panchal', + affiliation: 'National Bioinformatics Infrastructure Sweden', + github: 'mahesh-panchal', + contribution: ['contributor'], + orcid: '0000-0003-1675-0677', + ], + [ + name: 'Ramprasad Neethiraj', + affiliation: 'Clinical Genomics', + github: 'ramprasadn', + contribution: ['author'], + ], + [ + name: 'Matilda Åslin', + affiliation: 'National Genomics Infrastructure', + github: 'matrulda', + contribution: ['author'], + ], + [ + name: 'Patricie Skaláková', + affiliation: 'Masaryk University', + github: 'Patricie34', + contribution: ['contributor'], + ], + [ + name: 'Eliott Bosshard', + affiliation: 'Clinical Genomics', + github: 'EliottBo', + contribution: ['contributor'], + ], + [ + name: 'Karthik Nair', + affiliation: 'National Genomics Infrastructure', + github: 'KarNair', + contribution: ['contributor'], + ], + [ + name: 'Matthias Zepper', + affiliation: 'National Genomics Infrastructure', + github: 'MatthiasZepper', + contribution: ['author'], + ], + [ + name: 'Nelly Nyawira Nkonge', + affiliation: 'National Genomics Infrastructure', + github: 'nkongenelly', + contribution: ['contributor'], + ], + [ + name: 'Beatriz Vinhas', + affiliation: 'Clinical Genomics', + github: 'beatrizsavinhas', + contribution: ['contributor'], + ], + [ + name: 'Júlia Mir Pedrol', + affiliation: 'Center For Genomics Regulation', + github: 'mirpedrol', + contribution: ['contributor'], + ], + [ + name: 'Cristina Tuñí i Domínguez', + affiliation: 'Flowmics', + github: 'ctuni', + contribution: ['contributor'], + ], + [ + name: 'Johannes Alneberg', + affiliation: 'National Genomics Infrastructure', + github: 'alneberg', + contribution: ['contributor'], + ], + [ + name: 'Annick Renevey', + affiliation: 'Clinical Genomics', + github: 'rannick', + contribution: ['contributor'], + ], + [ + name: 'Adam Talbot', + affiliation: 'Seqera', + github: 'adamrtalbot', + contribution: ['contributor'], + ], + [ + name: 'Jonas Kjellin', + affiliation: 'National Genomics Infrastructure', + github: 'kjellinjonas', + contribution: ['contributor'], + ], + [ + name: 'Tori Griffin', + affiliation: 'National Genomics Infrastructure', + github: 'torigiffin', + contribution: ['contributor'], + ], + ] homePage = 'https://github.com/nf-core/seqinspector' description = """Pipeline to QC your sequences""" mainScript = 'main.nf' - nextflowVersion = '!>=23.04.0' - version = '1.0dev' + defaultBranch = 'master' + nextflowVersion = '!>=25.10.4' + version = '1.0.0' doi = '' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +// Nextflow plugins +plugins { + id 'nf-core-utils@0.4.0' // nf-core-utils is a collection of utilities for Nextflow pipelines + id 'nf-schema@2.6.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } - } +validation { + defaultIgnoreParams = ["genomes"] + monochromeLogs = params.monochrome_logs } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index ec323b90..0332ca15 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/seqinspector/master/nextflow_schema.json", "title": "nf-core/seqinspector pipeline parameters", "description": "Pipeline to QC your sequences", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -23,6 +23,12 @@ "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/seqinspector/usage#samplesheet-input).", "fa_icon": "fas fa-file-csv" }, + "sample_size": { + "type": "number", + "description": "Take a subset of reads for analysis.", + "help_text": "Subset can be used as a fraction of reads (ex/ 0.20) or an absolute number of reads per sample (integer). Pipeline will still run if a sample has less reads than selected subset value.", + "default": 0 + }, "outdir": { "type": "string", "format": "directory-path", @@ -40,6 +46,11 @@ "type": "string", "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", "fa_icon": "fas fa-file-signature" + }, + "skip_tools": { + "type": "string", + "description": "Comma-separated string of tools to skip", + "pattern": "^((fastqc|fastqscreen|seqfu_stats|seqtk_sample|bwamem2_index|bwamem2_mem|picard_collectmultiplemetrics|samtools_faidx|samtools_index|rundirparser)?,?)*(? **NB** If none provided, will be generated automatically from the FASTA reference.\n\nIf you use AWS iGenomes, this has already been set for you appropriately." + }, + "dict": { + "type": "string", + "hidden": true, + "description": "Sequence dictionary for the reference fasta file provided.", + "help_text": "If you wish to recompute indices available on igenomes, set `--ic false`.\n\n> **NB** If none provided, will be generated automatically from the FASTA reference.\n\nIf you use AWS iGenomes, this has already been set for you appropriately.", + "pattern": "^\\S+.dict$", + "format": "file-path", + "exists": true } } }, @@ -122,41 +164,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -164,18 +171,18 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", "fa_icon": "fas fa-question-circle", "hidden": true }, + "sort_bam": { + "type": "boolean", + "default": true, + "description": "Sort BAM files after alignment", + "help_text": "If true, BAM files produced by alignment will be sorted by genomic coordinates." + }, "publish_dir_mode": { "type": "string", "default": "copy", @@ -220,6 +227,12 @@ "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.", "hidden": true }, + "modules_testdata_base_path": { + "type": "string", + "description": "Base path / URL for data used in the modules", + "hidden": true, + "default": "s3://ngi-igenomes/testdata/nf-core/modules/" + }, "multiqc_config": { "type": "string", "format": "file-path", @@ -245,45 +258,78 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { + "pipelines_testdata_base_path": { + "type": "string", + "fa_icon": "far fa-check-circle", + "description": "Base URL or local path to location of pipeline test dataset files", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", + "hidden": true + }, + "trace_report_suffix": { + "type": "string", + "fa_icon": "far calendar", + "description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.", + "hidden": true + }, + "help": { + "type": ["boolean", "string"], + "description": "Display the help message." + }, + "help_full": { "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." + "description": "Display the full detailed help message." }, - "validationFailUnrecognisedParams": { + "show_hidden": { + "type": "boolean", + "description": "Display hidden parameters in the help message (only works when --help or --help_full are provided)." + } + } + }, + "picard_collecthsmetrics_options": { + "title": "picard_collecthsmetrics options", + "type": "object", + "description": "", + "default": "", + "properties": { + "run_picard_collecthsmetrics": { "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." + "description": "Run picard_colecthsmetrics for QC of bam files." }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", + "bait_intervals": { + "type": "string", + "description": "Path to bait intervals file.", + "hidden": true, + "pattern": "^\\S+.(bed|bed.gz|interval_list)$", + "format": "file-path", + "exists": true + }, + "target_intervals": { + "type": "string", + "description": "Path to target intervals file.", "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." + "pattern": "^\\S+.(bed|bed.gz|interval_list)$", + "format": "file-path", + "exists": true } } } }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/$defs/reference_genome_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/institutional_config_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/generic_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/picard_collecthsmetrics_options" } ] } diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 00000000..3b7f95dc --- /dev/null +++ b/nf-test.config @@ -0,0 +1,25 @@ +config { + // location for all nf-test tests + testsDir = "." + + // nf-test directory including temporary files for each test + workDir = System.getenv("NFT_WORKDIR") ?: ".nf-test" + + // location of an optional nextflow.config file specific for executing tests + configFile = "tests/nextflow.config" + + // ignore tests coming from the nf-core/modules repo + ignore = ['modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*'] + + // run all test with defined profile(s) from the main nextflow.config + profile = "test" + + // list of filenames or patterns that should be trigger a full test run + triggers = ['nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore'] + + // load the necessary plugins + plugins { + load "nft-bam@0.4.0" + load "nft-utils@0.0.9" + } +} diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 56110621..00000000 --- a/pyproject.toml +++ /dev/null @@ -1,15 +0,0 @@ -# Config file for Python. Mostly used to configure linting of bin/*.py with Ruff. -# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. -[tool.ruff] -line-length = 120 -target-version = "py38" -cache-dir = "~/.cache/ruff" - -[tool.ruff.lint] -select = ["I", "E1", "E4", "E7", "E9", "F", "UP", "N"] - -[tool.ruff.lint.isort] -known-first-party = ["nf_core"] - -[tool.ruff.lint.per-file-ignores] -"__init__.py" = ["E402", "F401"] diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json new file mode 100644 index 00000000..32c34943 --- /dev/null +++ b/ro-crate-metadata.json @@ -0,0 +1,385 @@ +{ + "@context": [ + "https://w3id.org/ro/crate/1.1/context", + { + "GithubService": "https://w3id.org/ro/terms/test#GithubService", + "JenkinsService": "https://w3id.org/ro/terms/test#JenkinsService", + "PlanemoEngine": "https://w3id.org/ro/terms/test#PlanemoEngine", + "TestDefinition": "https://w3id.org/ro/terms/test#TestDefinition", + "TestInstance": "https://w3id.org/ro/terms/test#TestInstance", + "TestService": "https://w3id.org/ro/terms/test#TestService", + "TestSuite": "https://w3id.org/ro/terms/test#TestSuite", + "TravisService": "https://w3id.org/ro/terms/test#TravisService", + "definition": "https://w3id.org/ro/terms/test#definition", + "engineVersion": "https://w3id.org/ro/terms/test#engineVersion", + "instance": "https://w3id.org/ro/terms/test#instance", + "resource": "https://w3id.org/ro/terms/test#resource", + "runsOn": "https://w3id.org/ro/terms/test#runsOn" + } + ], + "@graph": [ + { + "@id": "./", + "@type": "Dataset", + "creativeWorkStatus": "Stable", + "datePublished": "2026-02-19T15:27:56+00:00", + "description": "

\n \n \n \"nf-core/seqinspector\"\n \n

\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/seqinspector)\n[![GitHub Actions CI Status](https://github.com/nf-core/seqinspector/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/seqinspector/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/seqinspector/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/seqinspector/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/seqinspector/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%A525.10.4-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.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.5.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/seqinspector)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23seqinspector-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/seqinspector)[![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/seqinspector** is a bioinformatics pipeline that processes raw sequence data (FASTQ) to provide comprehensive quality control.\nIt can perform subsampling, quality assessment, duplication level analysis, and complexity evaluation on a per-sample basis, while also detecting adapter content, technical artifacts, and common biological contaminants.\nThe pipeline generates detailed MultiQC reports with flexible output options, ranging from individual sample reports to project-wide summaries, making it particularly useful for sequencing core facilities and research groups with access to sequencing instruments.\nIf provided, nf-core/seqinspector can also parse statistics from an Illumina run folder directory into the final MultiQC reports.\n\n### Compatibility between tools and data type\n\n\n\n| Tool Type | Tool Name | Tool Description | Compatibility with Data | Dependencies | Default tool |\n| ------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------ |\n| `Subsampling` | [`Seqtk`](https://github.com/lh3/seqtk) | Global subsampling of reads. Only performs subsampling if `--sample_size` parameter is given. | [RNA, DNA, synthetic] | [N/A] | no |\n| `Indexing, Mapping` | [`Bwamem2`](https://github.com/bwa-mem2/bwa-mem2) | Align reads to reference | [RNA, DNA] | [N/A] | yes |\n| `Indexing` | [`SAMtools`](http://github.com/samtools) | Index aligned BAM files, create FASTA index | [DNA] | [N/A] | yes |\n| `QC` | [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) | Read QC | [RNA, DNA] | [N/A] | yes |\n| `QC` | [`FastqScreen`](https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/) | Basic contamination detection | [RNA, DNA] | [N/A] | yes |\n| `QC` | [`SeqFu Stats`](https://github.com/telatin/seqfu2) | Sequence statistics | [RNA, DNA] | [N/A] | yes |\n| `QC` | [`Picard collect multiple metrics`](https://broadinstitute.github.io/picard/picard-metric-definitions.html) | Collect multiple QC metrics | [RNA, DNA] | [Bwamem2, SAMtools, `--genome`] | yes |\n| `QC` | [`Picard_collecthsmetrics`](https://gatk.broadinstitute.org/hc/en-us/articles/360036856051-CollectHsMetrics-Picard) | Collect alignment QC metrics of hybrid-selection data. | [RNA, DNA] | [Bwamem2, SAMtools, `--fasta`, `--run_picard_collecths_metrics`, `--bait_intervals`, `--target_intervals` (`--ref_dict`)] | no |\n| `Reporting` | [`MultiQC`](http://multiqc.info/) | Present QC for raw reads | [RNA, DNA, synthetic] | [N/A] | yes |\n\n### Workflow diagram\n\n\n \n \n \"Fallback\n\n\n### Summary of tools and version used in the pipeline\n\n| Tool | Version |\n| ----------- | ------- |\n| bowtie2 | 2.5.4 |\n| bwamem2 | 2.3 |\n| fastqc | 0.12.1 |\n| fastqscreen | 0.16.0 |\n| multiqc | 1.33 |\n| picard | 3.4.0 |\n| samtools | 1.22.1 |\n| seqfu | 1.22.3 |\n| seqtk | 1.4 |\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:\n\n`samplesheet.csv`:\n\n```csv\nsample,fastq_1,fastq_2,rundir,tags\nCONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,200624_A00834_0183_BHMTFYDRXX,lane1:project5:group2\n```\n\nEach row represents a fastq file (single-end with only `fastq_1`) or a pair of fastq files (paired end with `fastq_1` and `fastq_2`).\n`rundir` is the path to the runfolder.\n`tags` is a colon-separated list of tags that will be added to the MultiQC report for this `sample`.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/seqinspector \\\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/seqinspector/usage) and the [parameter documentation](https://nf-co.re/seqinspector/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/seqinspector/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/seqinspector/output).\n\n## Credits\n\nnf-core/seqinspector was originally written by [@agrima2010](https://github.com/agrima2010), [@Aratz](https://github.com/Aratz), [@FranBonath](https://github.com/FranBonath), [@kedhammar](https://github.com/kedhammar), and [@MatthiasZepper](https://github.com/MatthiasZepper) from the Swedish [National Genomics Infrastructure](https://github.com/NationalGenomicsInfrastructure/) and [Clinical Genomics Stockholm](https://clinical.scilifelab.se/).\n\nMaintenance is now lead by Maxime U Garcia ([National Genomics Infrastructure](https://github.com/NationalGenomicsInfrastructure/))\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- [@adamrtalbot](https://github.com/adamrtalbot)\n- [@alneberg](https://github.com/alneberg)\n- [@beatrizsavinhas](https://github.com/beatrizsavinhas)\n- [@ctuni](https://github.com/ctuni)\n- [@edmundmiller](https://github.com/edmundmiller)\n- [@EliottBo](https://github.com/EliottBo)\n- [@KarNair](https://github.com/KarNair)\n- [@kjellinjonas](https://github.com/kjellinjonas)\n- [@mahesh-panchal](https://github.com/mahesh-panchal)\n- [@matrulda](https://github.com/matrulda)\n- [@mirpedrol](https://github.com/mirpedrol)\n- [@nggvs](https://github.com/nggvs)\n- [@nkongenelly](https://github.com/nkongenelly)\n- [@Patricie34](https://github.com/Patricie34)\n- [@pontushojer](https://github.com/pontushojer)\n- [@ramprasadn](https://github.com/ramprasadn)\n- [@rannick](https://github.com/rannick)\n- [@torigiffin](https://github.com/torigiffin)\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 `#seqinspector` channel](https://nfcore.slack.com/channels/seqinspector) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\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" + }, + { + "@id": "assets/" + }, + { + "@id": "conf/" + }, + { + "@id": "docs/" + }, + { + "@id": "docs/images/" + }, + { + "@id": "modules/" + }, + { + "@id": "modules/local/" + }, + { + "@id": "modules/nf-core/" + }, + { + "@id": "workflows/" + }, + { + "@id": "subworkflows/" + }, + { + "@id": "nextflow.config" + }, + { + "@id": "README.md" + }, + { + "@id": "nextflow_schema.json" + }, + { + "@id": "CHANGELOG.md" + }, + { + "@id": "LICENSE" + }, + { + "@id": "CODE_OF_CONDUCT.md" + }, + { + "@id": "CITATIONS.md" + }, + { + "@id": "modules.json" + }, + { + "@id": "docs/usage.md" + }, + { + "@id": "docs/output.md" + }, + { + "@id": ".nf-core.yml" + }, + { + "@id": ".pre-commit-config.yaml" + }, + { + "@id": ".prettierignore" + } + ], + "isBasedOn": "https://github.com/nf-core/seqinspector", + "license": "MIT", + "mainEntity": { + "@id": "main.nf" + }, + "mentions": [ + { + "@id": "#4194f54b-797e-4fc8-8f8a-d74016164630" + } + ], + "name": "nf-core/seqinspector" + }, + { + "@id": "ro-crate-metadata.json", + "@type": "CreativeWork", + "about": { + "@id": "./" + }, + "conformsTo": [ + { + "@id": "https://w3id.org/ro/crate/1.1" + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate/1.0" + } + ] + }, + { + "@id": "main.nf", + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], + "creator": [ + { + "@id": "https://orcid.org/0009-0004-5536-7210" + }, + { + "@id": "#89784800+kedhammar@users.noreply.github.com" + }, + { + "@id": "#max.u.garcia@gmail.com" + }, + { + "@id": "https://orcid.org/0000-0003-2702-1103" + }, + { + "@id": "https://orcid.org/0000-0003-1675-0677" + } + ], + "dateCreated": "", + "dateModified": "2026-02-19T16:27:56Z", + "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", + "keywords": [ + "nf-core", + "nextflow", + "genomics", + "quality-control" + ], + "license": [ + "MIT" + ], + "maintainer": [ + { + "@id": "https://orcid.org/0009-0004-5536-7210" + }, + { + "@id": "#89784800+kedhammar@users.noreply.github.com" + }, + { + "@id": "#max.u.garcia@gmail.com" + }, + { + "@id": "https://orcid.org/0000-0003-2702-1103" + }, + { + "@id": "https://orcid.org/0000-0003-1675-0677" + } + ], + "name": [ + "nf-core/seqinspector" + ], + "programmingLanguage": { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" + }, + "sdPublisher": { + "@id": "https://nf-co.re/" + }, + "url": [ + "https://github.com/nf-core/seqinspector", + "https://nf-co.re/seqinspector/1.0.0/" + ], + "version": [ + "1.0.0" + ] + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", + "@type": "ComputerLanguage", + "identifier": { + "@id": "https://www.nextflow.io/" + }, + "name": "Nextflow", + "url": { + "@id": "https://www.nextflow.io/" + }, + "version": "!>=25.10.4" + }, + { + "@id": "#4194f54b-797e-4fc8-8f8a-d74016164630", + "@type": "TestSuite", + "instance": [ + { + "@id": "#3c0042e5-6160-451c-8f37-2395b6ebc082" + } + ], + "mainEntity": { + "@id": "main.nf" + }, + "name": "Test suite for nf-core/seqinspector" + }, + { + "@id": "#3c0042e5-6160-451c-8f37-2395b6ebc082", + "@type": "TestInstance", + "name": "GitHub Actions workflow for testing nf-core/seqinspector", + "resource": "repos/nf-core/seqinspector/actions/workflows/nf-test.yml", + "runsOn": { + "@id": "https://w3id.org/ro/terms/test#GithubService" + }, + "url": "https://api.github.com" + }, + { + "@id": "https://w3id.org/ro/terms/test#GithubService", + "@type": "TestService", + "name": "Github Actions", + "url": { + "@id": "https://github.com" + } + }, + { + "@id": "assets/", + "@type": "Dataset", + "description": "Additional files" + }, + { + "@id": "conf/", + "@type": "Dataset", + "description": "Configuration files" + }, + { + "@id": "docs/", + "@type": "Dataset", + "description": "Markdown files for documenting the pipeline" + }, + { + "@id": "docs/images/", + "@type": "Dataset", + "description": "Images for the documentation files" + }, + { + "@id": "modules/", + "@type": "Dataset", + "description": "Modules used by the pipeline" + }, + { + "@id": "modules/local/", + "@type": "Dataset", + "description": "Pipeline-specific modules" + }, + { + "@id": "modules/nf-core/", + "@type": "Dataset", + "description": "nf-core modules" + }, + { + "@id": "workflows/", + "@type": "Dataset", + "description": "Main pipeline workflows to be executed in main.nf" + }, + { + "@id": "subworkflows/", + "@type": "Dataset", + "description": "Smaller subworkflows" + }, + { + "@id": "nextflow.config", + "@type": "File", + "description": "Main Nextflow configuration file" + }, + { + "@id": "README.md", + "@type": "File", + "description": "Basic pipeline usage information" + }, + { + "@id": "nextflow_schema.json", + "@type": "File", + "description": "JSON schema for pipeline parameter specification" + }, + { + "@id": "CHANGELOG.md", + "@type": "File", + "description": "Information on changes made to the pipeline" + }, + { + "@id": "LICENSE", + "@type": "File", + "description": "The license - should be MIT" + }, + { + "@id": "CODE_OF_CONDUCT.md", + "@type": "File", + "description": "The nf-core code of conduct" + }, + { + "@id": "CITATIONS.md", + "@type": "File", + "description": "Citations needed when using the pipeline" + }, + { + "@id": "modules.json", + "@type": "File", + "description": "Version information for modules from nf-core/modules" + }, + { + "@id": "docs/usage.md", + "@type": "File", + "description": "Usage documentation" + }, + { + "@id": "docs/output.md", + "@type": "File", + "description": "Output documentation" + }, + { + "@id": ".nf-core.yml", + "@type": "File", + "description": "nf-core configuration file, configuring template features and linting rules" + }, + { + "@id": ".pre-commit-config.yaml", + "@type": "File", + "description": "Configuration file for pre-commit hooks" + }, + { + "@id": ".prettierignore", + "@type": "File", + "description": "Ignore file for prettier" + }, + { + "@id": "https://nf-co.re/", + "@type": "Organization", + "name": "nf-core", + "url": "https://nf-co.re/" + }, + { + "@id": "https://orcid.org/0009-0004-5536-7210", + "@type": "Person", + "email": "163723002+agrima2010@users.noreply.github.com", + "name": "Agrima Bhatt" + }, + { + "@id": "#89784800+kedhammar@users.noreply.github.com", + "@type": "Person", + "email": "89784800+kedhammar@users.noreply.github.com", + "name": "Alfred Kedhammar" + }, + { + "@id": "#max.u.garcia@gmail.com", + "@type": "Person", + "email": "max.u.garcia@gmail.com", + "name": "Maxime U Garcia" + }, + { + "@id": "https://orcid.org/0000-0003-2702-1103", + "@type": "Person", + "email": "adrien.coulier@medsci.uu.se", + "name": "Adrien Coulier" + }, + { + "@id": "https://orcid.org/0000-0003-1675-0677", + "@type": "Person", + "email": "mahesh.binzer-panchal@nbis.se", + "name": "Mahesh Binzer-Panchal" + } + ] +} \ No newline at end of file diff --git a/subworkflows/local/prepare_genome/main.nf b/subworkflows/local/prepare_genome/main.nf new file mode 100644 index 00000000..176036b1 --- /dev/null +++ b/subworkflows/local/prepare_genome/main.nf @@ -0,0 +1,58 @@ +// +// Prepare reference genome files + +include { BWAMEM2_INDEX } from '../../../modules/nf-core/bwamem2/index' +include { PICARD_CREATESEQUENCEDICTIONARY } from '../../../modules/nf-core/picard/createsequencedictionary' +include { SAMTOOLS_FAIDX } from '../../../modules/nf-core/samtools/faidx' + +workflow PREPARE_GENOME { + take: + ch_reference_fasta + bwamem2 + skip_tools + run_picard_collecthsmetrics // Boolean: [mandatory for collecthsmetrics] + ref_dict // path: [mandatory for collecthsmetrics] path(ref_dict) + + main: + // Initialize all channels that might be used later + ch_bwamem2_index = channel.empty() + ch_reference_fai = channel.empty() + ch_ref_dict = channel.empty() + + if (!("bwamem2_index" in skip_tools)) { + // Use pre-built index when --bwamem2 parameter is provided + // Or build index from reference FASTA + if (bwamem2) { + ch_bwamem2_index = channel.fromPath(bwamem2, checkIfExists: true) + .map { index_dir -> tuple([id: index_dir.name], index_dir) } + .collect() + } + else { + BWAMEM2_INDEX(ch_reference_fasta) + ch_bwamem2_index = BWAMEM2_INDEX.out.index + } + } + + if (!("samtools_faidx" in skip_tools)) { + SAMTOOLS_FAIDX( + ch_reference_fasta.map { meta, fasta -> [meta, fasta, []] }, + false, + ) + ch_reference_fai = SAMTOOLS_FAIDX.out.fai + } + + if (run_picard_collecthsmetrics) { + if (ref_dict) { + ch_ref_dict = channel.fromPath(ref_dict, checkIfExists: true).map { dict -> [[id: dict.simpleName], dict] } + } + else { + PICARD_CREATESEQUENCEDICTIONARY(ch_reference_fasta) + ch_ref_dict = PICARD_CREATESEQUENCEDICTIONARY.out.reference_dict + } + } + + emit: + bwamem2_index = ch_bwamem2_index + reference_fai = ch_reference_fai + reference_dict = ch_ref_dict +} diff --git a/subworkflows/local/prepare_genome/tests/main.nf.test b/subworkflows/local/prepare_genome/tests/main.nf.test new file mode 100644 index 00000000..21fd5f50 --- /dev/null +++ b/subworkflows/local/prepare_genome/tests/main.nf.test @@ -0,0 +1,110 @@ +nextflow_workflow { + + name "Test Workflow PREPARE_GENOME" + script "subworkflows/local/prepare_genome/main.nf" + workflow "PREPARE_GENOME" + tag 'subworkflows' + tag 'prepare_genome' + + test("Test without bwamem2 index file path and with run_picard_collecthsmetrics=false") { + when { + params { + run_picard_collecthsmetrics = false + } + + workflow { + """ + input[0] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.fasta', checkIfExists: true)).collect() + input[1] = null + input[2] = '' + input[3] = false + input[4] = null + """ + } + } + + then { + assert workflow.success + assert snapshot(sanitizeOutput(workflow.out).collectEntries { key, val -> + if (!val) { + return null + } + else if (key == "bwamem2_index") { + return [key, val.collect { [path(it[1]).list().collect { it }] }] + } + else if (key == "reference_dict") { + return [key, val.collect { file(it[1]).name }] + } + return [key, val.collect { path(it[1]) }] + }).match() + } + } + + test("Test without bwamem2 index file path, with run_picard_collecthsmetrics=true and with ref_dict") { + when { + params { + run_picard_collecthsmetrics = true + } + + workflow { + """ + input[0] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.fasta', checkIfExists: true)).collect() + input[1] = null + input[2] = '' + input[3] = true + input[4] = params.pipelines_testdata_base_path + '/raredisease/reference/reference.dict' + """ + } + } + + then { + assert workflow.success + assert snapshot(sanitizeOutput(workflow.out).collectEntries { key, val -> + if (!val) { + return null + } + else if (key == "bwamem2_index") { + return [key, val.collect { [path(it[1]).list().collect { it }] }] + } + else if (key == "reference_dict") { + return [key, val.collect { file(it[1]).name }] + } + return [key, val.collect { path(it[1]) }] + }).match() + } + } + + test("Test without bwamem2 index file path, with run_picard_collecthsmetrics=true and without ref_dict") { + when { + params { + run_picard_collecthsmetrics = true + } + + workflow { + """ + input[0] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.fasta', checkIfExists: true)).collect() + input[1] = null + input[2] = '' + input[3] = true + input[4] = null + """ + } + } + + then { + assert workflow.success + assert snapshot(sanitizeOutput(workflow.out).collectEntries { key, val -> + if (!val) { + return null + } + else if (key == "bwamem2_index") { + return [key, val.collect { [path(it[1]).list().collect { it }] }] + } + else if (key == "reference_dict") { + return [key, val.collect { file(it[1]).name }] + } + return [key, val.collect { path(it[1]) }] + }).match() + } + } +} diff --git a/subworkflows/local/prepare_genome/tests/main.nf.test.snap b/subworkflows/local/prepare_genome/tests/main.nf.test.snap new file mode 100644 index 00000000..4bb1683e --- /dev/null +++ b/subworkflows/local/prepare_genome/tests/main.nf.test.snap @@ -0,0 +1,83 @@ +{ + "Test without bwamem2 index file path, with run_picard_collecthsmetrics=true and without ref_dict": { + "content": [ + { + "bwamem2_index": [ + [ + [ + "reference.fasta.0123:md5,0f0ff4414949e6787a25a563f19e2a3b", + "reference.fasta.amb:md5,0a85644af00f9a856d874381d24e7803", + "reference.fasta.ann:md5,8fdb46970ca95a4ef54f5f1a02d233cd", + "reference.fasta.bwt.2bit.64:md5,3c0df9450afc5cb0ad5e85870829d9d0", + "reference.fasta.pac:md5,96b449e1316067fdfba91b1399687bc2" + ] + ] + ], + "reference_dict": [ + "genome.dict" + ], + "reference_fai": [ + "reference.fasta.fai:md5,bf4047e05f95deb372eb8ffd601cbc29" + ] + } + ], + "timestamp": "2026-02-20T14:08:10.135732184", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "Test without bwamem2 index file path, with run_picard_collecthsmetrics=true and with ref_dict": { + "content": [ + { + "bwamem2_index": [ + [ + [ + "reference.fasta.0123:md5,0f0ff4414949e6787a25a563f19e2a3b", + "reference.fasta.amb:md5,0a85644af00f9a856d874381d24e7803", + "reference.fasta.ann:md5,8fdb46970ca95a4ef54f5f1a02d233cd", + "reference.fasta.bwt.2bit.64:md5,3c0df9450afc5cb0ad5e85870829d9d0", + "reference.fasta.pac:md5,96b449e1316067fdfba91b1399687bc2" + ] + ] + ], + "reference_dict": [ + "reference.dict" + ], + "reference_fai": [ + "reference.fasta.fai:md5,bf4047e05f95deb372eb8ffd601cbc29" + ] + } + ], + "timestamp": "2026-02-20T14:07:30.247480534", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "Test without bwamem2 index file path and with run_picard_collecthsmetrics=false": { + "content": [ + { + "bwamem2_index": [ + [ + [ + "reference.fasta.0123:md5,0f0ff4414949e6787a25a563f19e2a3b", + "reference.fasta.amb:md5,0a85644af00f9a856d874381d24e7803", + "reference.fasta.ann:md5,8fdb46970ca95a4ef54f5f1a02d233cd", + "reference.fasta.bwt.2bit.64:md5,3c0df9450afc5cb0ad5e85870829d9d0", + "reference.fasta.pac:md5,96b449e1316067fdfba91b1399687bc2" + ] + ] + ], + "reference_fai": [ + "reference.fasta.fai:md5,bf4047e05f95deb372eb8ffd601cbc29" + ] + } + ], + "timestamp": "2026-02-19T12:11:58.258098906", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/subworkflows/local/qc_bam/main.nf b/subworkflows/local/qc_bam/main.nf new file mode 100644 index 00000000..68a4d9d9 --- /dev/null +++ b/subworkflows/local/qc_bam/main.nf @@ -0,0 +1,53 @@ +// +// A quality check subworkflow for processed bam files. +// + +include { PICARD_COLLECTHSMETRICS } from '../../../modules/nf-core/picard/collecthsmetrics' +include { PICARD_COLLECTMULTIPLEMETRICS } from '../../../modules/nf-core/picard/collectmultiplemetrics' + +workflow QC_BAM { + take: + ch_bam // channel: [mandatory] [ val(meta), path(bam)] + ch_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_reference_fasta // channel: [mandatory] [ val(meta), path(reference_fasta) ] + ch_reference_fai // channel: [mandatory] [ val(meta), path(reference_fai) ] + run_picard_collecthsmetrics // string: [mandatory for picard_collecthsmetrics] bool + ch_bait_intervals // channel: [mandatory for picard_collecthsmetrics] [ val(meta), path(bait_intervals) ] + ch_target_intervals // channel: [mandatory for picard_collecthsmetrics] [ val(meta), path(target_intervals) ] + ch_ref_dict // channel: [mandatory for picard_collecthsmetrics] [ val(meta), path(ref_dict) ] + + main: + ch_multiple_metrics = channel.empty() + ch_hs_metrics = channel.empty() + + ch_bam_bai = ch_bam.join(ch_bai, failOnDuplicate: true, failOnMismatch: true) + + PICARD_COLLECTMULTIPLEMETRICS( + ch_bam_bai, + ch_reference_fasta, + ch_reference_fai, + ) + + ch_multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics + + if (run_picard_collecthsmetrics) { + + ch_hsmetrics_in = ch_bam_bai + .combine(ch_bait_intervals) + .combine(ch_target_intervals) + + PICARD_COLLECTHSMETRICS( + ch_hsmetrics_in, + ch_reference_fasta, + ch_reference_fai, + ch_ref_dict, + [[], []], + ) + + ch_hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics + } + + emit: + multiple_metrics = ch_multiple_metrics + hs_metrics = ch_hs_metrics +} diff --git a/subworkflows/local/qc_bam/tests/main.nf.test b/subworkflows/local/qc_bam/tests/main.nf.test new file mode 100644 index 00000000..017dfa25 --- /dev/null +++ b/subworkflows/local/qc_bam/tests/main.nf.test @@ -0,0 +1,103 @@ +nextflow_workflow { + + name "Test Workflow QC_BAM" + script "subworkflows/local/qc_bam/main.nf" + workflow "QC_BAM" + tag 'subworkflows' + tag 'qc_bam' + + test("Test with run_picard_collecthsmetrics=false") { + + when { + config "./nextflow.config" + + workflow { + """ + input[0] = channel.of( + [ + [id:'earlycasualcaiman', sample:'earlycasualcaiman', single_end:false, num_lanes:1, read_group: "'@RG\\\\tID:earlycasualcaiman\\\\tPL:illumina\\\\tSM:earlycasualcaiman'", lane:1, sex:1, phenotype:1, paternal:0, maternal:0, case_id:'justhusky'], + [file(params.pipelines_testdata_base_path + '/raredisease/testdata/earlycasualcaiman_sorted_md.bam', checkIfExists: true)] + ] + ) + input[1] = channel.of( + [ + [id:'earlycasualcaiman', sample:'earlycasualcaiman', single_end:false, num_lanes:1, read_group: "'@RG\\\\tID:earlycasualcaiman\\\\tPL:illumina\\\\tSM:earlycasualcaiman'", lane:1, sex:1, phenotype:1, paternal:0, maternal:0, case_id:'justhusky'], + [file(params.pipelines_testdata_base_path + '/raredisease/testdata/earlycasualcaiman_sorted_md.bam.bai', checkIfExists: true)] + ] + ) + input[2] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.fasta', checkIfExists: true)).collect() + input[3] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.fasta.fai', checkIfExists: true)).collect() + input[4] = false + input[5] = null + input[6] = null + input[7] = null + """ + } + } + + then { + assert workflow.success + assert snapshot(sanitizeOutput(workflow.out).collectEntries { key, val -> + if (!val) { + return null + } + else if (key == "hs_metrics") { + return [key, val.collect { file(it[1].toString()).name }] + } + else if (key == "multiple_metrics") { + println val[0][1] + return [key, val.collect { it[1].collect{ file(it.toString()).name } } ] + } + return [key, val] + }).match() + } + + } + + test("Test with run_picard_collecthsmetrics=true") { + + when { + config "./nextflow.config" + + workflow { + """ + input[0] = channel.of( + [ + [id:'earlycasualcaiman', sample:'earlycasualcaiman', single_end:false, num_lanes:1, read_group: "'@RG\\\\tID:earlycasualcaiman\\\\tPL:illumina\\\\tSM:earlycasualcaiman'", lane:1, sex:1, phenotype:1, paternal:0, maternal:0, case_id:'justhusky'], + [file(params.pipelines_testdata_base_path + '/raredisease/testdata/earlycasualcaiman_sorted_md.bam', checkIfExists: true)] + ] + ) + input[1] = channel.of( + [ + [id:'earlycasualcaiman', sample:'earlycasualcaiman', single_end:false, num_lanes:1, read_group: "'@RG\\\\tID:earlycasualcaiman\\\\tPL:illumina\\\\tSM:earlycasualcaiman'", lane:1, sex:1, phenotype:1, paternal:0, maternal:0, case_id:'justhusky'], + [file(params.pipelines_testdata_base_path + '/raredisease/testdata/earlycasualcaiman_sorted_md.bam.bai', checkIfExists: true)] + ] + ) + input[2] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.fasta', checkIfExists: true)).collect() + input[3] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.fasta.fai', checkIfExists: true)).collect() + input[4] = true + input[5] = channel.fromPath(params.pipelines_testdata_base_path + '/raredisease/reference/target.bed', checkIfExists: true).collect() + input[6] = channel.fromPath(params.pipelines_testdata_base_path + '/raredisease/reference/target.bed', checkIfExists: true).collect() + input[7] = channel.of([id:'genome'], file(params.pipelines_testdata_base_path + '/raredisease/reference/reference.dict', checkIfExists: true)).collect() + """ + } + } + + then { + assert workflow.success + assert snapshot(sanitizeOutput(workflow.out).collectEntries { key, val -> + if (!val) { + return null + } + else if (key == "hs_metrics") { + return [key, val.collect { file(it[1].toString()).name }] + } + else if (key == "multiple_metrics") { + println val[0][1] + return [key, val.collect { it[1].collect{ file(it.toString()).name } } ] + } + return [key, val] + }).match() + } + } +} diff --git a/subworkflows/local/qc_bam/tests/main.nf.test.snap b/subworkflows/local/qc_bam/tests/main.nf.test.snap new file mode 100644 index 00000000..e8bf25f2 --- /dev/null +++ b/subworkflows/local/qc_bam/tests/main.nf.test.snap @@ -0,0 +1,45 @@ +{ + "Test with run_picard_collecthsmetrics=false": { + "content": [ + { + "multiple_metrics": [ + [ + "earlycasualcaiman.CollectMultipleMetrics.alignment_summary_metrics", + "earlycasualcaiman.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "earlycasualcaiman.CollectMultipleMetrics.insert_size_metrics", + "earlycasualcaiman.CollectMultipleMetrics.quality_by_cycle_metrics", + "earlycasualcaiman.CollectMultipleMetrics.quality_distribution_metrics" + ] + ] + } + ], + "timestamp": "2026-02-19T12:13:55.371999049", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "Test with run_picard_collecthsmetrics=true": { + "content": [ + { + "hs_metrics": [ + "earlycasualcaiman.CollectHsMetrics.coverage_metrics" + ], + "multiple_metrics": [ + [ + "earlycasualcaiman.CollectMultipleMetrics.alignment_summary_metrics", + "earlycasualcaiman.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "earlycasualcaiman.CollectMultipleMetrics.insert_size_metrics", + "earlycasualcaiman.CollectMultipleMetrics.quality_by_cycle_metrics", + "earlycasualcaiman.CollectMultipleMetrics.quality_distribution_metrics" + ] + ] + } + ], + "timestamp": "2026-02-19T12:15:28.332477673", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/subworkflows/local/qc_bam/tests/nextflow.config b/subworkflows/local/qc_bam/tests/nextflow.config new file mode 100644 index 00000000..1954ffe6 --- /dev/null +++ b/subworkflows/local/qc_bam/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + withName: PICARD_COLLECTHSMETRICS { + ext.args = { [ + "--COVERAGE_CAP 50000", + "--METRIC_ACCUMULATION_LEVEL ALL_READS", + "--TMP_DIR ." + ].join(' ') } + } +} diff --git a/subworkflows/local/utils_nfcore_seqinspector_pipeline/main.nf b/subworkflows/local/utils_nfcore_seqinspector_pipeline/main.nf index cdbb6400..148a3959 100644 --- a/subworkflows/local/utils_nfcore_seqinspector_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_seqinspector_pipeline/main.nf @@ -8,156 +8,208 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { fromSamplesheet } from 'plugin/nf-validation' -include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' -include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' -include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' -include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' -include { imNotification } from '../../nf-core/utils_nfcore_pipeline' -include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' -include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' +include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' +include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' +include { imNotification } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW TO INITIALISE PIPELINE -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_INITIALISATION { - take: - version // boolean: Display version and exit - help // boolean: Display help text - validate_params // boolean: Boolean whether to validate parameters against the schema at runtime - monochrome_logs // boolean: Do not use coloured log outputs + version // boolean: Display version and exit + validate_params // boolean: Boolean whether to validate parameters against the schema at runtime + _monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args - outdir // string: The output directory where the results will be saved - input // string: Path to input samplesheet + outdir // string: The output directory where the results will be saved + input // string: Path to input samplesheet + help // boolean: Display help message and exit + help_full // boolean: Show the full help message + show_hidden // boolean: Show hidden parameters in the help message main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // Print version and exit if required and dump pipeline parameters to JSON file // - UTILS_NEXTFLOW_PIPELINE ( + UTILS_NEXTFLOW_PIPELINE( version, true, outdir, - workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 + workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1, ) // // Validate parameters and generate parameter summary to stdout // - pre_help_text = nfCoreLogo(monochrome_logs) - post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) - def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " - UTILS_NFVALIDATION_PLUGIN ( // Validates parameters against $projectDir/nextflow_schema.json - help, - workflow_command, - pre_help_text, - post_help_text, + before_text = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m nf-core/seqinspector ${workflow.manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { doi -> " https://doi.org/${doi.trim().replace('https://doi.org/', '')}" }.join("\n")}${workflow.manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x + +* Software dependencies + https://github.com/nf-core/seqinspector/blob/master/CITATIONS.md +""" + command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " + + UTILS_NFSCHEMA_PLUGIN( + workflow, validate_params, - "nextflow_schema.json" + null, + help, + help_full, + show_hidden, + before_text, + after_text, + command, ) // // Check config provided to the pipeline // - UTILS_NFCORE_PIPELINE ( + UTILS_NFCORE_PIPELINE( nextflow_cli_args ) + // // Custom validation for pipeline parameters // - validateInputParameters() // Runs additional validation that is not done by $projectDir/nextflow_schema.json + validateInputParameters() + // Runs additional validation that is not done by $projectDir/nextflow_schema.json // - // Create channel from input file provided through params.input + // Create channel from input file provided through params input // - Channel - .fromSamplesheet("input") // Validates samplesheet against $projectDir/assets/schema_input.json. Path to validation schema is defined by $projectDir/nextflow_schema.json - .map { - meta, fastq_1, fastq_2 -> - def id_string = "${meta.sample}_${meta.project ?: "ungrouped"}_${meta.lane}" - def updated_meta = meta + [ id: id_string ] - if (!fastq_2) { - return [ updated_meta.id, updated_meta + [ single_end:true ], [ fastq_1 ] ] - } else { - return [ updated_meta.id, updated_meta + [ single_end:false ], [ fastq_1, fastq_2 ] ] - } + nr_samples = channel.fromList(samplesheetToList(input, "${projectDir}/assets/schema_input.json")) + .toList() + .size() + + channel.fromList(samplesheetToList(input, "${projectDir}/assets/schema_input.json")) + .toList() + .flatMap { item -> item.withIndex().collect { entry, idx -> entry + "${idx + 1}" } } + .map { meta, fastq_1, fastq_2, idx -> + def tags = meta.tags ? meta.tags.tokenize(":") : [] + def pad_positions = [nr_samples.length(), 2].max() + def zero_padded_idx = idx.padLeft(pad_positions, "0") + def updated_meta = meta + [id: "${meta.sample}_${zero_padded_idx}", tags: tags] + if (!fastq_2) { + return [ + updated_meta.id, + updated_meta + [single_end: true], + [fastq_1], + ] + } + else { + return [ + updated_meta.id, + updated_meta + [single_end: false], + [fastq_1, fastq_2], + ] + } } .groupTuple() - .map { - validateInputSamplesheet(it) // Applies additional group validation checks that schema_input.json cannot do. + .map { meta -> + validateInputSamplesheet(meta) } - .transpose() // Replace the map below - // .map { - // meta, fastqs -> - // return [ meta, fastqs.flatten() ] - // } - .view() + .transpose() .set { ch_samplesheet } + ch_samplesheet + .map { meta, _fastqs -> + meta.tags + } + .flatten() + .unique() + .map { tag_name -> [tag_name.toLowerCase(), tag_name] } + .groupTuple() + .map { _tag_lowercase, tags -> + if (tags.size() == 1) { + log.warn("Tag name collision: " + tags) + } + } + emit: samplesheet = ch_samplesheet versions = ch_versions } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW FOR PIPELINE COMPLETION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_COMPLETION { - take: - email // string: email address - email_on_fail // string: email address sent on pipeline failure + email // string: email address + email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML - outdir // path: Path to output directory where results will be published + outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output - hook_url // string: hook URL for notifications - multiqc_report // string: Path to MultiQC report + hook_url // string: hook URL for notifications + multiqc_report // string: Path to MultiQC report main: - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + def multiqc_reports = multiqc_report.toList() // // Completion email and summary // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_reports.getVal(), + ) } completionSummary(monochrome_logs) - if (hook_url) { imNotification(summary_params, hook_url) } } + + workflow.onError { + log.error("Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting") + } } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Check and validate pipeline parameters // def validateInputParameters() { - // genomeExistsError() - - // TODO: Add code to further validate pipeline parameters here + genomeExistsError() } // @@ -167,23 +219,12 @@ def validateInputSamplesheet(input) { def (metas, fastqs) = input[1..2] // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end - def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 + def endedness_ok = metas.collect { meta -> meta.single_end }.unique().size == 1 if (!endedness_ok) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } - return [ metas[0], fastqs ] -} -// -// Get attribute from genome config file e.g. fasta -// -def getGenomeAttribute(attribute) { - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - return params.genomes[ params.genome ][ attribute ] - } - } - return null + return [metas[0], fastqs] } // @@ -191,67 +232,107 @@ def getGenomeAttribute(attribute) { // def genomeExistsError() { if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + - " Currently, the available genome keys are:\n" + - " ${params.genomes.keySet().join(", ")}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + " Currently, the available genome keys are:\n" + " ${params.genomes.keySet().join(", ")}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" error(error_string) } } - // // Generate methods description for MultiQC // def toolCitationText() { - // TODO nf-core: Optionally add in-text citation tools to this list. - // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", - // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ - "Tools used in the workflow included:", - "FastQC (Andrews 2010),", - "MultiQC (Ewels et al. 2016)", - "." - ].join(' ').trim() + "Tools used in the workflow included:", + "BWAMEM2 (Vasimuddin et al. 2019)", + "FastQC (Andrews 2010),", + "FastQ Screen (Wingett & Andrews 2018)", + "MultiQC (Ewels et al. 2016),", + "Picard Tool (Broad Institute 2019),", + "SAMTOOLS (Danecek et al. 2021),", + params.sample_size > 0 ? "Seqtk (Li 2021)," : "", + "SeqFu (Telatin et al. 2021),", + ".", + ].join(' ').trim() return citation_text } def toolBibliographyText() { - // TODO nf-core: Optionally add bibliographic entries to this list. - // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", - // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ - "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", - "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " - ].join(' ').trim() + "
  • Vasimuddin Md., Misra S., Li H, & Aluru S. (2019). Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems.
  • ", + "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/.
  • ", + "
  • Wingett SW., & Andrews S. FastQ Screen: A tool for multi-genome mapping and quality control. F1000Res. 2018 Aug 24 [revised 2018 Jan 1];7:1338. doi: 10.12688/f1000research.15931.2. eCollection
  • ", + "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics, 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • ", + "
  • Broad Institute, (2019) Picard Tools, URL: https://broadinstitute.github.io/picard/.
  • ", + "
  • Danecek P., Bonfield JK., Liddle J., & al. (2021). Twelve years of SAMtools and BCFtools.
  • ", + params.sample_size > 0 ? "
  • Li, H. SeqTk. Available online: https://github.com/lh3/seqtk (accessed on 6 May 2021)
  • " : "", + "
  • Telatin, A.; Fariselli, P.; Birolo, G. SeqFu: A Suite of Utilities for the Robust and Reproducible Manipulation of Sequence Files. Bioengineering 2021, 8, 59. https://doi.org/10.3390/bioengineering8050059
  • ", + ].join(' ').trim() return reference_text } def methodsDescriptionText(mqc_methods_yaml) { - // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file + // Convert to a named map so can be used as with familiar NXF ${workflow} variable syntax in the MultiQC YML file def meta = [:] meta.workflow = workflow.toMap() meta["manifest_map"] = workflow.manifest.toMap() // Pipeline DOI - meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : "" - meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " + if (meta.manifest_map.doi) { + // Using a loop to handle multiple DOIs + // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers + // Removing ` ` since the manifest.doi is a string and not a proper list + def temp_doi_ref = "" + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } + meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) + } + else { + meta["doi_text"] = "" + } + meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " // Tool references - meta["tool_citations"] = "" - meta["tool_bibliography"] = "" - - // TODO nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! - // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") - // meta["tool_bibliography"] = toolBibliographyText() - + meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + meta["tool_bibliography"] = toolBibliographyText() def methods_text = mqc_methods_yaml.text - def engine = new groovy.text.SimpleTemplateEngine() + def engine = new groovy.text.SimpleTemplateEngine() def description_html = engine.createTemplate(methods_text).make(meta) return description_html.toString() } + +// +// Generate report index for MultiQC +// +def reportIndexMultiqc(tags, global = true) { + def relative_path = global ? ".." : "../.." + + def a_attrs = "target=\"_blank\" class=\"list-group-item list-group-item-action\"" + + // Global report path + def index_section = " Global report\n" + + // Group report paths + tags.each { tag -> + index_section += " Group report: ${tag}\n" + } + + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-index'\n" as String + yaml_file_text += "description: 'MultiQC reports collected from running the pipeline.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} MultiQC Reports Index'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "

    Reports

    \n" + yaml_file_text += "

    Select a report to view (open in a new tab):

    \n" + yaml_file_text += "
    \n" + yaml_file_text += "${index_section}" + yaml_file_text += "
    \n" + + return yaml_file_text +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index ac31f28f..d6e593e8 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -2,18 +2,13 @@ // Subworkflow with functionality that may be useful for any Nextflow pipeline // -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { - take: print_version // boolean: print version dump_parameters // boolean: dump parameters @@ -26,7 +21,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Print workflow version and exit on --version // if (print_version) { - log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") System.exit(0) } @@ -49,16 +44,16 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Generate version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -76,13 +71,13 @@ def getWorkflowVersion() { // Dump pipeline parameters to a JSON file // def dumpParametersToJSON(outdir) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) - FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() } @@ -90,37 +85,42 @@ def dumpParametersToJSON(outdir) { // When running with -profile conda, warn if channels have not been set-up appropriately // def checkCondaChannels() { - Yaml parser = new Yaml() + def parser = new org.yaml.snakeyaml.Yaml() def channels = [] try { def config = parser.load("conda config --show channels".execute().text) channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return + } + catch (NullPointerException e) { + log.debug(e) + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.debug(e) + log.warn("Could not verify conda channel configuration.") + return null } // Check that all channels are present // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def required_channels_in_order = ['conda-forge', 'bioconda'] def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order - def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) - } + def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order } if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + log.warn """\ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + There is a problem with your Conda configuration! + You will need to set-up the conda-forge and bioconda channels correctly. + Please refer to https://bioconda.github.io/ + The observed channel order is + ${channels} + but the following channel order is required: + ${required_channels_in_order} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + """.stripIndent(true) } } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test deleted file mode 100644 index 68718e4f..00000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test +++ /dev/null @@ -1,54 +0,0 @@ - -nextflow_function { - - name "Test Functions" - script "subworkflows/nf-core/utils_nextflow_pipeline/main.nf" - config "subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config" - tag 'subworkflows' - tag 'utils_nextflow_pipeline' - tag 'subworkflows/utils_nextflow_pipeline' - - test("Test Function getWorkflowVersion") { - - function "getWorkflowVersion" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function dumpParametersToJSON") { - - function "dumpParametersToJSON" - - when { - function { - """ - // define inputs of the function here. Example: - input[0] = "$outputDir" - """.stripIndent() - } - } - - then { - assertAll( - { assert function.success } - ) - } - } - - test("Test Function checkCondaChannels") { - - function "checkCondaChannels" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } -} 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 deleted file mode 100644 index e3f0baf4..00000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Test Function getWorkflowVersion": { - "content": [ - "v9.9.9" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:02:05.308243" - }, - "Test Function checkCondaChannels": { - "content": null, - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:02:12.425833" - } -} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test deleted file mode 100644 index ca964ce8..00000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ /dev/null @@ -1,111 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NEXTFLOW_PIPELINE" - script "../main.nf" - config "subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config" - workflow "UTILS_NEXTFLOW_PIPELINE" - tag 'subworkflows' - tag 'utils_nextflow_pipeline' - tag 'subworkflows/utils_nextflow_pipeline' - - test("Should run no inputs") { - - when { - workflow { - """ - print_version = false - dump_parameters = false - outdir = null - check_conda_channels = false - - input[0] = print_version - input[1] = dump_parameters - input[2] = outdir - input[3] = check_conda_channels - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should print version") { - - when { - workflow { - """ - print_version = true - dump_parameters = false - outdir = null - check_conda_channels = false - - input[0] = print_version - input[1] = dump_parameters - input[2] = outdir - input[3] = check_conda_channels - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) - } - } - - test("Should dump params") { - - when { - workflow { - """ - print_version = false - dump_parameters = true - outdir = 'results' - check_conda_channels = false - - input[0] = false - input[1] = true - input[2] = outdir - input[3] = false - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should not create params JSON if no output directory") { - - when { - workflow { - """ - print_version = false - dump_parameters = true - outdir = null - check_conda_channels = false - - input[0] = false - input[1] = true - input[2] = outdir - input[3] = false - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config deleted file mode 100644 index d0a926bf..00000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +++ /dev/null @@ -1,9 +0,0 @@ -manifest { - name = 'nextflow_workflow' - author = """nf-core""" - homePage = 'https://127.0.0.1' - description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' - version = '9.9.9' - doi = 'https://doi.org/10.5281/zenodo.5070524' -} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml deleted file mode 100644 index f8476112..00000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nextflow_pipeline: - - subworkflows/nf-core/utils_nextflow_pipeline/** diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index a8b55d6f..2f30e9a4 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -2,17 +2,13 @@ // Subworkflow with utility functions specific to the nf-core pipeline template // -import org.yaml.snakeyaml.Yaml -import nextflow.extension.FilesEx - /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { - take: nextflow_cli_args @@ -25,23 +21,20 @@ workflow UTILS_NFCORE_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Warn if a -profile or Nextflow config has not been provided to run the pipeline // def checkConfigProvided() { - valid_config = true + def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) valid_config = false } return valid_config @@ -52,33 +45,22 @@ def checkConfigProvided() { // def checkProfileProvided(nextflow_cli_args) { if (workflow.profile.endsWith(',')) { - error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } if (nextflow_cli_args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } } -// -// Citation string for pipeline -// -def workflowCitation() { - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - " ${workflow.manifest.doi}\n\n" + - "* The nf-core framework\n" + - " https://doi.org/10.1038/s41587-020-0439-x\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" -} - // // Generate workflow version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -96,8 +78,8 @@ def getWorkflowVersion() { // Get software versions for pipeline // def processVersionsFromYAML(yaml_file) { - Yaml yaml = new Yaml() - versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } return yaml.dumpAsMap(versions).trim() } @@ -107,8 +89,8 @@ def processVersionsFromYAML(yaml_file) { def workflowVersionToYAML() { return """ Workflow: - $workflow.manifest.name: ${getWorkflowVersion()} - Nextflow: $workflow.nextflow.version + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} """.stripIndent().trim() } @@ -116,11 +98,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions - .unique() - .map { processVersionsFromYAML(it) } - .unique() - .mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML())) } // @@ -128,61 +106,40 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - for (group in summary_params.keySet()) { - def group_params = summary_params.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

    $group

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

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" } - summary_section += "
    \n" } - } - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" return yaml_file_text } -// -// nf-core logo -// -def nfCoreLogo(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) - String.format( - """\n - ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) -} - -// -// Return dashed line -// -def dashedLine(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) - return "-${colors.dim}----------------------------------------------------${colors.reset}-" -} - // // ANSII colours used for terminal logging // def logColours(monochrome_logs=true) { - Map colorcodes = [:] + def colorcodes = [:] as Map // Reset / Meta colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" @@ -194,79 +151,76 @@ def logColours(monochrome_logs=true) { colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" return colorcodes } -// -// Attach the multiqc report to email -// -def attachMultiqcReport(multiqc_report) { - def mqc_report = null - try { - if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" - } - mqc_report = mqc_report[0] - } - } - } catch (all) { - if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" +// Return a single report from an object that may be a Path or List +// +def getSingleReport(multiqc_reports) { + if (multiqc_reports instanceof Path) { + return multiqc_reports + } else if (multiqc_reports instanceof List) { + if (multiqc_reports.size() == 0) { + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") + return null + } else if (multiqc_reports.size() == 1) { + return multiqc_reports.first() + } else { + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") + return multiqc_reports.first() } + } else { + return null } - return mqc_report } // @@ -275,26 +229,35 @@ def attachMultiqcReport(multiqc_report) { def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" } def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete misc_fields['Pipeline script file path'] = workflow.scriptFile misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] @@ -311,7 +274,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi email_fields['summary'] = summary << misc_fields // On success try attach the multiqc report - def mqc_report = attachMultiqcReport(multiqc_report) + def mqc_report = getSingleReport(multiqc_report) // Check if we are only sending emails on failure def email_address = email @@ -331,40 +294,45 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit + def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { + new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') + } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { + ['sendmail', '-t'].execute() << sendmail_html + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") + } + catch (Exception msg) { + log.debug(msg.toString()) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") } } // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") output_tf.delete() } @@ -372,15 +340,17 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Print pipeline summary on completion // def completionSummary(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") + } + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } @@ -389,21 +359,30 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp + misc_fields['start'] = workflow.start + misc_fields['complete'] = workflow.complete + misc_fields['scriptfile'] = workflow.scriptFile + misc_fields['scriptid'] = workflow.scriptId + if (workflow.repository) { + misc_fields['repository'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['commitid'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['revision'] = workflow.revision + } + misc_fields['nxf_version'] = workflow.nextflow.version + misc_fields['nxf_build'] = workflow.nextflow.build + misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] msg_fields['version'] = getWorkflowVersion() @@ -428,13 +407,13 @@ def imNotification(summary_params, hook_url) { def json_message = json_template.toString() // POST - def post = new URL(hook_url).openConnection(); + def post = new URL(hook_url).openConnection() post.setRequestMethod("POST") post.setDoOutput(true) post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); + post.getOutputStream().write(json_message.getBytes("UTF-8")) + def postRC = post.getResponseCode() + if (!postRC.equals(200)) { + log.warn(post.getErrorStream().getText()) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test deleted file mode 100644 index 1dc317f8..00000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ /dev/null @@ -1,134 +0,0 @@ - -nextflow_function { - - name "Test Functions" - script "../main.nf" - config "subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "utils_nfcore_pipeline" - tag "subworkflows/utils_nfcore_pipeline" - - test("Test Function checkConfigProvided") { - - function "checkConfigProvided" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function checkProfileProvided") { - - function "checkProfileProvided" - - when { - function { - """ - input[0] = [] - """ - } - } - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function workflowCitation") { - - function "workflowCitation" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function nfCoreLogo") { - - function "nfCoreLogo" - - when { - function { - """ - input[0] = false - """ - } - } - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function dashedLine") { - - function "dashedLine" - - when { - function { - """ - input[0] = false - """ - } - } - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function without logColours") { - - function "logColours" - - when { - function { - """ - input[0] = true - """ - } - } - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function with logColours") { - function "logColours" - - when { - function { - """ - input[0] = false - """ - } - } - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap deleted file mode 100644 index 1037232c..00000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +++ /dev/null @@ -1,166 +0,0 @@ -{ - "Test Function checkProfileProvided": { - "content": null, - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:03.360873" - }, - "Test Function checkConfigProvided": { - "content": [ - true - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:02:59.729647" - }, - "Test Function nfCoreLogo": { - "content": [ - "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:10.562934" - }, - "Test Function workflowCitation": { - "content": [ - "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:07.019761" - }, - "Test Function without logColours": { - "content": [ - { - "reset": "", - "bold": "", - "dim": "", - "underlined": "", - "blink": "", - "reverse": "", - "hidden": "", - "black": "", - "red": "", - "green": "", - "yellow": "", - "blue": "", - "purple": "", - "cyan": "", - "white": "", - "bblack": "", - "bred": "", - "bgreen": "", - "byellow": "", - "bblue": "", - "bpurple": "", - "bcyan": "", - "bwhite": "", - "ublack": "", - "ured": "", - "ugreen": "", - "uyellow": "", - "ublue": "", - "upurple": "", - "ucyan": "", - "uwhite": "", - "iblack": "", - "ired": "", - "igreen": "", - "iyellow": "", - "iblue": "", - "ipurple": "", - "icyan": "", - "iwhite": "", - "biblack": "", - "bired": "", - "bigreen": "", - "biyellow": "", - "biblue": "", - "bipurple": "", - "bicyan": "", - "biwhite": "" - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:17.969323" - }, - "Test Function dashedLine": { - "content": [ - "-\u001b[2m----------------------------------------------------\u001b[0m-" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:14.366181" - }, - "Test Function with logColours": { - "content": [ - { - "reset": "\u001b[0m", - "bold": "\u001b[1m", - "dim": "\u001b[2m", - "underlined": "\u001b[4m", - "blink": "\u001b[5m", - "reverse": "\u001b[7m", - "hidden": "\u001b[8m", - "black": "\u001b[0;30m", - "red": "\u001b[0;31m", - "green": "\u001b[0;32m", - "yellow": "\u001b[0;33m", - "blue": "\u001b[0;34m", - "purple": "\u001b[0;35m", - "cyan": "\u001b[0;36m", - "white": "\u001b[0;37m", - "bblack": "\u001b[1;30m", - "bred": "\u001b[1;31m", - "bgreen": "\u001b[1;32m", - "byellow": "\u001b[1;33m", - "bblue": "\u001b[1;34m", - "bpurple": "\u001b[1;35m", - "bcyan": "\u001b[1;36m", - "bwhite": "\u001b[1;37m", - "ublack": "\u001b[4;30m", - "ured": "\u001b[4;31m", - "ugreen": "\u001b[4;32m", - "uyellow": "\u001b[4;33m", - "ublue": "\u001b[4;34m", - "upurple": "\u001b[4;35m", - "ucyan": "\u001b[4;36m", - "uwhite": "\u001b[4;37m", - "iblack": "\u001b[0;90m", - "ired": "\u001b[0;91m", - "igreen": "\u001b[0;92m", - "iyellow": "\u001b[0;93m", - "iblue": "\u001b[0;94m", - "ipurple": "\u001b[0;95m", - "icyan": "\u001b[0;96m", - "iwhite": "\u001b[0;97m", - "biblack": "\u001b[1;90m", - "bired": "\u001b[1;91m", - "bigreen": "\u001b[1;92m", - "biyellow": "\u001b[1;93m", - "biblue": "\u001b[1;94m", - "bipurple": "\u001b[1;95m", - "bicyan": "\u001b[1;96m", - "biwhite": "\u001b[1;97m" - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:21.714424" - } -} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test deleted file mode 100644 index 8940d32d..00000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test +++ /dev/null @@ -1,29 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFCORE_PIPELINE" - script "../main.nf" - config "subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config" - workflow "UTILS_NFCORE_PIPELINE" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "utils_nfcore_pipeline" - tag "subworkflows/utils_nfcore_pipeline" - - test("Should run without failures") { - - when { - workflow { - """ - input[0] = [] - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert snapshot(workflow.out).match() } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap deleted file mode 100644 index 859d1030..00000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap +++ /dev/null @@ -1,19 +0,0 @@ -{ - "Should run without failures": { - "content": [ - { - "0": [ - true - ], - "valid_config": [ - true - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:25.726491" - } -} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config deleted file mode 100644 index d0a926bf..00000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config +++ /dev/null @@ -1,9 +0,0 @@ -manifest { - name = 'nextflow_workflow' - author = """nf-core""" - homePage = 'https://127.0.0.1' - description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' - version = '9.9.9' - doi = 'https://doi.org/10.5281/zenodo.5070524' -} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml deleted file mode 100644 index ac8523c9..00000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfcore_pipeline: - - subworkflows/nf-core/utils_nfcore_pipeline/** diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf new file mode 100644 index 00000000..1df8b76f --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,73 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // when this input is empty it will automatically use the configured schema or + // "${projectDir}/nextflow_schema.json" as default. This input should not be empty + // for meta pipelines + help // boolean: show help message + help_full // boolean: show full help message + show_hidden // boolean: show hidden parameters in help message + before_text // string: text to show before the help message and parameters summary + after_text // string: text to show after the help message and parameters summary + command // string: an example command of the pipeline + + main: + + if(help || help_full) { + help_options = [ + beforeText: before_text, + afterText: after_text, + command: command, + showHidden: show_hidden, + fullHelp: help_full, + ] + if(parameters_schema) { + help_options << [parametersSchema: parameters_schema] + } + log.info paramsHelp( + help_options, + (params.help instanceof String && params.help != "true") ? params.help : "", + ) + exit 0 + } + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + + summary_options = [:] + if(parameters_schema) { + summary_options << [parametersSchema: parameters_schema] + } + log.info before_text + log.info paramsSummaryLog(summary_options, input_workflow) + log.info after_text + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + validateOptions = [:] + if(parameters_schema) { + validateOptions << [parametersSchema: parameters_schema] + } + validateParameters(validateOptions) + } + + emit: + dummy_emit = true +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 00000000..f7d9f028 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf deleted file mode 100644 index 2585b65d..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -// -// Subworkflow that uses the nf-validation plugin to render help text and parameter summary -// - -/* -======================================================================================== - IMPORT NF-VALIDATION PLUGIN -======================================================================================== -*/ - -include { paramsHelp } from 'plugin/nf-validation' -include { paramsSummaryLog } from 'plugin/nf-validation' -include { validateParameters } from 'plugin/nf-validation' - -/* -======================================================================================== - SUBWORKFLOW DEFINITION -======================================================================================== -*/ - -workflow UTILS_NFVALIDATION_PLUGIN { - - take: - print_help // boolean: print help - workflow_command // string: default commmand used to run pipeline - pre_help_text // string: string to be printed before help text and summary log - post_help_text // string: string to be printed after help text and summary log - validate_params // boolean: validate parameters - schema_filename // path: JSON schema file, null to use default value - - main: - - log.debug "Using schema file: ${schema_filename}" - - // Default values for strings - pre_help_text = pre_help_text ?: '' - post_help_text = post_help_text ?: '' - workflow_command = workflow_command ?: '' - - // - // Print help message if needed - // - if (print_help) { - log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text - System.exit(0) - } - - // - // Print parameter summary to stdout - // - log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text - - // - // Validate parameters relative to the parameter JSON schema - // - if (validate_params){ - validateParameters(parameters_schema: schema_filename) - } - - emit: - dummy_emit = true -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml deleted file mode 100644 index 3d4a6b04..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "UTILS_NFVALIDATION_PLUGIN" -description: Use nf-validation to initiate and validate a pipeline -keywords: - - utility - - pipeline - - initialise - - validation -components: [] -input: - - print_help: - type: boolean - description: | - Print help message and exit - - workflow_command: - type: string - description: | - The command to run the workflow e.g. "nextflow run main.nf" - - pre_help_text: - type: string - description: | - Text to print before the help message - - post_help_text: - type: string - description: | - Text to print after the help message - - validate_params: - type: boolean - description: | - Validate the parameters and error if invalid. - - schema_filename: - type: string - description: | - The filename of the schema to validate against. -output: - - dummy_emit: - type: boolean - description: | - Dummy emit to make nf-core subworkflows lint happy -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" - - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test deleted file mode 100644 index 5784a33f..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test +++ /dev/null @@ -1,200 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFVALIDATION_PLUGIN" - script "../main.nf" - workflow "UTILS_NFVALIDATION_PLUGIN" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "plugin/nf-validation" - tag "'plugin/nf-validation'" - tag "utils_nfvalidation_plugin" - tag "subworkflows/utils_nfvalidation_plugin" - - test("Should run nothing") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should run help") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with command") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with extra text") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = "pre-help-text" - post_help_text = "post-help-text" - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('pre-help-text') } }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } }, - { assert workflow.stdout.any { it.contains('post-help-text') } } - ) - } - } - - test("Should validate params") { - - when { - - params { - monochrome_logs = true - test_data = '' - outdir = 1 - } - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = true - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.failed }, - { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json deleted file mode 100644 index 7626c1c9..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", - "title": ". pipeline parameters", - "description": "", - "type": "object", - "definitions": { - "input_output_options": { - "title": "Input/output options", - "type": "object", - "fa_icon": "fas fa-terminal", - "description": "Define where the pipeline should find input data and save output data.", - "required": ["outdir"], - "properties": { - "validate_params": { - "type": "boolean", - "description": "Validate parameters?", - "default": true, - "hidden": true - }, - "outdir": { - "type": "string", - "format": "directory-path", - "description": "The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.", - "fa_icon": "fas fa-folder-open" - }, - "test_data_base": { - "type": "string", - "default": "https://raw.githubusercontent.com/nf-core/test-datasets/modules", - "description": "Base for test data directory", - "hidden": true - }, - "test_data": { - "type": "string", - "description": "Fake test data param", - "hidden": true - } - } - }, - "generic_options": { - "title": "Generic options", - "type": "object", - "fa_icon": "fas fa-file-import", - "description": "Less common options for the pipeline, typically set in a config file.", - "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", - "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, - "version": { - "type": "boolean", - "description": "Display version and exit.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, - "logo": { - "type": "boolean", - "default": true, - "description": "Display nf-core logo in console output.", - "fa_icon": "fas fa-image", - "hidden": true - }, - "singularity_pull_docker_container": { - "type": "boolean", - "description": "Pull Singularity container from Docker?", - "hidden": true - }, - "publish_dir_mode": { - "type": "string", - "default": "copy", - "description": "Method used to save pipeline results to output directory.", - "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", - "fa_icon": "fas fa-copy", - "enum": ["symlink", "rellink", "link", "copy", "copyNoFollow", "move"], - "hidden": true - }, - "monochrome_logs": { - "type": "boolean", - "description": "Use monochrome_logs", - "hidden": true - } - } - } - }, - "allOf": [ - { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/generic_options" - } - ] -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml deleted file mode 100644 index 60b1cfff..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfvalidation_plugin: - - subworkflows/nf-core/utils_nfvalidation_plugin/** diff --git a/tests/.nftignore b/tests/.nftignore new file mode 100644 index 00000000..a2ee3634 --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,23 @@ +.DS_Store +bwamem2_mem/*.bam +bwamem2_mem/*.bam.bai +fastqc/*_fastqc.{html,zip} +fastqscreen/*_screen.html +multiqc/{global_report,group_reports/*}/multiqc_data/fastqc_top_overrepresented_sequences_table.txt +multiqc/{global_report,group_reports/*}/multiqc_data/llms-full.txt +multiqc/{global_report,group_reports/*}/multiqc_data/multiqc.log +multiqc/{global_report,group_reports/*}/multiqc_data/multiqc.parquet +multiqc/{global_report,group_reports/*}/multiqc_data/multiqc_data.json +multiqc/{global_report,group_reports/*}/multiqc_data/multiqc_general_stats.txt +multiqc/{global_report,group_reports/*}/multiqc_data/multiqc_software_versions.txt +multiqc/{global_report,group_reports/*}/multiqc_data/multiqc_sources.txt +multiqc/{global_report,group_reports/*}/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} +multiqc/{global_report,group_reports/*}/multiqc_report.html +picard_collectmultiplemetrics/*.pdf +picard_collectmultiplemetrics/*_metrics +picard_collectmultiplemetrics/*_summary_metrics +picard_collectmultiplemetrics/alignment_summary_metrics +picard_collectmultiplemetrics/base_distribution_by_cycle_metrics +picard_collectmultiplemetrics/quality_by_cycle_metrics +picard_collectmultiplemetrics/quality_distribution_metrics +pipeline_info/*.{html,json,txt,yml} diff --git a/tests/MiSeq.nf.test b/tests/MiSeq.nf.test new file mode 100644 index 00000000..0cf8aabe --- /dev/null +++ b/tests/MiSeq.nf.test @@ -0,0 +1,43 @@ +def pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + + def test_scenario = [ + [ + name: "MiSeq data test (single end reads)", + params: [ + input: pipelines_testdata_base_path + 'seqinspector/testdata/MiSeq/samplesheet.csv', + skip_tools: 'rundirparser', + ] + ], + [ + name: "Miseq data test (skip fastqc)", + params: [ + input: pipelines_testdata_base_path + 'seqinspector/testdata/MiSeq/samplesheet.csv', + skip_tools: 'fastqc,rundirparser', + ] + ], + [ + name: "Miseq data test (skip all tools)", + params: [ + input: pipelines_testdata_base_path + 'seqinspector/testdata/MiSeq/samplesheet.csv', + skip_tools: 'fastqc,fastqscreen,seqfu_stats,seqtk_sample,bwamem2_index,bwamem2_mem,rundirparser', + ] + ], + [ + name: "MiSeq data test (paired end reads)", + params: [ + input: pipelines_testdata_base_path + 'seqinspector/testdata/Miseq_PairedEnd/samplesheet.csv', + skip_tools: 'rundirparser', + ] + ] + ] + + // Generate tests for each scenario + test_scenario.each { scenario -> + test(scenario.name, UTILS.getTest(scenario)) + } +} diff --git a/tests/MiSeq.nf.test.snap b/tests/MiSeq.nf.test.snap new file mode 100644 index 00000000..7339c9d5 --- /dev/null +++ b/tests/MiSeq.nf.test.snap @@ -0,0 +1,889 @@ +{ + "Miseq data test (skip all tools)": { + "content": [ + 2, + { + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + } + }, + [ + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai" + ], + [ + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b" + ], + "No BAM files", + "No warnings" + ], + "timestamp": "2026-02-19T11:25:41.926154725", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "MiSeq data test (single end reads)": { + "content": [ + 9, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/SAMPLE_SINGLE_END_01.bam", + "bwamem2_mem/SAMPLE_SINGLE_END_01.bam.bai", + "fastqc", + "fastqc/SAMPLE_SINGLE_END_01_fastqc.html", + "fastqc/SAMPLE_SINGLE_END_01_fastqc.zip", + "fastqscreen", + "fastqscreen/SAMPLE_SINGLE_END_01_screen.html", + "fastqscreen/SAMPLE_SINGLE_END_01_screen.png", + "fastqscreen/SAMPLE_SINGLE_END_01_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/SAMPLE_SINGLE_END_01_seqfu.tsv", + "seqfu_stats/SAMPLE_SINGLE_END_01_seqfu_mqc.txt" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "SAMPLE_SINGLE_END_01_screen.png:md5,ad98ae0f39335aede67e0a233cf16616", + "SAMPLE_SINGLE_END_01_screen.txt:md5,588b1b1f2d307fae7272ab0819e4bac5", + "fastq_screen_plot.txt:md5,7d120ba49a8a9220f85efb05e55bfae1", + "fastqc-status-check-heatmap.txt:md5,976c0ef6a62569395931028d05c2a320", + "fastqc_overrepresented_sequences_plot.txt:md5,89a55ca2171daea540258b0fc37e6766", + "fastqc_per_base_n_content_plot.txt:md5,54814a92014a4e3b07bca1449e2fcce4", + "fastqc_per_base_sequence_quality_plot.txt:md5,e216aeee526de6c65d221924c0b7891e", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a494a0634c54d6ff7821765748908380", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,f838935c85ecfac06a744d7aa635926d", + "fastqc_per_sequence_quality_scores_plot.txt:md5,40c09f977034ca189f4894c8849212a0", + "fastqc_sequence_counts_plot.txt:md5,b1cf5ced11bf843a79f0e4265c7e48a1", + "fastqc_sequence_duplication_levels_plot.txt:md5,70648ea8c46035d60647a128a5aa2fc6", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,1cfa6a74e8e735bf59da770f6cb25959", + "multiqc_fastqc.txt:md5,b5f6993152fb8e7142a1d84c6b75fc18", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3b5a594aed12f8c904c57ee0b75ae990", + "multiqc_picard_baseContent.txt:md5,06ef2cbc8f27964c4d84ce70bf75c152", + "multiqc_picard_quality_by_cycle.txt:md5,4cf5e6149b8feb8da1e6bb885e4a5829", + "multiqc_picard_quality_score_distribution.txt:md5,7f2087055d3268efd2f6de24aa556e2c", + "multiqc_seqfu_mqc.txt:md5,7ec63bc3465b3fc8e316e2443ec4c848", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,4cf5e6149b8feb8da1e6bb885e4a5829", + "picard_QualityScoreDistribution_histogram.txt:md5,7f2087055d3268efd2f6de24aa556e2c", + "picard_alignment_readlength_plot.txt:md5,5dbb52fb316ab11457e8b2bbd5eb6e2a", + "picard_alignment_summary.txt:md5,fcc65f1b88cadefaf095d0aec6ef7634", + "picard_base_distribution_by_cycle__Adenine.txt:md5,770aa7550d7d8f78c5ab8841a577078d", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,264b9e23455de2556e8188951fc4c31d", + "picard_base_distribution_by_cycle__Guanine.txt:md5,b44066e25c38fc8345c7d1c878245602", + "picard_base_distribution_by_cycle__Thymine.txt:md5,55c04c3520e955d4d403635fe1dd01c5", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,a65cb6ad0f510954d869c6c23d97b950", + "picard_quality_by_cycle.txt:md5,d754b0c0d9aac602637d0c923dc88834", + "picard_quality_score_distribution.txt:md5,d86da8fb7d48098fd5ec4a8419a8bc9e", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "SAMPLE_SINGLE_END_01_seqfu.tsv:md5,33a9e44386f308d43881a58394b6b17c", + "SAMPLE_SINGLE_END_01_seqfu_mqc.txt:md5,e67e819605ab49182aacf1d676dc885d" + ], + [ + "SAMPLE_SINGLE_END_01.bam:md5,9acd4428f95f70c1393671680ab9270f" + ], + "No warnings" + ], + "timestamp": "2026-02-19T16:04:51.402781572", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "MiSeq data test (paired end reads)": { + "content": [ + 16, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/SAMPLE_PAIRED_END_1_01.bam", + "bwamem2_mem/SAMPLE_PAIRED_END_1_01.bam.bai", + "bwamem2_mem/SAMPLE_PAIRED_END_2_02.bam", + "bwamem2_mem/SAMPLE_PAIRED_END_2_02.bam.bai", + "fastqc", + "fastqc/SAMPLE_PAIRED_END_1_01_1_fastqc.html", + "fastqc/SAMPLE_PAIRED_END_1_01_1_fastqc.zip", + "fastqc/SAMPLE_PAIRED_END_1_01_2_fastqc.html", + "fastqc/SAMPLE_PAIRED_END_1_01_2_fastqc.zip", + "fastqc/SAMPLE_PAIRED_END_2_02_1_fastqc.html", + "fastqc/SAMPLE_PAIRED_END_2_02_1_fastqc.zip", + "fastqc/SAMPLE_PAIRED_END_2_02_2_fastqc.html", + "fastqc/SAMPLE_PAIRED_END_2_02_2_fastqc.zip", + "fastqscreen", + "fastqscreen/SAMPLE_PAIRED_END_1_01_1_screen.html", + "fastqscreen/SAMPLE_PAIRED_END_1_01_1_screen.png", + "fastqscreen/SAMPLE_PAIRED_END_1_01_1_screen.txt", + "fastqscreen/SAMPLE_PAIRED_END_1_01_2_screen.html", + "fastqscreen/SAMPLE_PAIRED_END_1_01_2_screen.png", + "fastqscreen/SAMPLE_PAIRED_END_1_01_2_screen.txt", + "fastqscreen/SAMPLE_PAIRED_END_2_02_1_screen.html", + "fastqscreen/SAMPLE_PAIRED_END_2_02_1_screen.png", + "fastqscreen/SAMPLE_PAIRED_END_2_02_1_screen.txt", + "fastqscreen/SAMPLE_PAIRED_END_2_02_2_screen.html", + "fastqscreen/SAMPLE_PAIRED_END_2_02_2_screen.png", + "fastqscreen/SAMPLE_PAIRED_END_2_02_2_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary_Aligned_Bases.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary_Aligned_Reads.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary_Aligned_Bases-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary_Aligned_Bases-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary_Aligned_Reads-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary_Aligned_Reads-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary_Aligned_Bases-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary_Aligned_Bases-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary_Aligned_Reads-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary_Aligned_Reads-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary_Aligned_Bases-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary_Aligned_Bases-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary_Aligned_Reads-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary_Aligned_Reads-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "multiqc/group_reports", + "multiqc/group_reports/Bpacificus", + "multiqc/group_reports/Bpacificus/multiqc_data", + "multiqc/group_reports/Bpacificus/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/llms-full.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc.log", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc.parquet", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_data.json", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_alignment_summary_Aligned_Bases.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_alignment_summary_Aligned_Reads.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/Bpacificus/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/Bpacificus/multiqc_plots", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_alignment_summary_Aligned_Bases-cnt.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_alignment_summary_Aligned_Bases-pct.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_alignment_summary_Aligned_Reads-cnt.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_alignment_summary_Aligned_Reads-pct.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/Bpacificus/multiqc_plots/png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_alignment_summary_Aligned_Bases-cnt.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_alignment_summary_Aligned_Bases-pct.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_alignment_summary_Aligned_Reads-cnt.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_alignment_summary_Aligned_Reads-pct.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_alignment_summary_Aligned_Bases-cnt.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_alignment_summary_Aligned_Bases-pct.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_alignment_summary_Aligned_Reads-cnt.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_alignment_summary_Aligned_Reads-pct.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/Bpacificus/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/Bpacificus/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_1_01.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SAMPLE_PAIRED_END_2_02.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/SAMPLE_PAIRED_END_1_01_seqfu.tsv", + "seqfu_stats/SAMPLE_PAIRED_END_1_01_seqfu_mqc.txt", + "seqfu_stats/SAMPLE_PAIRED_END_2_02_seqfu.tsv", + "seqfu_stats/SAMPLE_PAIRED_END_2_02_seqfu_mqc.txt" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "SAMPLE_PAIRED_END_1_01_1_screen.png:md5,f52ddd0e65f23f68dd8d58d5453417db", + "SAMPLE_PAIRED_END_1_01_1_screen.txt:md5,921b08eeb461a2aa1bd42bba53900f70", + "SAMPLE_PAIRED_END_1_01_2_screen.png:md5,908f4fceea8aa546106efdaa7ca78f7d", + "SAMPLE_PAIRED_END_1_01_2_screen.txt:md5,e9ea5789e356f666de27ba658704e80d", + "SAMPLE_PAIRED_END_2_02_1_screen.png:md5,48d546767ed2a34a1eda59d97dd00c18", + "SAMPLE_PAIRED_END_2_02_1_screen.txt:md5,a5b047f495d01bf9dcb0ae516d3c7fc3", + "SAMPLE_PAIRED_END_2_02_2_screen.png:md5,e3684b17339d16e6fb64ace7593cc388", + "SAMPLE_PAIRED_END_2_02_2_screen.txt:md5,fc95e5058e764596d5da182cbc0614cf", + "fastq_screen_plot.txt:md5,24a7d3472f06fe6032bb7f12f5828b49", + "fastqc-status-check-heatmap.txt:md5,c1e87942bda9a4ccf519bf561ce18ed3", + "fastqc_adapter_content_plot.txt:md5,4b7007431bd26127365b0f25120d48f2", + "fastqc_per_base_n_content_plot.txt:md5,6bbf19be2aef3ef67dfe548bf9323011", + "fastqc_per_base_sequence_quality_plot.txt:md5,2bd96b0c0413ee4871a53d41f067d809", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,1f56f6ca0f469bec9b25010c6f9cbfdd", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,64bc987cceac0396b8b650000493427e", + "fastqc_per_sequence_quality_scores_plot.txt:md5,4aa57cbe1f9da1facc1b588b4c166cec", + "fastqc_sequence_counts_plot.txt:md5,57f96ad90232887fec1480ef4071f8b6", + "fastqc_sequence_duplication_levels_plot.txt:md5,62e93bfc80b0bf201a605802edbe0177", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,6f9cfa81bda7482142c640b9f0c82b90", + "multiqc_fastqc.txt:md5,85fe5c24576dc105adb8ca90ce6449b7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,32c0a27891fabd36de3c7fa97d82c11f", + "multiqc_picard_baseContent.txt:md5,a2043541e3ce74b710ae2b69ef7bc593", + "multiqc_picard_quality_by_cycle.txt:md5,0eab2183e8852b165b09a9ea8a5f67c9", + "multiqc_picard_quality_score_distribution.txt:md5,33955f093524a0eff449e25226768d84", + "multiqc_seqfu_mqc.txt:md5,139354afd154804b4b77f997277f3ee9", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,0eab2183e8852b165b09a9ea8a5f67c9", + "picard_QualityScoreDistribution_histogram.txt:md5,33955f093524a0eff449e25226768d84", + "picard_alignment_readlength_plot.txt:md5,ed079bc433831b807d11b7b95b151b4e", + "picard_alignment_summary_Aligned_Bases.txt:md5,9f877e31c0f772644a91531717b8ce32", + "picard_alignment_summary_Aligned_Reads.txt:md5,3a1ff58d9f57eb88240116dea3e11a99", + "picard_base_distribution_by_cycle__Adenine.txt:md5,23b0d8572689f0eafb3adaa57814fdfd", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,c9a36624afb4251813e392ea7bc0d135", + "picard_base_distribution_by_cycle__Guanine.txt:md5,c68670e3254396cd3db5fc57064ab328", + "picard_base_distribution_by_cycle__Thymine.txt:md5,ae15c81a007c9316c7d1ccda8daace25", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,040f28a453cfca2155c65f1d8553ecfe", + "picard_quality_by_cycle.txt:md5,2497dd5ef1e5cedc1f88a9b67ef549d7", + "picard_quality_score_distribution.txt:md5,795138cccc8b97143f8bf0bf0adbd4b7", + "fastq_screen_plot.txt:md5,24a7d3472f06fe6032bb7f12f5828b49", + "fastqc-status-check-heatmap.txt:md5,c1e87942bda9a4ccf519bf561ce18ed3", + "fastqc_adapter_content_plot.txt:md5,4b7007431bd26127365b0f25120d48f2", + "fastqc_per_base_n_content_plot.txt:md5,6bbf19be2aef3ef67dfe548bf9323011", + "fastqc_per_base_sequence_quality_plot.txt:md5,2bd96b0c0413ee4871a53d41f067d809", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,1f56f6ca0f469bec9b25010c6f9cbfdd", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,64bc987cceac0396b8b650000493427e", + "fastqc_per_sequence_quality_scores_plot.txt:md5,4aa57cbe1f9da1facc1b588b4c166cec", + "fastqc_sequence_counts_plot.txt:md5,57f96ad90232887fec1480ef4071f8b6", + "fastqc_sequence_duplication_levels_plot.txt:md5,62e93bfc80b0bf201a605802edbe0177", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,6f9cfa81bda7482142c640b9f0c82b90", + "multiqc_fastqc.txt:md5,85fe5c24576dc105adb8ca90ce6449b7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,32c0a27891fabd36de3c7fa97d82c11f", + "multiqc_picard_baseContent.txt:md5,a2043541e3ce74b710ae2b69ef7bc593", + "multiqc_picard_quality_by_cycle.txt:md5,0eab2183e8852b165b09a9ea8a5f67c9", + "multiqc_picard_quality_score_distribution.txt:md5,33955f093524a0eff449e25226768d84", + "multiqc_seqfu_mqc.txt:md5,139354afd154804b4b77f997277f3ee9", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,0eab2183e8852b165b09a9ea8a5f67c9", + "picard_QualityScoreDistribution_histogram.txt:md5,33955f093524a0eff449e25226768d84", + "picard_alignment_readlength_plot.txt:md5,ed079bc433831b807d11b7b95b151b4e", + "picard_alignment_summary_Aligned_Bases.txt:md5,9f877e31c0f772644a91531717b8ce32", + "picard_alignment_summary_Aligned_Reads.txt:md5,3a1ff58d9f57eb88240116dea3e11a99", + "picard_base_distribution_by_cycle__Adenine.txt:md5,23b0d8572689f0eafb3adaa57814fdfd", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,c9a36624afb4251813e392ea7bc0d135", + "picard_base_distribution_by_cycle__Guanine.txt:md5,c68670e3254396cd3db5fc57064ab328", + "picard_base_distribution_by_cycle__Thymine.txt:md5,ae15c81a007c9316c7d1ccda8daace25", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,040f28a453cfca2155c65f1d8553ecfe", + "picard_quality_by_cycle.txt:md5,2497dd5ef1e5cedc1f88a9b67ef549d7", + "picard_quality_score_distribution.txt:md5,795138cccc8b97143f8bf0bf0adbd4b7", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "SAMPLE_PAIRED_END_1_01_seqfu.tsv:md5,be29dfe848eab9a10ee0d46691223eae", + "SAMPLE_PAIRED_END_1_01_seqfu_mqc.txt:md5,0aca00c7f64454af520c7e08ec595d2b", + "SAMPLE_PAIRED_END_2_02_seqfu.tsv:md5,44a5cb826e001d58208a5855938fa82b", + "SAMPLE_PAIRED_END_2_02_seqfu_mqc.txt:md5,ac1740de9ef142c99c993fa9824ead63" + ], + [ + "SAMPLE_PAIRED_END_1_01.bam:md5,ac811b20d56132f5e039b3e8fd217405", + "SAMPLE_PAIRED_END_2_02.bam:md5,57892fc4314e66e8e20de4f5d82f9b5d" + ], + [ + "WARN: Tag name collision: [Bpacificus]" + ] + ], + "timestamp": "2026-02-19T16:07:01.63849991", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "Miseq data test (skip fastqc)": { + "content": [ + 8, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/SAMPLE_SINGLE_END_01.bam", + "bwamem2_mem/SAMPLE_SINGLE_END_01.bam.bai", + "fastqscreen", + "fastqscreen/SAMPLE_SINGLE_END_01_screen.html", + "fastqscreen/SAMPLE_SINGLE_END_01_screen.png", + "fastqscreen/SAMPLE_SINGLE_END_01_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SAMPLE_SINGLE_END_01.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/SAMPLE_SINGLE_END_01_seqfu.tsv", + "seqfu_stats/SAMPLE_SINGLE_END_01_seqfu_mqc.txt" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "SAMPLE_SINGLE_END_01_screen.png:md5,ad98ae0f39335aede67e0a233cf16616", + "SAMPLE_SINGLE_END_01_screen.txt:md5,588b1b1f2d307fae7272ab0819e4bac5", + "fastq_screen_plot.txt:md5,7d120ba49a8a9220f85efb05e55bfae1", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,1cfa6a74e8e735bf59da770f6cb25959", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3b5a594aed12f8c904c57ee0b75ae990", + "multiqc_picard_baseContent.txt:md5,06ef2cbc8f27964c4d84ce70bf75c152", + "multiqc_picard_quality_by_cycle.txt:md5,4cf5e6149b8feb8da1e6bb885e4a5829", + "multiqc_picard_quality_score_distribution.txt:md5,7f2087055d3268efd2f6de24aa556e2c", + "multiqc_seqfu_mqc.txt:md5,7ec63bc3465b3fc8e316e2443ec4c848", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,4cf5e6149b8feb8da1e6bb885e4a5829", + "picard_QualityScoreDistribution_histogram.txt:md5,7f2087055d3268efd2f6de24aa556e2c", + "picard_alignment_readlength_plot.txt:md5,5dbb52fb316ab11457e8b2bbd5eb6e2a", + "picard_alignment_summary.txt:md5,fcc65f1b88cadefaf095d0aec6ef7634", + "picard_base_distribution_by_cycle__Adenine.txt:md5,770aa7550d7d8f78c5ab8841a577078d", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,264b9e23455de2556e8188951fc4c31d", + "picard_base_distribution_by_cycle__Guanine.txt:md5,b44066e25c38fc8345c7d1c878245602", + "picard_base_distribution_by_cycle__Thymine.txt:md5,55c04c3520e955d4d403635fe1dd01c5", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,a65cb6ad0f510954d869c6c23d97b950", + "picard_quality_by_cycle.txt:md5,d754b0c0d9aac602637d0c923dc88834", + "picard_quality_score_distribution.txt:md5,d86da8fb7d48098fd5ec4a8419a8bc9e", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "SAMPLE_SINGLE_END_01_seqfu.tsv:md5,33a9e44386f308d43881a58394b6b17c", + "SAMPLE_SINGLE_END_01_seqfu_mqc.txt:md5,e67e819605ab49182aacf1d676dc885d" + ], + [ + "SAMPLE_SINGLE_END_01.bam:md5,9acd4428f95f70c1393671680ab9270f" + ], + "No warnings" + ], + "timestamp": "2026-02-19T16:05:40.254319275", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/tests/NovaSeq6000.nf.test b/tests/NovaSeq6000.nf.test new file mode 100644 index 00000000..27a24359 --- /dev/null +++ b/tests/NovaSeq6000.nf.test @@ -0,0 +1,45 @@ +def pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' +def projectDir = new File('.').absolutePath + +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + + def test_scenario = [ + [ + name: "NovaSeq6000 data test", + params: [], + snapshot: 'stderr,stdout' + ], + [ + name: "NovaSeq6000 data test sample size", + params: [ + sample_size : 90 + ] + ], + [ + name: "NovaSeq6000 data test relative sample size", + params: [ + sample_size : 0.9 + ] + ], + [ + name: "NovaSeq6000 data test sample size exceeds available reads", + params: [ + sample_size : 120 + ] + ], + [ + name: "NovaSeq6000 data test - No rundirs", + params: [ + input : pipelines_testdata_base_path + 'seqinspector/testdata/NovaSeq6000/samplesheet_no_rundirs.csv' + ] + ] + ] + + // Generate tests for each scenario + test_scenario.each { scenario -> + test(scenario.name, UTILS.getTest(scenario)) + } +} diff --git a/tests/NovaSeq6000.nf.test.snap b/tests/NovaSeq6000.nf.test.snap new file mode 100644 index 00000000..713edfa5 --- /dev/null +++ b/tests/NovaSeq6000.nf.test.snap @@ -0,0 +1,5018 @@ +{ + "NovaSeq6000 data test": { + "content": [ + 38, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "RUNDIRPARSER": { + "PyYAML": "6.0.2", + "Python": "3.13.2" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/Sample1_01.bam", + "bwamem2_mem/Sample1_01.bam.bai", + "bwamem2_mem/Sample23_03.bam", + "bwamem2_mem/Sample23_03.bam.bai", + "bwamem2_mem/SampleA_02.bam", + "bwamem2_mem/SampleA_02.bam.bai", + "bwamem2_mem/Undetermined_05.bam", + "bwamem2_mem/Undetermined_05.bam.bai", + "bwamem2_mem/sampletest_04.bam", + "bwamem2_mem/sampletest_04.bam.bai", + "fastqc", + "fastqc/Sample1_01_fastqc.html", + "fastqc/Sample1_01_fastqc.zip", + "fastqc/Sample23_03_fastqc.html", + "fastqc/Sample23_03_fastqc.zip", + "fastqc/SampleA_02_fastqc.html", + "fastqc/SampleA_02_fastqc.zip", + "fastqc/Undetermined_05_fastqc.html", + "fastqc/Undetermined_05_fastqc.zip", + "fastqc/sampletest_04_fastqc.html", + "fastqc/sampletest_04_fastqc.zip", + "fastqscreen", + "fastqscreen/Sample1_01_screen.html", + "fastqscreen/Sample1_01_screen.png", + "fastqscreen/Sample1_01_screen.txt", + "fastqscreen/Sample23_03_screen.html", + "fastqscreen/Sample23_03_screen.png", + "fastqscreen/Sample23_03_screen.txt", + "fastqscreen/SampleA_02_screen.html", + "fastqscreen/SampleA_02_screen.png", + "fastqscreen/SampleA_02_screen.txt", + "fastqscreen/Undetermined_05_screen.html", + "fastqscreen/Undetermined_05_screen.png", + "fastqscreen/Undetermined_05_screen.txt", + "fastqscreen/sampletest_04_screen.html", + "fastqscreen/sampletest_04_screen.png", + "fastqscreen/sampletest_04_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/global_report/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/global_report/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/global_report/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "multiqc/group_reports", + "multiqc/group_reports/group1", + "multiqc/group_reports/group1/multiqc_data", + "multiqc/group_reports/group1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group1/multiqc_data/llms-full.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc.log", + "multiqc/group_reports/group1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_plots", + "multiqc/group_reports/group1/multiqc_plots/pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group1/multiqc_plots/png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group1/multiqc_plots/svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group1/multiqc_report.html", + "multiqc/group_reports/group2", + "multiqc/group_reports/group2/multiqc_data", + "multiqc/group_reports/group2/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group2/multiqc_data/llms-full.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc.log", + "multiqc/group_reports/group2/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group2/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group2/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_plots", + "multiqc/group_reports/group2/multiqc_plots/pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group2/multiqc_plots/png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group2/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group2/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group2/multiqc_plots/svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group2/multiqc_report.html", + "multiqc/group_reports/lane1", + "multiqc/group_reports/lane1/multiqc_data", + "multiqc/group_reports/lane1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/lane1/multiqc_data/llms-full.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc.log", + "multiqc/group_reports/lane1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/lane1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_plots", + "multiqc/group_reports/lane1/multiqc_plots/pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/lane1/multiqc_plots/png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/lane1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/lane1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/lane1/multiqc_plots/svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/lane1/multiqc_report.html", + "multiqc/group_reports/test", + "multiqc/group_reports/test/multiqc_data", + "multiqc/group_reports/test/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/test/multiqc_data/llms-full.txt", + "multiqc/group_reports/test/multiqc_data/multiqc.log", + "multiqc/group_reports/test/multiqc_data/multiqc.parquet", + "multiqc/group_reports/test/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_data.json", + "multiqc/group_reports/test/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/test/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/test/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_plots", + "multiqc/group_reports/test/multiqc_plots/pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/test/multiqc_plots/png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/test/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/test/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/test/multiqc_plots/svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/test/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/test/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/test/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "rundirparser", + "rundirparser/200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/Sample1_01_seqfu.tsv", + "seqfu_stats/Sample1_01_seqfu_mqc.txt", + "seqfu_stats/Sample23_03_seqfu.tsv", + "seqfu_stats/Sample23_03_seqfu_mqc.txt", + "seqfu_stats/SampleA_02_seqfu.tsv", + "seqfu_stats/SampleA_02_seqfu_mqc.txt", + "seqfu_stats/Undetermined_05_seqfu.tsv", + "seqfu_stats/Undetermined_05_seqfu_mqc.txt", + "seqfu_stats/sampletest_04_seqfu.tsv", + "seqfu_stats/sampletest_04_seqfu_mqc.txt" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "Sample1_01_screen.png:md5,562256290643b51e4374c2225a15f463", + "Sample1_01_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "Sample23_03_screen.png:md5,6bb2caf67b9b2ed25d3d5f32c343e9ab", + "Sample23_03_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "SampleA_02_screen.png:md5,b2c3e95e034f5c038754bf108537de0e", + "SampleA_02_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "Undetermined_05_screen.png:md5,fc5d53f8876dfae3d1a781fa512ea1db", + "Undetermined_05_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "sampletest_04_screen.png:md5,1fb60070e8f4b70de0c1b3786b54f27e", + "sampletest_04_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "fastq_screen_plot.txt:md5,990122d48fa4c1a170107a1ba034e4cf", + "fastqc-status-check-heatmap.txt:md5,7a64380ec42aac56949a2d9a4176d4d9", + "fastqc_overrepresented_sequences_plot.txt:md5,c7908980f1dba22b45cf6de14a66a686", + "fastqc_per_base_n_content_plot.txt:md5,8aafe701b59b4e70ccec86748c7d6eb3", + "fastqc_per_base_sequence_quality_plot.txt:md5,c2bbc52a285a46ab8c548bca3b721e13", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a422f61a00f0839ef0d630d2e4524589", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,0e5a0cd0b0f8e66b3617f1ac19822d77", + "fastqc_per_sequence_quality_scores_plot.txt:md5,cbaa7c7033c526483584376275a8b33e", + "fastqc_sequence_counts_plot.txt:md5,d8ab86dbfce0c740f4a66a080803a0b9", + "fastqc_sequence_duplication_levels_plot.txt:md5,f86012b3074d697c9a2b3bd67a074288", + "fastqc_sequence_length_distribution_plot.txt:md5,9d4fd245e8e1d5baa473a8bdffcd3e38", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,62240561100f78af37e7e2438cb58f90", + "multiqc_fastqc.txt:md5,23b698f1e957a26f49a9ad9bbdece908", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,b113ea40790fa45fa739f224f2710556", + "multiqc_picard_baseContent.txt:md5,e06c0dea80cb5cef312436e005aa0095", + "multiqc_picard_quality_by_cycle.txt:md5,6e13ddbd97caa0eaa52c118966e5f9fa", + "multiqc_picard_quality_score_distribution.txt:md5,39d3430744e9139020d7af3eb15fc629", + "multiqc_seqfu_mqc.txt:md5,18dd2407d4a1791646785123028f69b5", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,6e13ddbd97caa0eaa52c118966e5f9fa", + "picard_QualityScoreDistribution_histogram.txt:md5,39d3430744e9139020d7af3eb15fc629", + "picard_alignment_readlength_plot.txt:md5,57ee2de637b69efc49290bb5d4b57905", + "picard_alignment_summary.txt:md5,3fee23a738a44ee84592cb1144b32775", + "picard_base_distribution_by_cycle__Adenine.txt:md5,dfb9e50700b61cdbc0344690db202559", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,5eec2a9bbb5db321c7cbbbee26d90357", + "picard_base_distribution_by_cycle__Guanine.txt:md5,5b100b42e93792fed754deb276645e61", + "picard_base_distribution_by_cycle__Thymine.txt:md5,d0317fe5ef2cf1b692526cb9a18aa50c", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,8aafe701b59b4e70ccec86748c7d6eb3", + "picard_quality_by_cycle.txt:md5,366ee22c93a11c1335f867020bb03da5", + "picard_quality_score_distribution.txt:md5,17d6f490cb59e16a7ed4b04ffaa1a100", + "fastq_screen_plot.txt:md5,db7c9231e756a6e5999399a7385e4687", + "fastqc-status-check-heatmap.txt:md5,fc37eaf184877ac80b92001a7bf2fa81", + "fastqc_overrepresented_sequences_plot.txt:md5,0693849fc324ddf580e2c5a4d910bb4f", + "fastqc_per_base_n_content_plot.txt:md5,0ed7f750b500e7c5387ea5309e1ef467", + "fastqc_per_base_sequence_quality_plot.txt:md5,18016152915653e812818194a142e162", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,93f664e18c021aae79ad222fb4cfb393", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,ba96762be2aa842e1d2a606095ffcb7e", + "fastqc_per_sequence_quality_scores_plot.txt:md5,b9044bfe90fd5685137739f52a97ee2c", + "fastqc_sequence_counts_plot.txt:md5,42b26ad3758717659763c81852c4f197", + "fastqc_sequence_duplication_levels_plot.txt:md5,818f13a5372bad79e54cd984758096c5", + "fastqc_sequence_length_distribution_plot.txt:md5,98316a2607a889ae1e7e79a4f64cc740", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,024e1e7f9db3b0906c7aa0904229e176", + "multiqc_fastqc.txt:md5,3407d8f06117a65efce4c70f19e91dd1", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,1debd96f9f64c60a8ec742411da51a28", + "multiqc_picard_baseContent.txt:md5,afb4046944e302b40faea2233bca535c", + "multiqc_picard_quality_by_cycle.txt:md5,6a7552b74dd22410c3cab2c750de792e", + "multiqc_picard_quality_score_distribution.txt:md5,d6343c5f39942bc3f10c194067e6e9bc", + "multiqc_seqfu_mqc.txt:md5,6cdb863a3686fbb772aae5a66925ff23", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,6a7552b74dd22410c3cab2c750de792e", + "picard_QualityScoreDistribution_histogram.txt:md5,d6343c5f39942bc3f10c194067e6e9bc", + "picard_alignment_readlength_plot.txt:md5,01140e65e813b4ae43aabe662ef2f49a", + "picard_alignment_summary.txt:md5,79312cf30761025cc6902811c4165290", + "picard_base_distribution_by_cycle__Adenine.txt:md5,3c3671ac2aa18d883691d59adbfe3b2b", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,6cc2ae1411899de5542321ff1592b192", + "picard_base_distribution_by_cycle__Guanine.txt:md5,326471bc846a9fb6b54ff38cbdfb8d90", + "picard_base_distribution_by_cycle__Thymine.txt:md5,3132dac406a9b9e1f18af658ab856a5c", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,0ed7f750b500e7c5387ea5309e1ef467", + "picard_quality_by_cycle.txt:md5,fe4e6ab1c849a4f833eae9a8554ea432", + "picard_quality_score_distribution.txt:md5,c0864f8a1269d8ffd7a51abb6bd3ca2e", + "fastq_screen_plot.txt:md5,4def6c6a888afe487ab6ebef3ba8a133", + "fastqc-status-check-heatmap.txt:md5,61857d2c45cf0c080348047aa34e7525", + "fastqc_overrepresented_sequences_plot.txt:md5,7949c64cc6cef77f29349a188fc09656", + "fastqc_per_base_n_content_plot.txt:md5,0f2fd628631d42ed5e6a1db22578daaa", + "fastqc_per_base_sequence_quality_plot.txt:md5,0a8bfa32ab04eaaa509dec3c37acb2d2", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,8c85be0c70129ba739feceddd58f6c75", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,94b975906d8a07e1604e00d4004f7463", + "fastqc_per_sequence_quality_scores_plot.txt:md5,ec22c8e4836aa726680f0ca767c778a0", + "fastqc_sequence_counts_plot.txt:md5,f4341795bdeba588248a74a095a97f8d", + "fastqc_sequence_duplication_levels_plot.txt:md5,8fc995cb2192a2926eee242681bc3af6", + "fastqc_sequence_length_distribution_plot.txt:md5,4513e22583677a4d6167b9094242eb0b", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,fd3074930c72b666f201ae71fa27744b", + "multiqc_fastqc.txt:md5,98111f17d1899cad6379e4e56ed11c53", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3b1929de09267fc1c1a15804cb5bf536", + "multiqc_picard_baseContent.txt:md5,ff36be9e2642089aa711c637d3cdba29", + "multiqc_picard_quality_by_cycle.txt:md5,9521c83313eaf5f681ac9a75de83a4b7", + "multiqc_picard_quality_score_distribution.txt:md5,90b9e29f22fa16cf2b0c4d92caf2dbb0", + "multiqc_seqfu_mqc.txt:md5,f821357507fda2d4cfd9299f52fa7dc1", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,9521c83313eaf5f681ac9a75de83a4b7", + "picard_QualityScoreDistribution_histogram.txt:md5,90b9e29f22fa16cf2b0c4d92caf2dbb0", + "picard_alignment_readlength_plot.txt:md5,9c80659c5c9b2fe9926b789fb67ba6ac", + "picard_alignment_summary.txt:md5,27bbb1fcdeecd26641938e5622087c23", + "picard_base_distribution_by_cycle__Adenine.txt:md5,99c5e961a4d26754e68047c8eb983798", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,44981dd399013d8c06481958be338040", + "picard_base_distribution_by_cycle__Guanine.txt:md5,b6369a23d3926edb90ae9bfdc6d90526", + "picard_base_distribution_by_cycle__Thymine.txt:md5,b253d3fca7c07b6a6dfea91725c58102", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,0f2fd628631d42ed5e6a1db22578daaa", + "picard_quality_by_cycle.txt:md5,3c34ae2bd2442a816577b1a794add2d6", + "picard_quality_score_distribution.txt:md5,0d58c59eac2952e6f71cefc35d4c4477", + "fastq_screen_plot.txt:md5,5abb5b9ed2c976f0ad83216ca3186201", + "fastqc-status-check-heatmap.txt:md5,323d6082b73ddb6ee33385f5ea4301c1", + "fastqc_overrepresented_sequences_plot.txt:md5,4e71d8913d40eb06db0f18d74ce6898f", + "fastqc_per_base_n_content_plot.txt:md5,b317ce09cb7a2be2366b544ea9b20ce6", + "fastqc_per_base_sequence_quality_plot.txt:md5,e6f44d08f4185f680d4748a3b37201e2", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a1dc8a968f32bcf8a9b4c5f43d299dfa", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,e41b6dc1344f1aee379993daff310187", + "fastqc_per_sequence_quality_scores_plot.txt:md5,76f792b939233b070562cc46617f6371", + "fastqc_sequence_counts_plot.txt:md5,36c68522023b8d536c9362403bf03c48", + "fastqc_sequence_duplication_levels_plot.txt:md5,9ff0df466790d971b3c7ef838efc0f4f", + "fastqc_sequence_length_distribution_plot.txt:md5,9fda632b92e3453f11cd0226484fce8e", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,536c28d7fadc9a76944f93ac9d643272", + "multiqc_fastqc.txt:md5,396b4cc0466a6642ec8b954237c42263", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,153c6e6a407ec128b1a02798ca2f1115", + "multiqc_picard_baseContent.txt:md5,6349e514552a0b5a0530fa6f311878a5", + "multiqc_picard_quality_by_cycle.txt:md5,c0c8b4c0197428d4d50e2c532814e1e2", + "multiqc_picard_quality_score_distribution.txt:md5,40e0b6faa75e1b51af42407f7ededb0c", + "multiqc_seqfu_mqc.txt:md5,8cced36d66ca9d25d60c006e734aa7e9", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,c0c8b4c0197428d4d50e2c532814e1e2", + "picard_QualityScoreDistribution_histogram.txt:md5,40e0b6faa75e1b51af42407f7ededb0c", + "picard_alignment_readlength_plot.txt:md5,5a19b1f8e2ac49d97f36a7792429419c", + "picard_alignment_summary.txt:md5,f9f791b7c569cfae07aef70aa630d40e", + "picard_base_distribution_by_cycle__Adenine.txt:md5,0165f522c84da6b17a286d37dc30abec", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,6fa0d29d40fe7fa24c166b664b6d4f4b", + "picard_base_distribution_by_cycle__Guanine.txt:md5,bf2426e09ac1ca4773edfc284c220122", + "picard_base_distribution_by_cycle__Thymine.txt:md5,3cbace572471ccf6c58673181dd0c0ec", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,b317ce09cb7a2be2366b544ea9b20ce6", + "picard_quality_by_cycle.txt:md5,7cb705007bc97da8c0da7d93201e6975", + "picard_quality_score_distribution.txt:md5,47d684abae0a8f4f09df43e91d54fb9a", + "fastq_screen_plot.txt:md5,82ceb9f2109f865d6d1b943441c09550", + "fastqc-status-check-heatmap.txt:md5,56b426cd5c030288639533fce7c95ab1", + "fastqc_overrepresented_sequences_plot.txt:md5,8e83abdbe7362e64d63339ee31ab3361", + "fastqc_per_base_n_content_plot.txt:md5,33b70326d8f888ac5a3d99b85f365e43", + "fastqc_per_base_sequence_quality_plot.txt:md5,40bc954cc0d58a3197fdf124a40f1ca4", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,e240e30996c81a34b5d1a6b5a98ae254", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b44d3376d503af12857d494c58b514bb", + "fastqc_per_sequence_quality_scores_plot.txt:md5,66b5b6d44f398fc9429460c0b9ba3ea9", + "fastqc_sequence_counts_plot.txt:md5,6e5804f553f656cffb02f927015d1026", + "fastqc_sequence_duplication_levels_plot.txt:md5,fbe41935ea2e2faf7104393b476e5ac5", + "fastqc_sequence_length_distribution_plot.txt:md5,e77dc4ab73252c2e09c7452c3b8e8ab3", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,4fc422d9cb06a1d0248cc578c1eebaa2", + "multiqc_fastqc.txt:md5,95c8ffb23baafec625aeb600047515ae", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,2d05e826f5152fd0143edf7270de1235", + "multiqc_picard_baseContent.txt:md5,f3f23899a30a96260d8b5b3020708703", + "multiqc_picard_quality_by_cycle.txt:md5,c7edfc271ab59ecedad0ab046afd3563", + "multiqc_picard_quality_score_distribution.txt:md5,7fa89b52b8bc96dd1074aa07cb5a5a54", + "multiqc_seqfu_mqc.txt:md5,ff4ce1c88f39ed24a88bae0a861f75c8", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,c7edfc271ab59ecedad0ab046afd3563", + "picard_QualityScoreDistribution_histogram.txt:md5,7fa89b52b8bc96dd1074aa07cb5a5a54", + "picard_alignment_readlength_plot.txt:md5,c1519319c4942162b05e6225fea10569", + "picard_alignment_summary.txt:md5,49f5c0d2cf21a13d5f363cb42cf3790e", + "picard_base_distribution_by_cycle__Adenine.txt:md5,466a14fc9c09f9f4de02a00e8763cd2a", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,d5854c22df4ac60b8c47c4002d975fe9", + "picard_base_distribution_by_cycle__Guanine.txt:md5,c27b5aa2b90397b1302b880dff3ec958", + "picard_base_distribution_by_cycle__Thymine.txt:md5,6f2a3e9d03f17a93c69476607a1a580d", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,33b70326d8f888ac5a3d99b85f365e43", + "picard_quality_by_cycle.txt:md5,0aa028d69d8bb02f0a2bcd0ed08f4235", + "picard_quality_score_distribution.txt:md5,a2882ff59902dc95830ed4bdb955561a", + "200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml:md5,29e05fed18bca0e9a857c992b6d59a40", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "Sample1_01_seqfu.tsv:md5,ac174f48d928c6ddfd43c88af0caa8b6", + "Sample1_01_seqfu_mqc.txt:md5,24d99524ccd0e6c6255a69d68a871c7a", + "Sample23_03_seqfu.tsv:md5,6fac5d3dbce3f3bee72341fe99a399dc", + "Sample23_03_seqfu_mqc.txt:md5,4d4f280911a08bb6b753142980178027", + "SampleA_02_seqfu.tsv:md5,aec811f267bb2a0ef066a7abb59d2775", + "SampleA_02_seqfu_mqc.txt:md5,a819409a5cb64e20c3e54ec5ada4aa27", + "Undetermined_05_seqfu.tsv:md5,3a42c5c66a0a118f1a6f6f6e560b0e7e", + "Undetermined_05_seqfu_mqc.txt:md5,bd8be908362c5cb08a72f8ae7ab41b0d", + "sampletest_04_seqfu.tsv:md5,a5bea0b9c6015dd1a201ffd433e9b377", + "sampletest_04_seqfu_mqc.txt:md5,2180961655bbc8a12f0152d6a4b803a2" + ], + [ + "Sample1_01.bam:md5,d06ccfde49cc474faebcab2ebf71b324", + "Sample23_03.bam:md5,5ff9f554c6255fd07d3841c6616c5031", + "SampleA_02.bam:md5,250d0031520e59ee59a7112ab1ea32e1", + "Undetermined_05.bam:md5,8fcc158f1e0736b366152d5e187644ca", + "sampletest_04.bam:md5,f80371e37421d97499b3bfd55221ed00" + ], + [ + "N E X T F L O W ~ version [VERSION]", + "Launching `[PATH]/tests/../main.nf` [RUN_NAME] DSL2 - revision: [REVISION]", + "------------------------------------------------------", + " ,--./,-.", + " ___ __ __ __ ___ /,-._.--~'", + " |\\ | |__ __ / ` / \\ |__) |__ } {", + " | \\| | \\__, \\__/ | \\ |___ \\`-._,-`-,", + " `._,._,'", + " nf-core/seqinspector [VERSION]", + "------------------------------------------------------", + "Input/output options", + " input : https://raw.githubusercontent.com/nf-core/test-datasets/seqinspector/testdata/NovaSeq6000/samplesheet.csv", + " outdir : [PATH]/tests/[NFT_HASH]/output", + "Reference genome options", + " genome : R64-1-1", + " fasta : s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa", + "Institutional config options", + " config_profile_name : Test profile", + " config_profile_description: Minimal test dataset to check pipeline function", + "Generic options", + " trace_report_suffix : [TIMESTAMP]", + "Core Nextflow options", + " runName : [RUN_NAME]", + " launchDir : [PATH]/tests/[NFT_HASH]", + " workDir : [PATH]/tests/[NFT_HASH]/work", + " projectDir : [PATH]", + " userName : [USER]", + " profile : test,[CONTAINER]", + " configFiles : [PATH]/nextflow.config, [PATH]/nextflow.config, [PATH]/tests/nextflow.config", + "!! Only displaying parameters that differ from the pipeline defaults !!", + "------------------------------------------------------", + "* The nf-core framework", + " https://doi.org/10.1038/s41587-020-0439-x", + "* Software dependencies", + " https://github.com/nf-core/seqinspector/blob/master/CITATIONS.md", + "-[nf-core/seqinspector] Pipeline completed successfully-", + "WARN: Tag name collision: [group1]", + "WARN: Tag name collision: [group2]", + "WARN: Tag name collision: [lane1]", + "WARN: Tag name collision: [test]", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:BWAMEM2_MEM (Sample1_01)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:BWAMEM2_MEM (Sample23_03)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:BWAMEM2_MEM (SampleA_02)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:BWAMEM2_MEM (Undetermined_05)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:BWAMEM2_MEM (sampletest_04)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQC (Sample1_01)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQC (Sample23_03)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQC (SampleA_02)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQC (Undetermined_05)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQC (sampletest_04)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQSCREEN_FASTQSCREEN (Sample1_01)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQSCREEN_FASTQSCREEN (Sample23_03)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQSCREEN_FASTQSCREEN (SampleA_02)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQSCREEN_FASTQSCREEN (Undetermined_05)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:FASTQSCREEN_FASTQSCREEN (sampletest_04)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:MULTIQC_GLOBAL", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:MULTIQC_PER_TAG (1)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:MULTIQC_PER_TAG (2)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:MULTIQC_PER_TAG (3)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:MULTIQC_PER_TAG (4)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:QC_BAM:PICARD_COLLECTMULTIPLEMETRICS (Sample1_01)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:QC_BAM:PICARD_COLLECTMULTIPLEMETRICS (Sample23_03)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:QC_BAM:PICARD_COLLECTMULTIPLEMETRICS (SampleA_02)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:QC_BAM:PICARD_COLLECTMULTIPLEMETRICS (Undetermined_05)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:QC_BAM:PICARD_COLLECTMULTIPLEMETRICS (sampletest_04)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:RUNDIRPARSER (200624_A00834_0183_BHMTFYDRXX)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:SAMTOOLS_INDEX (Sample1_01)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:SAMTOOLS_INDEX (Sample23_03)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:SAMTOOLS_INDEX (SampleA_02)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:SAMTOOLS_INDEX (Undetermined_05)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:SAMTOOLS_INDEX (sampletest_04)", + "[NXF_HASH] Submitted process > NFCORE_SEQINSPECTOR:SEQINSPECTOR:SEQFU_STATS (seqfu)", + "[NXF_HASH] Submitted process > PREPARE_GENOME:BWAMEM2_INDEX (genome.fa)", + "[NXF_HASH] Submitted process > PREPARE_GENOME:SAMTOOLS_FAIDX (genome.fa)" + ] + ], + "timestamp": "2026-02-20T14:19:24.909594023", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "NovaSeq6000 data test sample size": { + "content": [ + 43, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "RUNDIRPARSER": { + "PyYAML": "6.0.2", + "Python": "3.13.2" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + }, + "SEQTK_SAMPLE": { + "seqtk": "1.4-r122" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/Sample1_01.bam", + "bwamem2_mem/Sample1_01.bam.bai", + "bwamem2_mem/Sample23_03.bam", + "bwamem2_mem/Sample23_03.bam.bai", + "bwamem2_mem/SampleA_02.bam", + "bwamem2_mem/SampleA_02.bam.bai", + "bwamem2_mem/Undetermined_05.bam", + "bwamem2_mem/Undetermined_05.bam.bai", + "bwamem2_mem/sampletest_04.bam", + "bwamem2_mem/sampletest_04.bam.bai", + "fastqc", + "fastqc/Sample1_01_fastqc.html", + "fastqc/Sample1_01_fastqc.zip", + "fastqc/Sample23_03_fastqc.html", + "fastqc/Sample23_03_fastqc.zip", + "fastqc/SampleA_02_fastqc.html", + "fastqc/SampleA_02_fastqc.zip", + "fastqc/Undetermined_05_fastqc.html", + "fastqc/Undetermined_05_fastqc.zip", + "fastqc/sampletest_04_fastqc.html", + "fastqc/sampletest_04_fastqc.zip", + "fastqscreen", + "fastqscreen/Sample1_01_screen.html", + "fastqscreen/Sample1_01_screen.png", + "fastqscreen/Sample1_01_screen.txt", + "fastqscreen/Sample23_03_screen.html", + "fastqscreen/Sample23_03_screen.png", + "fastqscreen/Sample23_03_screen.txt", + "fastqscreen/SampleA_02_screen.html", + "fastqscreen/SampleA_02_screen.png", + "fastqscreen/SampleA_02_screen.txt", + "fastqscreen/Undetermined_05_screen.html", + "fastqscreen/Undetermined_05_screen.png", + "fastqscreen/Undetermined_05_screen.txt", + "fastqscreen/sampletest_04_screen.html", + "fastqscreen/sampletest_04_screen.png", + "fastqscreen/sampletest_04_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/global_report/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/global_report/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/global_report/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "multiqc/group_reports", + "multiqc/group_reports/group1", + "multiqc/group_reports/group1/multiqc_data", + "multiqc/group_reports/group1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group1/multiqc_data/llms-full.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc.log", + "multiqc/group_reports/group1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_plots", + "multiqc/group_reports/group1/multiqc_plots/pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group1/multiqc_plots/png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group1/multiqc_plots/svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group1/multiqc_report.html", + "multiqc/group_reports/group2", + "multiqc/group_reports/group2/multiqc_data", + "multiqc/group_reports/group2/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group2/multiqc_data/llms-full.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc.log", + "multiqc/group_reports/group2/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group2/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group2/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_plots", + "multiqc/group_reports/group2/multiqc_plots/pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group2/multiqc_plots/png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group2/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group2/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group2/multiqc_plots/svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group2/multiqc_report.html", + "multiqc/group_reports/lane1", + "multiqc/group_reports/lane1/multiqc_data", + "multiqc/group_reports/lane1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/lane1/multiqc_data/llms-full.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc.log", + "multiqc/group_reports/lane1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/lane1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_plots", + "multiqc/group_reports/lane1/multiqc_plots/pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/lane1/multiqc_plots/png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/lane1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/lane1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/lane1/multiqc_plots/svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/lane1/multiqc_report.html", + "multiqc/group_reports/test", + "multiqc/group_reports/test/multiqc_data", + "multiqc/group_reports/test/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/test/multiqc_data/llms-full.txt", + "multiqc/group_reports/test/multiqc_data/multiqc.log", + "multiqc/group_reports/test/multiqc_data/multiqc.parquet", + "multiqc/group_reports/test/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_data.json", + "multiqc/group_reports/test/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/test/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/test/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_plots", + "multiqc/group_reports/test/multiqc_plots/pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/test/multiqc_plots/png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/test/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/test/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/test/multiqc_plots/svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/test/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/test/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/test/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "rundirparser", + "rundirparser/200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/Sample1_01_seqfu.tsv", + "seqfu_stats/Sample1_01_seqfu_mqc.txt", + "seqfu_stats/Sample23_03_seqfu.tsv", + "seqfu_stats/Sample23_03_seqfu_mqc.txt", + "seqfu_stats/SampleA_02_seqfu.tsv", + "seqfu_stats/SampleA_02_seqfu_mqc.txt", + "seqfu_stats/Undetermined_05_seqfu.tsv", + "seqfu_stats/Undetermined_05_seqfu_mqc.txt", + "seqfu_stats/sampletest_04_seqfu.tsv", + "seqfu_stats/sampletest_04_seqfu_mqc.txt", + "seqtk", + "seqtk/Sample1_01_Sample1_S1_L001_R1_001.fastq.gz", + "seqtk/Sample23_03_Sample23_S3_L001_R1_001.fastq.gz", + "seqtk/SampleA_02_SampleA_S2_L001_R1_001.fastq.gz", + "seqtk/Undetermined_05_Undetermined_S0_L001_R1_001.fastq.gz", + "seqtk/sampletest_04_sampletest_S4_L001_R1_001.fastq.gz" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "Sample1_01_screen.png:md5,57b1664bc6c8e82cc0ce14802ad0dc0f", + "Sample1_01_screen.txt:md5,14d10b0c3b63e18f223a0dc589abee36", + "Sample23_03_screen.png:md5,41b4f556865a2f55a93f63e520812fad", + "Sample23_03_screen.txt:md5,14d10b0c3b63e18f223a0dc589abee36", + "SampleA_02_screen.png:md5,2f808877be53aa1433c1856bbf50feaf", + "SampleA_02_screen.txt:md5,14d10b0c3b63e18f223a0dc589abee36", + "Undetermined_05_screen.png:md5,12707698b2765c68566ccf5ac25479f5", + "Undetermined_05_screen.txt:md5,14d10b0c3b63e18f223a0dc589abee36", + "sampletest_04_screen.png:md5,a88937eb54785ee921549d3c894df45d", + "sampletest_04_screen.txt:md5,14d10b0c3b63e18f223a0dc589abee36", + "fastq_screen_plot.txt:md5,a9fac509f9eb26a068afbad8268544f3", + "fastqc-status-check-heatmap.txt:md5,2d47d1eefb8a17f6e9148e08e6764438", + "fastqc_overrepresented_sequences_plot.txt:md5,0319c932634ad92c3fcb695efc1e3842", + "fastqc_per_base_n_content_plot.txt:md5,69d2d50e3947cac30beaef2b5f418631", + "fastqc_per_base_sequence_quality_plot.txt:md5,a2812a2ba7918fedbecca506fbbeb0ff", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,040e1375843c2eeabd2818d605192a98", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,73f8b87eeed241bd7b96d98990f6972d", + "fastqc_per_sequence_quality_scores_plot.txt:md5,f74c1fcdb82a26f0c8592b9dc4016b98", + "fastqc_sequence_counts_plot.txt:md5,ba8082207f7c927301754a997b4e220f", + "fastqc_sequence_duplication_levels_plot.txt:md5,5ec69b2a7fc7aff792ad62a840006740", + "fastqc_sequence_length_distribution_plot.txt:md5,b0e3de7190755ce83680ac0f1357cfce", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,5af2d6080364385c05d50f9ffa7996e6", + "multiqc_fastqc.txt:md5,a9a9fc06badaade2d09486d2adaac1ce", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,27ac8815e031784c1928f8ff7d2e8687", + "multiqc_picard_baseContent.txt:md5,b8f3650cf18daa57ae2b67c5b89f5b8b", + "multiqc_picard_quality_by_cycle.txt:md5,ea8e2268c7b00c60221ff0166abcb8e6", + "multiqc_picard_quality_score_distribution.txt:md5,2d6a03019d78184e380a667425edba69", + "multiqc_seqfu_mqc.txt:md5,18dd2407d4a1791646785123028f69b5", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,ea8e2268c7b00c60221ff0166abcb8e6", + "picard_QualityScoreDistribution_histogram.txt:md5,2d6a03019d78184e380a667425edba69", + "picard_alignment_readlength_plot.txt:md5,b707405383ab30c7e2e1f035e5e3c26f", + "picard_alignment_summary.txt:md5,4048e43a47004998fc37d653b6fe4c38", + "picard_base_distribution_by_cycle__Adenine.txt:md5,fd50b4879f641e3492e60049c56a4044", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,2cd88662f52791e80606dfcfd72cd14f", + "picard_base_distribution_by_cycle__Guanine.txt:md5,7cf95bddfb6fd6a8f6b97bcc4259b27b", + "picard_base_distribution_by_cycle__Thymine.txt:md5,3b573361b3c6a2e6bbc9353b8c7e479f", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,f8d6bad265e19cb0569556c274cebce8", + "picard_quality_by_cycle.txt:md5,acf02b0d02bd558473b443e8b62d866c", + "picard_quality_score_distribution.txt:md5,e8f0b4ea7a5a2bb7b15652558ad3fa7c", + "fastq_screen_plot.txt:md5,73a2f1b72c45aecd6196166742ca79e2", + "fastqc-status-check-heatmap.txt:md5,6ecc7673865cff5b867a6e07f922aab6", + "fastqc_overrepresented_sequences_plot.txt:md5,bf671607cdc601346f4ec01236aa096a", + "fastqc_per_base_n_content_plot.txt:md5,fe0d8972d8a323138b36b310e22f2393", + "fastqc_per_base_sequence_quality_plot.txt:md5,f6e093207a1bb92a9ff224509988f42c", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,c7d95253aa3046b55f345e4950537e30", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c9dfe418314f68711cdec2d8c2f0f62d", + "fastqc_per_sequence_quality_scores_plot.txt:md5,9c6cc7ae6ec0f8fca21482d9910b10cf", + "fastqc_sequence_counts_plot.txt:md5,41e017e29a6c78e683816b59b24082d7", + "fastqc_sequence_duplication_levels_plot.txt:md5,818f13a5372bad79e54cd984758096c5", + "fastqc_sequence_length_distribution_plot.txt:md5,891980cbbd9f0ce86072e49eaa19dbb2", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,14d33a39b52346515edfd7e8542e5c7b", + "multiqc_fastqc.txt:md5,e87c99cac0c4956521d9c660183722bb", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,4caf3948c2fd99d795c1f6791221a02d", + "multiqc_picard_baseContent.txt:md5,fc5eec99f1406d05416315bb83c22efa", + "multiqc_picard_quality_by_cycle.txt:md5,0a23446d732f70734fbb75d2d8c4f8c5", + "multiqc_picard_quality_score_distribution.txt:md5,fff3e05748b15f8e70603f2de052bc1e", + "multiqc_seqfu_mqc.txt:md5,6cdb863a3686fbb772aae5a66925ff23", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,0a23446d732f70734fbb75d2d8c4f8c5", + "picard_QualityScoreDistribution_histogram.txt:md5,fff3e05748b15f8e70603f2de052bc1e", + "picard_alignment_readlength_plot.txt:md5,c52d9bf78f5ad1336401948c9fe53a43", + "picard_alignment_summary.txt:md5,83605c81384aa07f5db79b003d62acd3", + "picard_base_distribution_by_cycle__Adenine.txt:md5,e2f21df881ca648de2797c6fbfd185bf", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,68c85f6b7cd47fe402227587b7cd6a42", + "picard_base_distribution_by_cycle__Guanine.txt:md5,e5014150074dd0eececa973999997299", + "picard_base_distribution_by_cycle__Thymine.txt:md5,f69e3acb76a974d44e72a1b51f57fcc5", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,9173f74d1a3513a47323957580fc778c", + "picard_quality_by_cycle.txt:md5,2528c2b37f19247f85f203b2ec1052cd", + "picard_quality_score_distribution.txt:md5,97065bd92fdc8cf9f7af101db69e0f94", + "fastq_screen_plot.txt:md5,55e918a24d363f5b82c7fe1993508ac0", + "fastqc-status-check-heatmap.txt:md5,61857d2c45cf0c080348047aa34e7525", + "fastqc_overrepresented_sequences_plot.txt:md5,0d0ed4af9d049d2d4d364c2e89666c49", + "fastqc_per_base_n_content_plot.txt:md5,5c0c6304c88c1eab06fe6d0272887eeb", + "fastqc_per_base_sequence_quality_plot.txt:md5,962e2631be7459b8a4e6b94a76ca1ef9", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,667e8260356e2a95e619f596ec923408", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,3d3d528612f89034b5777384415869e2", + "fastqc_per_sequence_quality_scores_plot.txt:md5,ca7ab1c4613c58c65a59197a701f2cf6", + "fastqc_sequence_counts_plot.txt:md5,f9475cbbc8ddfbb7685d4f8843c58d2b", + "fastqc_sequence_duplication_levels_plot.txt:md5,d5b06e963d0eb6f8013aa3070551305d", + "fastqc_sequence_length_distribution_plot.txt:md5,4101ced76bfe16e3baec15f7c8afaea7", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,179b14566daf82ccd294f54443cf9b5e", + "multiqc_fastqc.txt:md5,8b808265a3cfe52846f7d6a0c9624beb", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,097425295aec6d2235b3ce2efdeadc2f", + "multiqc_picard_baseContent.txt:md5,e866142c080aadf520f3533344b078f7", + "multiqc_picard_quality_by_cycle.txt:md5,f90049902134e9d526de1e9e7c9b630a", + "multiqc_picard_quality_score_distribution.txt:md5,c5cd2b47144a9bdc8e4ec738bb7cf2f1", + "multiqc_seqfu_mqc.txt:md5,f821357507fda2d4cfd9299f52fa7dc1", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,f90049902134e9d526de1e9e7c9b630a", + "picard_QualityScoreDistribution_histogram.txt:md5,c5cd2b47144a9bdc8e4ec738bb7cf2f1", + "picard_alignment_readlength_plot.txt:md5,1937a10b6a2bfd560f33d4c34489b245", + "picard_alignment_summary.txt:md5,3551d1f9f22584702b3f6291791db496", + "picard_base_distribution_by_cycle__Adenine.txt:md5,3c7f4f7846559a6ef01104665ea4c90e", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,53f75b0d1b72bc757e1839bf026576fc", + "picard_base_distribution_by_cycle__Guanine.txt:md5,1bf3a0c2124677a7720adc30e4a31420", + "picard_base_distribution_by_cycle__Thymine.txt:md5,61b3696131512cf12c186410083f718d", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,557bbb851ae20658c4d67039e75d6586", + "picard_quality_by_cycle.txt:md5,837fbc9e8945a2cbe50ef7192d032cbe", + "picard_quality_score_distribution.txt:md5,402adc8ad463da8cbe6eb91d626df014", + "fastq_screen_plot.txt:md5,ac87dfeee6febe70fb35fd7a4fd5d167", + "fastqc-status-check-heatmap.txt:md5,c762f9c764ff99a610ff1d20f2ed6ac9", + "fastqc_overrepresented_sequences_plot.txt:md5,cb95847fcb901c48de55da399faf47d9", + "fastqc_per_base_n_content_plot.txt:md5,ba96d6c813803230a4874a6f8baddcf6", + "fastqc_per_base_sequence_quality_plot.txt:md5,ac0b1eb2e406e6b5a5eb68918591c76d", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,2012423964c65c0fefc8481b301609ed", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,500eefc61a59e5babbc72647b6638132", + "fastqc_per_sequence_quality_scores_plot.txt:md5,a1e4db231cd2b3934ecaebc4814cc742", + "fastqc_sequence_counts_plot.txt:md5,dedc339fbf428341aaacc1bfe04ba016", + "fastqc_sequence_duplication_levels_plot.txt:md5,6f0891980501631a27a7375d2ec7a30d", + "fastqc_sequence_length_distribution_plot.txt:md5,b5bf616360fc7df8fb94b2a4928660cb", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,a84c2882a4ab93afd9599c7aebf3e897", + "multiqc_fastqc.txt:md5,b8f6f4ed32e60ff57c64bb0ba029adba", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,a830b94cf4b094f6914927a93b4911f3", + "multiqc_picard_baseContent.txt:md5,c4b2e49d32ab00ffd166fb2343362300", + "multiqc_picard_quality_by_cycle.txt:md5,86934e1b1aee498e3434475f54e49c18", + "multiqc_picard_quality_score_distribution.txt:md5,a2f554d6121a1be2623fe67edb69b3db", + "multiqc_seqfu_mqc.txt:md5,8cced36d66ca9d25d60c006e734aa7e9", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,86934e1b1aee498e3434475f54e49c18", + "picard_QualityScoreDistribution_histogram.txt:md5,a2f554d6121a1be2623fe67edb69b3db", + "picard_alignment_readlength_plot.txt:md5,71d9fa2d8089ebff7cb842682ebeef30", + "picard_alignment_summary.txt:md5,3f0c630ee33504eb02d10b6c7e0ed9aa", + "picard_base_distribution_by_cycle__Adenine.txt:md5,7add6230e46c785f5db9e500a4a31681", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,0753e1d36ef7a9e1e8f98ba6cb71d143", + "picard_base_distribution_by_cycle__Guanine.txt:md5,df3c54e527505675dde1607eb5ca3008", + "picard_base_distribution_by_cycle__Thymine.txt:md5,fc1ef95b11e1aab29d4c3b502fa53056", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,6e9bc9ea875857b0ad9d59356a79bc71", + "picard_quality_by_cycle.txt:md5,36f4d38092d9df3d4e1c03c1912bd4f9", + "picard_quality_score_distribution.txt:md5,232a210a13ec476365851c65affb13d4", + "fastq_screen_plot.txt:md5,2a08e457eac00ed7b03a97cb2978ea27", + "fastqc-status-check-heatmap.txt:md5,56b426cd5c030288639533fce7c95ab1", + "fastqc_overrepresented_sequences_plot.txt:md5,a74b1c22b0b8c1c45592f6d3d92a7b00", + "fastqc_per_base_n_content_plot.txt:md5,bf2631bc46bc290be329984785da6c3a", + "fastqc_per_base_sequence_quality_plot.txt:md5,05e5a46f9901e1a1aea089ac760d03bd", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,ae01bdfe32a1adbde8bc90b5cfad3745", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,f7980b8f02897f644b07d15554d83998", + "fastqc_per_sequence_quality_scores_plot.txt:md5,a2c43859317f03af53a7e2c904a4ce21", + "fastqc_sequence_counts_plot.txt:md5,c297106aef961a75134e8174a9fade97", + "fastqc_sequence_duplication_levels_plot.txt:md5,3f319b383f827362a515ebb9eee9ddcf", + "fastqc_sequence_length_distribution_plot.txt:md5,a0b2aff6415e2365c8f1a28d300b0fbc", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,db504d3eec12c5431e2b66d4880beb66", + "multiqc_fastqc.txt:md5,284597d876abc5a1242d8efb2d69f0d5", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,b9175f19bb7881a189d0f061089ee090", + "multiqc_picard_baseContent.txt:md5,fdfa6dc50f83f3966bc33caf796dddda", + "multiqc_picard_quality_by_cycle.txt:md5,28ba1f3017af64453cd191cf6f895e17", + "multiqc_picard_quality_score_distribution.txt:md5,60c5f167421d5b44c3b1ed810b5a68cd", + "multiqc_seqfu_mqc.txt:md5,ff4ce1c88f39ed24a88bae0a861f75c8", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,28ba1f3017af64453cd191cf6f895e17", + "picard_QualityScoreDistribution_histogram.txt:md5,60c5f167421d5b44c3b1ed810b5a68cd", + "picard_alignment_readlength_plot.txt:md5,2bc1a0718665c2038c82c662744efd32", + "picard_alignment_summary.txt:md5,036000570a5d0e3a5fb695f64170d33d", + "picard_base_distribution_by_cycle__Adenine.txt:md5,800b43f6b0261fb7fa3830deed4b7b7f", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,8f0148e5b112d7e65512f46b5c444e1b", + "picard_base_distribution_by_cycle__Guanine.txt:md5,ffd09932248cef230e27d55d548b87f8", + "picard_base_distribution_by_cycle__Thymine.txt:md5,b08bf6e3c5cfc18251c6c9546e82a616", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,6c30458ebd6caa1a2867bc999bafedd5", + "picard_quality_by_cycle.txt:md5,4103c8c916ece5f57dbeffc477025d94", + "picard_quality_score_distribution.txt:md5,0a04dad54cadfd660c935af9a0658e0c", + "200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml:md5,29e05fed18bca0e9a857c992b6d59a40", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "Sample1_01_seqfu.tsv:md5,ac174f48d928c6ddfd43c88af0caa8b6", + "Sample1_01_seqfu_mqc.txt:md5,24d99524ccd0e6c6255a69d68a871c7a", + "Sample23_03_seqfu.tsv:md5,6fac5d3dbce3f3bee72341fe99a399dc", + "Sample23_03_seqfu_mqc.txt:md5,4d4f280911a08bb6b753142980178027", + "SampleA_02_seqfu.tsv:md5,aec811f267bb2a0ef066a7abb59d2775", + "SampleA_02_seqfu_mqc.txt:md5,a819409a5cb64e20c3e54ec5ada4aa27", + "Undetermined_05_seqfu.tsv:md5,3a42c5c66a0a118f1a6f6f6e560b0e7e", + "Undetermined_05_seqfu_mqc.txt:md5,bd8be908362c5cb08a72f8ae7ab41b0d", + "sampletest_04_seqfu.tsv:md5,a5bea0b9c6015dd1a201ffd433e9b377", + "sampletest_04_seqfu_mqc.txt:md5,2180961655bbc8a12f0152d6a4b803a2", + "Sample1_01_Sample1_S1_L001_R1_001.fastq.gz:md5,3ccd132ff32399706842b0f1d00f477e", + "Sample23_03_Sample23_S3_L001_R1_001.fastq.gz:md5,3802f03450693b42531fdf5b0b542c2f", + "SampleA_02_SampleA_S2_L001_R1_001.fastq.gz:md5,f99d5407aac64cb36451c6f0a1db5ade", + "Undetermined_05_Undetermined_S0_L001_R1_001.fastq.gz:md5,104dbbef386db0eef3e02c586feb01a1", + "sampletest_04_sampletest_S4_L001_R1_001.fastq.gz:md5,30aa24a51e27e24390ac8b90158df8f2" + ], + [ + "Sample1_01.bam:md5,fc83fc447ae236a94236f4993c405bed", + "Sample23_03.bam:md5,ee9f99e6c368e86af5516fd4ff2189d1", + "SampleA_02.bam:md5,3f378f47f7007916bc28921090c4e5e6", + "Undetermined_05.bam:md5,2841f21f7f70634f21505ac803ff8221", + "sampletest_04.bam:md5,3d1cd701ad22dacc6b194ea16582d647" + ], + [ + "WARN: Tag name collision: [group1]", + "WARN: Tag name collision: [group2]", + "WARN: Tag name collision: [lane1]", + "WARN: Tag name collision: [test]" + ] + ], + "timestamp": "2026-02-19T16:09:22.487870402", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "NovaSeq6000 data test relative sample size": { + "content": [ + 43, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "RUNDIRPARSER": { + "PyYAML": "6.0.2", + "Python": "3.13.2" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + }, + "SEQTK_SAMPLE": { + "seqtk": "1.4-r122" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/Sample1_01.bam", + "bwamem2_mem/Sample1_01.bam.bai", + "bwamem2_mem/Sample23_03.bam", + "bwamem2_mem/Sample23_03.bam.bai", + "bwamem2_mem/SampleA_02.bam", + "bwamem2_mem/SampleA_02.bam.bai", + "bwamem2_mem/Undetermined_05.bam", + "bwamem2_mem/Undetermined_05.bam.bai", + "bwamem2_mem/sampletest_04.bam", + "bwamem2_mem/sampletest_04.bam.bai", + "fastqc", + "fastqc/Sample1_01_fastqc.html", + "fastqc/Sample1_01_fastqc.zip", + "fastqc/Sample23_03_fastqc.html", + "fastqc/Sample23_03_fastqc.zip", + "fastqc/SampleA_02_fastqc.html", + "fastqc/SampleA_02_fastqc.zip", + "fastqc/Undetermined_05_fastqc.html", + "fastqc/Undetermined_05_fastqc.zip", + "fastqc/sampletest_04_fastqc.html", + "fastqc/sampletest_04_fastqc.zip", + "fastqscreen", + "fastqscreen/Sample1_01_screen.html", + "fastqscreen/Sample1_01_screen.png", + "fastqscreen/Sample1_01_screen.txt", + "fastqscreen/Sample23_03_screen.html", + "fastqscreen/Sample23_03_screen.png", + "fastqscreen/Sample23_03_screen.txt", + "fastqscreen/SampleA_02_screen.html", + "fastqscreen/SampleA_02_screen.png", + "fastqscreen/SampleA_02_screen.txt", + "fastqscreen/Undetermined_05_screen.html", + "fastqscreen/Undetermined_05_screen.png", + "fastqscreen/Undetermined_05_screen.txt", + "fastqscreen/sampletest_04_screen.html", + "fastqscreen/sampletest_04_screen.png", + "fastqscreen/sampletest_04_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/global_report/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/global_report/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/global_report/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "multiqc/group_reports", + "multiqc/group_reports/group1", + "multiqc/group_reports/group1/multiqc_data", + "multiqc/group_reports/group1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group1/multiqc_data/llms-full.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc.log", + "multiqc/group_reports/group1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_plots", + "multiqc/group_reports/group1/multiqc_plots/pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group1/multiqc_plots/png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group1/multiqc_plots/svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group1/multiqc_report.html", + "multiqc/group_reports/group2", + "multiqc/group_reports/group2/multiqc_data", + "multiqc/group_reports/group2/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group2/multiqc_data/llms-full.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc.log", + "multiqc/group_reports/group2/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group2/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group2/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_plots", + "multiqc/group_reports/group2/multiqc_plots/pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group2/multiqc_plots/png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group2/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group2/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group2/multiqc_plots/svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group2/multiqc_report.html", + "multiqc/group_reports/lane1", + "multiqc/group_reports/lane1/multiqc_data", + "multiqc/group_reports/lane1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/lane1/multiqc_data/llms-full.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc.log", + "multiqc/group_reports/lane1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/lane1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_plots", + "multiqc/group_reports/lane1/multiqc_plots/pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/lane1/multiqc_plots/png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/lane1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/lane1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/lane1/multiqc_plots/svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/lane1/multiqc_report.html", + "multiqc/group_reports/test", + "multiqc/group_reports/test/multiqc_data", + "multiqc/group_reports/test/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/test/multiqc_data/llms-full.txt", + "multiqc/group_reports/test/multiqc_data/multiqc.log", + "multiqc/group_reports/test/multiqc_data/multiqc.parquet", + "multiqc/group_reports/test/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_data.json", + "multiqc/group_reports/test/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/test/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/test/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_plots", + "multiqc/group_reports/test/multiqc_plots/pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/test/multiqc_plots/png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/test/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/test/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/test/multiqc_plots/svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/test/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/test/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/test/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "rundirparser", + "rundirparser/200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/Sample1_01_seqfu.tsv", + "seqfu_stats/Sample1_01_seqfu_mqc.txt", + "seqfu_stats/Sample23_03_seqfu.tsv", + "seqfu_stats/Sample23_03_seqfu_mqc.txt", + "seqfu_stats/SampleA_02_seqfu.tsv", + "seqfu_stats/SampleA_02_seqfu_mqc.txt", + "seqfu_stats/Undetermined_05_seqfu.tsv", + "seqfu_stats/Undetermined_05_seqfu_mqc.txt", + "seqfu_stats/sampletest_04_seqfu.tsv", + "seqfu_stats/sampletest_04_seqfu_mqc.txt", + "seqtk", + "seqtk/Sample1_01_Sample1_S1_L001_R1_001.fastq.gz", + "seqtk/Sample23_03_Sample23_S3_L001_R1_001.fastq.gz", + "seqtk/SampleA_02_SampleA_S2_L001_R1_001.fastq.gz", + "seqtk/Undetermined_05_Undetermined_S0_L001_R1_001.fastq.gz", + "seqtk/sampletest_04_sampletest_S4_L001_R1_001.fastq.gz" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "Sample1_01_screen.png:md5,57b1664bc6c8e82cc0ce14802ad0dc0f", + "Sample1_01_screen.txt:md5,20926a4045b2ecf4bc76007047cc645a", + "Sample23_03_screen.png:md5,41b4f556865a2f55a93f63e520812fad", + "Sample23_03_screen.txt:md5,20926a4045b2ecf4bc76007047cc645a", + "SampleA_02_screen.png:md5,2f808877be53aa1433c1856bbf50feaf", + "SampleA_02_screen.txt:md5,20926a4045b2ecf4bc76007047cc645a", + "Undetermined_05_screen.png:md5,12707698b2765c68566ccf5ac25479f5", + "Undetermined_05_screen.txt:md5,20926a4045b2ecf4bc76007047cc645a", + "sampletest_04_screen.png:md5,a88937eb54785ee921549d3c894df45d", + "sampletest_04_screen.txt:md5,20926a4045b2ecf4bc76007047cc645a", + "fastq_screen_plot.txt:md5,6e74f2231fd3e0ac72e1196d02fe5e90", + "fastqc-status-check-heatmap.txt:md5,2d47d1eefb8a17f6e9148e08e6764438", + "fastqc_overrepresented_sequences_plot.txt:md5,58f05a5aec002a72d7f6828378b78a9c", + "fastqc_per_base_n_content_plot.txt:md5,87299c06b90293903f4030c4e47a653d", + "fastqc_per_base_sequence_quality_plot.txt:md5,c11ceffc34f32026754ad9ec14897246", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,b8a157fce78777d3787bc4023bc95ad5", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b78adce4744b3c5f9dd10caf5c3c16b3", + "fastqc_per_sequence_quality_scores_plot.txt:md5,d339ebd1df4fef62cf01c18ccfadc8d4", + "fastqc_sequence_counts_plot.txt:md5,f92c2f7d8a08af4534273a473f909629", + "fastqc_sequence_duplication_levels_plot.txt:md5,e605b0869e968ab483324c3e72dcc210", + "fastqc_sequence_length_distribution_plot.txt:md5,024386d10341fd18eb4e8bd55337777a", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,06da849fd9e7941fec86bb1a4068a020", + "multiqc_fastqc.txt:md5,64a5bf2de1edd567eacf4ad490bdbb20", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,963af5ca1c83a87e9eb8396c60ca0185", + "multiqc_picard_baseContent.txt:md5,7ed6695c5554f6f1551f2567f308ea01", + "multiqc_picard_quality_by_cycle.txt:md5,8299530bdcc6341bf87d8b3a344f1b35", + "multiqc_picard_quality_score_distribution.txt:md5,c7978efc924f1de12dd3c3a8a5182cac", + "multiqc_seqfu_mqc.txt:md5,18dd2407d4a1791646785123028f69b5", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,8299530bdcc6341bf87d8b3a344f1b35", + "picard_QualityScoreDistribution_histogram.txt:md5,c7978efc924f1de12dd3c3a8a5182cac", + "picard_alignment_readlength_plot.txt:md5,9e70861ee11a1842de2d19adc2965c6e", + "picard_alignment_summary.txt:md5,46803cf45344b63078de59b4ad617005", + "picard_base_distribution_by_cycle__Adenine.txt:md5,da954ca1a4904484c5561b5559780670", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,ff364d12f449a7fc7ec6e4f747376235", + "picard_base_distribution_by_cycle__Guanine.txt:md5,074489f5906aef06a5067abc3fb75776", + "picard_base_distribution_by_cycle__Thymine.txt:md5,e64e5c05cc4488dc316502b8ecd34c05", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,6b667bfe051130fe8fa3f92cab174b64", + "picard_quality_by_cycle.txt:md5,22a848260595b3c2eb8aaea9a5b7de16", + "picard_quality_score_distribution.txt:md5,a5704f2105a9aa9c719035bf1711307a", + "fastq_screen_plot.txt:md5,e2b256c1041a352c0d24186af7d04a02", + "fastqc-status-check-heatmap.txt:md5,6ecc7673865cff5b867a6e07f922aab6", + "fastqc_overrepresented_sequences_plot.txt:md5,b8049dce93ce38332c50f0b5e10804f3", + "fastqc_per_base_n_content_plot.txt:md5,3f90107f654e11e85265fefc5ea7bfa3", + "fastqc_per_base_sequence_quality_plot.txt:md5,95e20e90d3009301f5938b3400c75787", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,ed4e531f1129963b0a4d75e3cff31019", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,97caa54b010c1938d5ad91ff993cad49", + "fastqc_per_sequence_quality_scores_plot.txt:md5,824305a7c50b0c27b47bdf627cedf8c4", + "fastqc_sequence_counts_plot.txt:md5,43444c6e5ee34c92b0e7cb4d903a07f0", + "fastqc_sequence_duplication_levels_plot.txt:md5,818f13a5372bad79e54cd984758096c5", + "fastqc_sequence_length_distribution_plot.txt:md5,9c4f3aeac31f2ccca52468fb20cb794e", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,438e559fc0ce65fc5db989a50a769d6c", + "multiqc_fastqc.txt:md5,85b56748619f3553daecdd9f9acc7b10", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,a8164399dfbc104ec98f0590d506f557", + "multiqc_picard_baseContent.txt:md5,2f35f7d55e96e55a97bab9a9509072f8", + "multiqc_picard_quality_by_cycle.txt:md5,41de636e329213c91de9811bcfacd1e1", + "multiqc_picard_quality_score_distribution.txt:md5,502b9469dea25bc742ae2016c2f62417", + "multiqc_seqfu_mqc.txt:md5,6cdb863a3686fbb772aae5a66925ff23", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,41de636e329213c91de9811bcfacd1e1", + "picard_QualityScoreDistribution_histogram.txt:md5,502b9469dea25bc742ae2016c2f62417", + "picard_alignment_readlength_plot.txt:md5,8f31687d3b34bc7ea4ff5fd24f39c935", + "picard_alignment_summary.txt:md5,e576a6a6bf7bbe9ff1e86f5198bf6751", + "picard_base_distribution_by_cycle__Adenine.txt:md5,7bf9ef30e9e9de4a061190089b122b85", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,30c7748d6128a8263934dec183372553", + "picard_base_distribution_by_cycle__Guanine.txt:md5,9ad713d707d22ce4232713efe4e2fbc2", + "picard_base_distribution_by_cycle__Thymine.txt:md5,4d62d177c9d05fa955042bc976940870", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,19e2ac5ff90d4544555cf5361841513e", + "picard_quality_by_cycle.txt:md5,07609521a4b40b9b9aa5fbc911713545", + "picard_quality_score_distribution.txt:md5,b811a5ed7a63dba9b9514a27c8ac1ee1", + "fastq_screen_plot.txt:md5,4767010b30457fc1f2fb78d7ca727bee", + "fastqc-status-check-heatmap.txt:md5,61857d2c45cf0c080348047aa34e7525", + "fastqc_overrepresented_sequences_plot.txt:md5,f85a8412d1b545dd1c1c86eb5053fb98", + "fastqc_per_base_n_content_plot.txt:md5,46bdea04a02e1458de0bc6b578154d55", + "fastqc_per_base_sequence_quality_plot.txt:md5,69919505d6b604c691d74f1ed42277a6", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,d0d632d38536b19bc97f5ac62b444863", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,47304e11e4c0fd1c8c8042df11dca5db", + "fastqc_per_sequence_quality_scores_plot.txt:md5,0ff9eb3250403c1f9a9df4b6b82a22aa", + "fastqc_sequence_counts_plot.txt:md5,d5cfb1e359dba2b44d2b7fa472bc2fef", + "fastqc_sequence_duplication_levels_plot.txt:md5,10ae6381263604eab5230d7396d9a321", + "fastqc_sequence_length_distribution_plot.txt:md5,d2f42e0ede5e36df74217d1b23365d99", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,fdf61b67296d4629c8efe9d1fb3d3ec0", + "multiqc_fastqc.txt:md5,bece629be078da2fb5dfe3e2b27be025", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,21a9dbbdd953f7ebb6c033ba306e1a01", + "multiqc_picard_baseContent.txt:md5,9b901100401ce73e796855de065df5af", + "multiqc_picard_quality_by_cycle.txt:md5,016dbbf3b0be86e17414a77c8e7c0381", + "multiqc_picard_quality_score_distribution.txt:md5,baf6e77f157dcc1996f3aa8db9da5b56", + "multiqc_seqfu_mqc.txt:md5,f821357507fda2d4cfd9299f52fa7dc1", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,016dbbf3b0be86e17414a77c8e7c0381", + "picard_QualityScoreDistribution_histogram.txt:md5,baf6e77f157dcc1996f3aa8db9da5b56", + "picard_alignment_readlength_plot.txt:md5,ee5232cd541865ddde9fc932d1130024", + "picard_alignment_summary.txt:md5,31198f074051b795b593abebb83d37fc", + "picard_base_distribution_by_cycle__Adenine.txt:md5,9dc845e9ec5f5fb741910c264040cc20", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,2f0b3650a527e493d5453f2e553aa672", + "picard_base_distribution_by_cycle__Guanine.txt:md5,163cccc75b8cdd52a944ae6aeb310148", + "picard_base_distribution_by_cycle__Thymine.txt:md5,9e8533969c84fff8f21b0a59745b344d", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,9c6f5a8fc79aff21f2bc8275e1970478", + "picard_quality_by_cycle.txt:md5,a91bd8ec5591b7691be3413de26a76f9", + "picard_quality_score_distribution.txt:md5,b3936076ba1dec38ebfed4b03683e25d", + "fastq_screen_plot.txt:md5,54da156526832b95f4ebcb8544a87f77", + "fastqc-status-check-heatmap.txt:md5,c762f9c764ff99a610ff1d20f2ed6ac9", + "fastqc_overrepresented_sequences_plot.txt:md5,c304e2ee82e3fd480a9261ac768f98b3", + "fastqc_per_base_n_content_plot.txt:md5,c91a58eb10a898afb7b46a7dd8e72e8e", + "fastqc_per_base_sequence_quality_plot.txt:md5,3930d07c38244edfeaa3ef909e1d4ac6", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,939f27bfae0d13cbbc85ff87e1b3d0ac", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,0d2925e3cbbb6de2c7ec034c26f41066", + "fastqc_per_sequence_quality_scores_plot.txt:md5,4569ebf563c3fdb3b7bef648f72f3006", + "fastqc_sequence_counts_plot.txt:md5,3b8b8a75232eccb934025ec75a590c6f", + "fastqc_sequence_duplication_levels_plot.txt:md5,a25fb5ca8e2082719e7129975e7f8b10", + "fastqc_sequence_length_distribution_plot.txt:md5,97c4a389f0e3622c699809ef7aab1b6e", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,43cd2cbe48a7e1b8243ee157ae5e5a51", + "multiqc_fastqc.txt:md5,82b45154efad92fa6566283f39459d23", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,16327d839dfc8bf38c43945fe6b6b1df", + "multiqc_picard_baseContent.txt:md5,41dee821ab6f6aee05ded4bf41accd56", + "multiqc_picard_quality_by_cycle.txt:md5,0af7938734a17202d944927b64904da0", + "multiqc_picard_quality_score_distribution.txt:md5,2864d590f88cb98bd0c8446f1b023704", + "multiqc_seqfu_mqc.txt:md5,8cced36d66ca9d25d60c006e734aa7e9", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,0af7938734a17202d944927b64904da0", + "picard_QualityScoreDistribution_histogram.txt:md5,2864d590f88cb98bd0c8446f1b023704", + "picard_alignment_readlength_plot.txt:md5,d2a5ee7fc76fc836dd81f12954f01887", + "picard_alignment_summary.txt:md5,cd27671e33d03c39be8fdd1e2b4e0246", + "picard_base_distribution_by_cycle__Adenine.txt:md5,282d6515ae71162568393cb28407d690", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,8693a806def68f65092dfa13542ab364", + "picard_base_distribution_by_cycle__Guanine.txt:md5,05f621a1fbbf2164522bc7cbe8790120", + "picard_base_distribution_by_cycle__Thymine.txt:md5,bf1889ea4e03ad99640dc408dde567ac", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,72f6425cec7b1e9851b252c43764d716", + "picard_quality_by_cycle.txt:md5,2ccee1b2cead246a4e784b15eac28361", + "picard_quality_score_distribution.txt:md5,9b79b5de2293427df2add8cffe505f06", + "fastq_screen_plot.txt:md5,70fc7c0be8d24dffcff69dd216345a07", + "fastqc-status-check-heatmap.txt:md5,56b426cd5c030288639533fce7c95ab1", + "fastqc_overrepresented_sequences_plot.txt:md5,04fc7769d72ff4af8bf5679944a4a875", + "fastqc_per_base_n_content_plot.txt:md5,e09d3616e0bb7a50f851736de22cdb85", + "fastqc_per_base_sequence_quality_plot.txt:md5,2138b44091c3e1d237917e77b320e157", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,f44cfb45f4a6b980008e9c758ab0a5f4", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,c8b50edb245a50ab0f471d723ecd3f0e", + "fastqc_per_sequence_quality_scores_plot.txt:md5,5dbc12d86b28d93a2c9ce8067674c849", + "fastqc_sequence_counts_plot.txt:md5,0fac11b09160c9b8cd61721fafaab7a1", + "fastqc_sequence_duplication_levels_plot.txt:md5,e2426a601d1706cd4e4ece85632d179a", + "fastqc_sequence_length_distribution_plot.txt:md5,59468fb5e62b89649b66a5410be3ce25", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,94e64655d6d0be2fb2d597f33e555615", + "multiqc_fastqc.txt:md5,6b3715a6c7f8c2d0657e7fd6e971a421", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,edacee934f1117cde82eaf7c54558c6d", + "multiqc_picard_baseContent.txt:md5,1b238999a80cf0a2d3777bdf6874afcb", + "multiqc_picard_quality_by_cycle.txt:md5,ec4ad84c72e43ce0b4f700da56f6de8c", + "multiqc_picard_quality_score_distribution.txt:md5,c976a39d5e24cc258fea812e43d2c512", + "multiqc_seqfu_mqc.txt:md5,ff4ce1c88f39ed24a88bae0a861f75c8", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,ec4ad84c72e43ce0b4f700da56f6de8c", + "picard_QualityScoreDistribution_histogram.txt:md5,c976a39d5e24cc258fea812e43d2c512", + "picard_alignment_readlength_plot.txt:md5,afcd9e8705eda64d2ea69af9be869329", + "picard_alignment_summary.txt:md5,dc2f8e760319c0c830d94edf5d38c38b", + "picard_base_distribution_by_cycle__Adenine.txt:md5,4c7f4d29723c6150e9b097fa7504b36f", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,2f7d64788fb4f41a785893d7f296ca63", + "picard_base_distribution_by_cycle__Guanine.txt:md5,149c92b3d1c3fc803efffc65582bd8b8", + "picard_base_distribution_by_cycle__Thymine.txt:md5,a09370dc408e9e5c1da16b2319a054f1", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,67acf7df200cb6b206d34b969eeccc08", + "picard_quality_by_cycle.txt:md5,88056bf0ffc3f2296b57217133244b20", + "picard_quality_score_distribution.txt:md5,65f7be51589f047c63fe05151a8fbde4", + "200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml:md5,29e05fed18bca0e9a857c992b6d59a40", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "Sample1_01_seqfu.tsv:md5,ac174f48d928c6ddfd43c88af0caa8b6", + "Sample1_01_seqfu_mqc.txt:md5,24d99524ccd0e6c6255a69d68a871c7a", + "Sample23_03_seqfu.tsv:md5,6fac5d3dbce3f3bee72341fe99a399dc", + "Sample23_03_seqfu_mqc.txt:md5,4d4f280911a08bb6b753142980178027", + "SampleA_02_seqfu.tsv:md5,aec811f267bb2a0ef066a7abb59d2775", + "SampleA_02_seqfu_mqc.txt:md5,a819409a5cb64e20c3e54ec5ada4aa27", + "Undetermined_05_seqfu.tsv:md5,3a42c5c66a0a118f1a6f6f6e560b0e7e", + "Undetermined_05_seqfu_mqc.txt:md5,bd8be908362c5cb08a72f8ae7ab41b0d", + "sampletest_04_seqfu.tsv:md5,a5bea0b9c6015dd1a201ffd433e9b377", + "sampletest_04_seqfu_mqc.txt:md5,2180961655bbc8a12f0152d6a4b803a2", + "Sample1_01_Sample1_S1_L001_R1_001.fastq.gz:md5,e854f09ef7962d979be12981fe2fae8d", + "Sample23_03_Sample23_S3_L001_R1_001.fastq.gz:md5,1c96eae617f92f81abe08eaccfa02e11", + "SampleA_02_SampleA_S2_L001_R1_001.fastq.gz:md5,f7897b87d06b13e9877f297169a678f1", + "Undetermined_05_Undetermined_S0_L001_R1_001.fastq.gz:md5,c9e790094f5c2b2bad247ae96f804d1e", + "sampletest_04_sampletest_S4_L001_R1_001.fastq.gz:md5,e35f5e6cd500f18ce05cc061fb471a76" + ], + [ + "Sample1_01.bam:md5,9ccdbdc2adf0b9204a66060fefcec7f9", + "Sample23_03.bam:md5,dcd15b5562762f2e4d51c5ab1aef601d", + "SampleA_02.bam:md5,c9c0c519c072e1c808a9d58f17841008", + "Undetermined_05.bam:md5,691b83f3c015cf5f2b28ab6d0581d03c", + "sampletest_04.bam:md5,b13db1c95389474f089f870b906d3fc0" + ], + [ + "WARN: Tag name collision: [group1]", + "WARN: Tag name collision: [group2]", + "WARN: Tag name collision: [lane1]", + "WARN: Tag name collision: [test]" + ] + ], + "timestamp": "2026-02-19T16:10:37.885643273", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "NovaSeq6000 data test - No rundirs": { + "content": [ + 37, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/Sample1_01.bam", + "bwamem2_mem/Sample1_01.bam.bai", + "bwamem2_mem/Sample23_03.bam", + "bwamem2_mem/Sample23_03.bam.bai", + "bwamem2_mem/SampleA_02.bam", + "bwamem2_mem/SampleA_02.bam.bai", + "bwamem2_mem/Undetermined_05.bam", + "bwamem2_mem/Undetermined_05.bam.bai", + "bwamem2_mem/sampletest_04.bam", + "bwamem2_mem/sampletest_04.bam.bai", + "fastqc", + "fastqc/Sample1_01_fastqc.html", + "fastqc/Sample1_01_fastqc.zip", + "fastqc/Sample23_03_fastqc.html", + "fastqc/Sample23_03_fastqc.zip", + "fastqc/SampleA_02_fastqc.html", + "fastqc/SampleA_02_fastqc.zip", + "fastqc/Undetermined_05_fastqc.html", + "fastqc/Undetermined_05_fastqc.zip", + "fastqc/sampletest_04_fastqc.html", + "fastqc/sampletest_04_fastqc.zip", + "fastqscreen", + "fastqscreen/Sample1_01_screen.html", + "fastqscreen/Sample1_01_screen.png", + "fastqscreen/Sample1_01_screen.txt", + "fastqscreen/Sample23_03_screen.html", + "fastqscreen/Sample23_03_screen.png", + "fastqscreen/Sample23_03_screen.txt", + "fastqscreen/SampleA_02_screen.html", + "fastqscreen/SampleA_02_screen.png", + "fastqscreen/SampleA_02_screen.txt", + "fastqscreen/Undetermined_05_screen.html", + "fastqscreen/Undetermined_05_screen.png", + "fastqscreen/Undetermined_05_screen.txt", + "fastqscreen/sampletest_04_screen.html", + "fastqscreen/sampletest_04_screen.png", + "fastqscreen/sampletest_04_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "multiqc/group_reports", + "multiqc/group_reports/group1", + "multiqc/group_reports/group1/multiqc_data", + "multiqc/group_reports/group1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group1/multiqc_data/llms-full.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc.log", + "multiqc/group_reports/group1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_plots", + "multiqc/group_reports/group1/multiqc_plots/pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group1/multiqc_plots/png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group1/multiqc_plots/svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group1/multiqc_report.html", + "multiqc/group_reports/group2", + "multiqc/group_reports/group2/multiqc_data", + "multiqc/group_reports/group2/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group2/multiqc_data/llms-full.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc.log", + "multiqc/group_reports/group2/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group2/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group2/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_plots", + "multiqc/group_reports/group2/multiqc_plots/pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group2/multiqc_plots/png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group2/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group2/multiqc_plots/svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group2/multiqc_report.html", + "multiqc/group_reports/lane1", + "multiqc/group_reports/lane1/multiqc_data", + "multiqc/group_reports/lane1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/lane1/multiqc_data/llms-full.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc.log", + "multiqc/group_reports/lane1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/lane1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_plots", + "multiqc/group_reports/lane1/multiqc_plots/pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/lane1/multiqc_plots/png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/lane1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/lane1/multiqc_plots/svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/lane1/multiqc_report.html", + "multiqc/group_reports/test", + "multiqc/group_reports/test/multiqc_data", + "multiqc/group_reports/test/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/test/multiqc_data/llms-full.txt", + "multiqc/group_reports/test/multiqc_data/multiqc.log", + "multiqc/group_reports/test/multiqc_data/multiqc.parquet", + "multiqc/group_reports/test/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_data.json", + "multiqc/group_reports/test/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/test/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/test/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_plots", + "multiqc/group_reports/test/multiqc_plots/pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/test/multiqc_plots/png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/test/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/test/multiqc_plots/svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/test/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/test/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/Sample1_01_seqfu.tsv", + "seqfu_stats/Sample1_01_seqfu_mqc.txt", + "seqfu_stats/Sample23_03_seqfu.tsv", + "seqfu_stats/Sample23_03_seqfu_mqc.txt", + "seqfu_stats/SampleA_02_seqfu.tsv", + "seqfu_stats/SampleA_02_seqfu_mqc.txt", + "seqfu_stats/Undetermined_05_seqfu.tsv", + "seqfu_stats/Undetermined_05_seqfu_mqc.txt", + "seqfu_stats/sampletest_04_seqfu.tsv", + "seqfu_stats/sampletest_04_seqfu_mqc.txt" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "Sample1_01_screen.png:md5,562256290643b51e4374c2225a15f463", + "Sample1_01_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "Sample23_03_screen.png:md5,6bb2caf67b9b2ed25d3d5f32c343e9ab", + "Sample23_03_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "SampleA_02_screen.png:md5,b2c3e95e034f5c038754bf108537de0e", + "SampleA_02_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "Undetermined_05_screen.png:md5,fc5d53f8876dfae3d1a781fa512ea1db", + "Undetermined_05_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "sampletest_04_screen.png:md5,1fb60070e8f4b70de0c1b3786b54f27e", + "sampletest_04_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "fastq_screen_plot.txt:md5,990122d48fa4c1a170107a1ba034e4cf", + "fastqc-status-check-heatmap.txt:md5,7a64380ec42aac56949a2d9a4176d4d9", + "fastqc_overrepresented_sequences_plot.txt:md5,c7908980f1dba22b45cf6de14a66a686", + "fastqc_per_base_n_content_plot.txt:md5,8aafe701b59b4e70ccec86748c7d6eb3", + "fastqc_per_base_sequence_quality_plot.txt:md5,c2bbc52a285a46ab8c548bca3b721e13", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a422f61a00f0839ef0d630d2e4524589", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,0e5a0cd0b0f8e66b3617f1ac19822d77", + "fastqc_per_sequence_quality_scores_plot.txt:md5,cbaa7c7033c526483584376275a8b33e", + "fastqc_sequence_counts_plot.txt:md5,d8ab86dbfce0c740f4a66a080803a0b9", + "fastqc_sequence_duplication_levels_plot.txt:md5,f86012b3074d697c9a2b3bd67a074288", + "fastqc_sequence_length_distribution_plot.txt:md5,9d4fd245e8e1d5baa473a8bdffcd3e38", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,62240561100f78af37e7e2438cb58f90", + "multiqc_fastqc.txt:md5,23b698f1e957a26f49a9ad9bbdece908", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,b113ea40790fa45fa739f224f2710556", + "multiqc_picard_baseContent.txt:md5,e06c0dea80cb5cef312436e005aa0095", + "multiqc_picard_quality_by_cycle.txt:md5,6e13ddbd97caa0eaa52c118966e5f9fa", + "multiqc_picard_quality_score_distribution.txt:md5,39d3430744e9139020d7af3eb15fc629", + "multiqc_seqfu_mqc.txt:md5,18dd2407d4a1791646785123028f69b5", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,6e13ddbd97caa0eaa52c118966e5f9fa", + "picard_QualityScoreDistribution_histogram.txt:md5,39d3430744e9139020d7af3eb15fc629", + "picard_alignment_readlength_plot.txt:md5,57ee2de637b69efc49290bb5d4b57905", + "picard_alignment_summary.txt:md5,3fee23a738a44ee84592cb1144b32775", + "picard_base_distribution_by_cycle__Adenine.txt:md5,dfb9e50700b61cdbc0344690db202559", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,5eec2a9bbb5db321c7cbbbee26d90357", + "picard_base_distribution_by_cycle__Guanine.txt:md5,5b100b42e93792fed754deb276645e61", + "picard_base_distribution_by_cycle__Thymine.txt:md5,d0317fe5ef2cf1b692526cb9a18aa50c", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,8aafe701b59b4e70ccec86748c7d6eb3", + "picard_quality_by_cycle.txt:md5,366ee22c93a11c1335f867020bb03da5", + "picard_quality_score_distribution.txt:md5,17d6f490cb59e16a7ed4b04ffaa1a100", + "fastq_screen_plot.txt:md5,db7c9231e756a6e5999399a7385e4687", + "fastqc-status-check-heatmap.txt:md5,fc37eaf184877ac80b92001a7bf2fa81", + "fastqc_overrepresented_sequences_plot.txt:md5,0693849fc324ddf580e2c5a4d910bb4f", + "fastqc_per_base_n_content_plot.txt:md5,0ed7f750b500e7c5387ea5309e1ef467", + "fastqc_per_base_sequence_quality_plot.txt:md5,18016152915653e812818194a142e162", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,93f664e18c021aae79ad222fb4cfb393", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,ba96762be2aa842e1d2a606095ffcb7e", + "fastqc_per_sequence_quality_scores_plot.txt:md5,b9044bfe90fd5685137739f52a97ee2c", + "fastqc_sequence_counts_plot.txt:md5,42b26ad3758717659763c81852c4f197", + "fastqc_sequence_duplication_levels_plot.txt:md5,818f13a5372bad79e54cd984758096c5", + "fastqc_sequence_length_distribution_plot.txt:md5,98316a2607a889ae1e7e79a4f64cc740", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,024e1e7f9db3b0906c7aa0904229e176", + "multiqc_fastqc.txt:md5,3407d8f06117a65efce4c70f19e91dd1", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,1debd96f9f64c60a8ec742411da51a28", + "multiqc_picard_baseContent.txt:md5,afb4046944e302b40faea2233bca535c", + "multiqc_picard_quality_by_cycle.txt:md5,6a7552b74dd22410c3cab2c750de792e", + "multiqc_picard_quality_score_distribution.txt:md5,d6343c5f39942bc3f10c194067e6e9bc", + "multiqc_seqfu_mqc.txt:md5,6cdb863a3686fbb772aae5a66925ff23", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,6a7552b74dd22410c3cab2c750de792e", + "picard_QualityScoreDistribution_histogram.txt:md5,d6343c5f39942bc3f10c194067e6e9bc", + "picard_alignment_readlength_plot.txt:md5,01140e65e813b4ae43aabe662ef2f49a", + "picard_alignment_summary.txt:md5,79312cf30761025cc6902811c4165290", + "picard_base_distribution_by_cycle__Adenine.txt:md5,3c3671ac2aa18d883691d59adbfe3b2b", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,6cc2ae1411899de5542321ff1592b192", + "picard_base_distribution_by_cycle__Guanine.txt:md5,326471bc846a9fb6b54ff38cbdfb8d90", + "picard_base_distribution_by_cycle__Thymine.txt:md5,3132dac406a9b9e1f18af658ab856a5c", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,0ed7f750b500e7c5387ea5309e1ef467", + "picard_quality_by_cycle.txt:md5,fe4e6ab1c849a4f833eae9a8554ea432", + "picard_quality_score_distribution.txt:md5,c0864f8a1269d8ffd7a51abb6bd3ca2e", + "fastq_screen_plot.txt:md5,4def6c6a888afe487ab6ebef3ba8a133", + "fastqc-status-check-heatmap.txt:md5,61857d2c45cf0c080348047aa34e7525", + "fastqc_overrepresented_sequences_plot.txt:md5,7949c64cc6cef77f29349a188fc09656", + "fastqc_per_base_n_content_plot.txt:md5,0f2fd628631d42ed5e6a1db22578daaa", + "fastqc_per_base_sequence_quality_plot.txt:md5,0a8bfa32ab04eaaa509dec3c37acb2d2", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,8c85be0c70129ba739feceddd58f6c75", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,94b975906d8a07e1604e00d4004f7463", + "fastqc_per_sequence_quality_scores_plot.txt:md5,ec22c8e4836aa726680f0ca767c778a0", + "fastqc_sequence_counts_plot.txt:md5,f4341795bdeba588248a74a095a97f8d", + "fastqc_sequence_duplication_levels_plot.txt:md5,8fc995cb2192a2926eee242681bc3af6", + "fastqc_sequence_length_distribution_plot.txt:md5,4513e22583677a4d6167b9094242eb0b", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,fd3074930c72b666f201ae71fa27744b", + "multiqc_fastqc.txt:md5,98111f17d1899cad6379e4e56ed11c53", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3b1929de09267fc1c1a15804cb5bf536", + "multiqc_picard_baseContent.txt:md5,ff36be9e2642089aa711c637d3cdba29", + "multiqc_picard_quality_by_cycle.txt:md5,9521c83313eaf5f681ac9a75de83a4b7", + "multiqc_picard_quality_score_distribution.txt:md5,90b9e29f22fa16cf2b0c4d92caf2dbb0", + "multiqc_seqfu_mqc.txt:md5,f821357507fda2d4cfd9299f52fa7dc1", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,9521c83313eaf5f681ac9a75de83a4b7", + "picard_QualityScoreDistribution_histogram.txt:md5,90b9e29f22fa16cf2b0c4d92caf2dbb0", + "picard_alignment_readlength_plot.txt:md5,9c80659c5c9b2fe9926b789fb67ba6ac", + "picard_alignment_summary.txt:md5,27bbb1fcdeecd26641938e5622087c23", + "picard_base_distribution_by_cycle__Adenine.txt:md5,99c5e961a4d26754e68047c8eb983798", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,44981dd399013d8c06481958be338040", + "picard_base_distribution_by_cycle__Guanine.txt:md5,b6369a23d3926edb90ae9bfdc6d90526", + "picard_base_distribution_by_cycle__Thymine.txt:md5,b253d3fca7c07b6a6dfea91725c58102", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,0f2fd628631d42ed5e6a1db22578daaa", + "picard_quality_by_cycle.txt:md5,3c34ae2bd2442a816577b1a794add2d6", + "picard_quality_score_distribution.txt:md5,0d58c59eac2952e6f71cefc35d4c4477", + "fastq_screen_plot.txt:md5,5abb5b9ed2c976f0ad83216ca3186201", + "fastqc-status-check-heatmap.txt:md5,323d6082b73ddb6ee33385f5ea4301c1", + "fastqc_overrepresented_sequences_plot.txt:md5,4e71d8913d40eb06db0f18d74ce6898f", + "fastqc_per_base_n_content_plot.txt:md5,b317ce09cb7a2be2366b544ea9b20ce6", + "fastqc_per_base_sequence_quality_plot.txt:md5,e6f44d08f4185f680d4748a3b37201e2", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a1dc8a968f32bcf8a9b4c5f43d299dfa", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,e41b6dc1344f1aee379993daff310187", + "fastqc_per_sequence_quality_scores_plot.txt:md5,76f792b939233b070562cc46617f6371", + "fastqc_sequence_counts_plot.txt:md5,36c68522023b8d536c9362403bf03c48", + "fastqc_sequence_duplication_levels_plot.txt:md5,9ff0df466790d971b3c7ef838efc0f4f", + "fastqc_sequence_length_distribution_plot.txt:md5,9fda632b92e3453f11cd0226484fce8e", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,536c28d7fadc9a76944f93ac9d643272", + "multiqc_fastqc.txt:md5,396b4cc0466a6642ec8b954237c42263", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,153c6e6a407ec128b1a02798ca2f1115", + "multiqc_picard_baseContent.txt:md5,6349e514552a0b5a0530fa6f311878a5", + "multiqc_picard_quality_by_cycle.txt:md5,c0c8b4c0197428d4d50e2c532814e1e2", + "multiqc_picard_quality_score_distribution.txt:md5,40e0b6faa75e1b51af42407f7ededb0c", + "multiqc_seqfu_mqc.txt:md5,8cced36d66ca9d25d60c006e734aa7e9", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,c0c8b4c0197428d4d50e2c532814e1e2", + "picard_QualityScoreDistribution_histogram.txt:md5,40e0b6faa75e1b51af42407f7ededb0c", + "picard_alignment_readlength_plot.txt:md5,5a19b1f8e2ac49d97f36a7792429419c", + "picard_alignment_summary.txt:md5,f9f791b7c569cfae07aef70aa630d40e", + "picard_base_distribution_by_cycle__Adenine.txt:md5,0165f522c84da6b17a286d37dc30abec", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,6fa0d29d40fe7fa24c166b664b6d4f4b", + "picard_base_distribution_by_cycle__Guanine.txt:md5,bf2426e09ac1ca4773edfc284c220122", + "picard_base_distribution_by_cycle__Thymine.txt:md5,3cbace572471ccf6c58673181dd0c0ec", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,b317ce09cb7a2be2366b544ea9b20ce6", + "picard_quality_by_cycle.txt:md5,7cb705007bc97da8c0da7d93201e6975", + "picard_quality_score_distribution.txt:md5,47d684abae0a8f4f09df43e91d54fb9a", + "fastq_screen_plot.txt:md5,82ceb9f2109f865d6d1b943441c09550", + "fastqc-status-check-heatmap.txt:md5,56b426cd5c030288639533fce7c95ab1", + "fastqc_overrepresented_sequences_plot.txt:md5,8e83abdbe7362e64d63339ee31ab3361", + "fastqc_per_base_n_content_plot.txt:md5,33b70326d8f888ac5a3d99b85f365e43", + "fastqc_per_base_sequence_quality_plot.txt:md5,40bc954cc0d58a3197fdf124a40f1ca4", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,e240e30996c81a34b5d1a6b5a98ae254", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b44d3376d503af12857d494c58b514bb", + "fastqc_per_sequence_quality_scores_plot.txt:md5,66b5b6d44f398fc9429460c0b9ba3ea9", + "fastqc_sequence_counts_plot.txt:md5,6e5804f553f656cffb02f927015d1026", + "fastqc_sequence_duplication_levels_plot.txt:md5,fbe41935ea2e2faf7104393b476e5ac5", + "fastqc_sequence_length_distribution_plot.txt:md5,e77dc4ab73252c2e09c7452c3b8e8ab3", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,4fc422d9cb06a1d0248cc578c1eebaa2", + "multiqc_fastqc.txt:md5,95c8ffb23baafec625aeb600047515ae", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,2d05e826f5152fd0143edf7270de1235", + "multiqc_picard_baseContent.txt:md5,f3f23899a30a96260d8b5b3020708703", + "multiqc_picard_quality_by_cycle.txt:md5,c7edfc271ab59ecedad0ab046afd3563", + "multiqc_picard_quality_score_distribution.txt:md5,7fa89b52b8bc96dd1074aa07cb5a5a54", + "multiqc_seqfu_mqc.txt:md5,ff4ce1c88f39ed24a88bae0a861f75c8", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,c7edfc271ab59ecedad0ab046afd3563", + "picard_QualityScoreDistribution_histogram.txt:md5,7fa89b52b8bc96dd1074aa07cb5a5a54", + "picard_alignment_readlength_plot.txt:md5,c1519319c4942162b05e6225fea10569", + "picard_alignment_summary.txt:md5,49f5c0d2cf21a13d5f363cb42cf3790e", + "picard_base_distribution_by_cycle__Adenine.txt:md5,466a14fc9c09f9f4de02a00e8763cd2a", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,d5854c22df4ac60b8c47c4002d975fe9", + "picard_base_distribution_by_cycle__Guanine.txt:md5,c27b5aa2b90397b1302b880dff3ec958", + "picard_base_distribution_by_cycle__Thymine.txt:md5,6f2a3e9d03f17a93c69476607a1a580d", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,33b70326d8f888ac5a3d99b85f365e43", + "picard_quality_by_cycle.txt:md5,0aa028d69d8bb02f0a2bcd0ed08f4235", + "picard_quality_score_distribution.txt:md5,a2882ff59902dc95830ed4bdb955561a", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "Sample1_01_seqfu.tsv:md5,ac174f48d928c6ddfd43c88af0caa8b6", + "Sample1_01_seqfu_mqc.txt:md5,24d99524ccd0e6c6255a69d68a871c7a", + "Sample23_03_seqfu.tsv:md5,6fac5d3dbce3f3bee72341fe99a399dc", + "Sample23_03_seqfu_mqc.txt:md5,4d4f280911a08bb6b753142980178027", + "SampleA_02_seqfu.tsv:md5,aec811f267bb2a0ef066a7abb59d2775", + "SampleA_02_seqfu_mqc.txt:md5,a819409a5cb64e20c3e54ec5ada4aa27", + "Undetermined_05_seqfu.tsv:md5,3a42c5c66a0a118f1a6f6f6e560b0e7e", + "Undetermined_05_seqfu_mqc.txt:md5,bd8be908362c5cb08a72f8ae7ab41b0d", + "sampletest_04_seqfu.tsv:md5,a5bea0b9c6015dd1a201ffd433e9b377", + "sampletest_04_seqfu_mqc.txt:md5,2180961655bbc8a12f0152d6a4b803a2" + ], + [ + "Sample1_01.bam:md5,d06ccfde49cc474faebcab2ebf71b324", + "Sample23_03.bam:md5,5ff9f554c6255fd07d3841c6616c5031", + "SampleA_02.bam:md5,250d0031520e59ee59a7112ab1ea32e1", + "Undetermined_05.bam:md5,8fcc158f1e0736b366152d5e187644ca", + "sampletest_04.bam:md5,f80371e37421d97499b3bfd55221ed00" + ], + [ + "WARN: No samples with rundir found, skipping RUNDIRPARSER", + "WARN: Sample 'Sample1_01' does not have a rundir specified", + "WARN: Sample 'Sample23_03' does not have a rundir specified", + "WARN: Sample 'SampleA_02' does not have a rundir specified", + "WARN: Sample 'Undetermined_05' does not have a rundir specified", + "WARN: Sample 'sampletest_04' does not have a rundir specified", + "WARN: Tag name collision: [group1]", + "WARN: Tag name collision: [group2]", + "WARN: Tag name collision: [lane1]", + "WARN: Tag name collision: [test]" + ] + ], + "timestamp": "2026-02-19T16:13:03.499762737", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "NovaSeq6000 data test sample size exceeds available reads": { + "content": [ + 43, + { + "BWAMEM2_INDEX": { + "bwamem2": "2.2.1" + }, + "BWAMEM2_MEM": { + "bwamem2": "2.2.1", + "samtools": "1.22.1" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "PICARD_COLLECTMULTIPLEMETRICS": { + "picard": "3.4.0" + }, + "RUNDIRPARSER": { + "PyYAML": "6.0.2", + "Python": "3.13.2" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + }, + "SEQTK_SAMPLE": { + "seqtk": "1.4-r122" + } + }, + [ + "bwamem2_index", + "bwamem2_index/bwamem2", + "bwamem2_index/bwamem2/genome.fa.0123", + "bwamem2_index/bwamem2/genome.fa.amb", + "bwamem2_index/bwamem2/genome.fa.ann", + "bwamem2_index/bwamem2/genome.fa.bwt.2bit.64", + "bwamem2_index/bwamem2/genome.fa.pac", + "bwamem2_mem", + "bwamem2_mem/Sample1_01.bam", + "bwamem2_mem/Sample1_01.bam.bai", + "bwamem2_mem/Sample23_03.bam", + "bwamem2_mem/Sample23_03.bam.bai", + "bwamem2_mem/SampleA_02.bam", + "bwamem2_mem/SampleA_02.bam.bai", + "bwamem2_mem/Undetermined_05.bam", + "bwamem2_mem/Undetermined_05.bam.bai", + "bwamem2_mem/sampletest_04.bam", + "bwamem2_mem/sampletest_04.bam.bai", + "fastqc", + "fastqc/Sample1_01_fastqc.html", + "fastqc/Sample1_01_fastqc.zip", + "fastqc/Sample23_03_fastqc.html", + "fastqc/Sample23_03_fastqc.zip", + "fastqc/SampleA_02_fastqc.html", + "fastqc/SampleA_02_fastqc.zip", + "fastqc/Undetermined_05_fastqc.html", + "fastqc/Undetermined_05_fastqc.zip", + "fastqc/sampletest_04_fastqc.html", + "fastqc/sampletest_04_fastqc.zip", + "fastqscreen", + "fastqscreen/Sample1_01_screen.html", + "fastqscreen/Sample1_01_screen.png", + "fastqscreen/Sample1_01_screen.txt", + "fastqscreen/Sample23_03_screen.html", + "fastqscreen/Sample23_03_screen.png", + "fastqscreen/Sample23_03_screen.txt", + "fastqscreen/SampleA_02_screen.html", + "fastqscreen/SampleA_02_screen.png", + "fastqscreen/SampleA_02_screen.txt", + "fastqscreen/Undetermined_05_screen.html", + "fastqscreen/Undetermined_05_screen.png", + "fastqscreen/Undetermined_05_screen.txt", + "fastqscreen/sampletest_04_screen.html", + "fastqscreen/sampletest_04_screen.png", + "fastqscreen/sampletest_04_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/global_report/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/global_report/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/global_report/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/global_report/multiqc_data/picard_alignment_summary.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/global_report/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/global_report/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/global_report/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/global_report/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/global_report/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/global_report/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/global_report/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/global_report/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/global_report/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/global_report/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/global_report/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/global_report/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "multiqc/group_reports", + "multiqc/group_reports/group1", + "multiqc/group_reports/group1/multiqc_data", + "multiqc/group_reports/group1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group1/multiqc_data/llms-full.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc.log", + "multiqc/group_reports/group1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group1/multiqc_plots", + "multiqc/group_reports/group1/multiqc_plots/pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group1/multiqc_plots/png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group1/multiqc_plots/svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group1/multiqc_report.html", + "multiqc/group_reports/group2", + "multiqc/group_reports/group2/multiqc_data", + "multiqc/group_reports/group2/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/group2/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/group2/multiqc_data/llms-full.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc.log", + "multiqc/group_reports/group2/multiqc_data/multiqc.parquet", + "multiqc/group_reports/group2/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_data.json", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/group2/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/group2/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/group2/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/group2/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/group2/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/group2/multiqc_plots", + "multiqc/group_reports/group2/multiqc_plots/pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/group2/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/group2/multiqc_plots/png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/group2/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/group2/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/group2/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/group2/multiqc_plots/svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/group2/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/group2/multiqc_report.html", + "multiqc/group_reports/lane1", + "multiqc/group_reports/lane1/multiqc_data", + "multiqc/group_reports/lane1/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/lane1/multiqc_data/llms-full.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc.log", + "multiqc/group_reports/lane1/multiqc_data/multiqc.parquet", + "multiqc/group_reports/lane1/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_data.json", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/lane1/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/lane1/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/lane1/multiqc_plots", + "multiqc/group_reports/lane1/multiqc_plots/pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/lane1/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/lane1/multiqc_plots/png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/lane1/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/lane1/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/lane1/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/lane1/multiqc_plots/svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/lane1/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/lane1/multiqc_report.html", + "multiqc/group_reports/test", + "multiqc/group_reports/test/multiqc_data", + "multiqc/group_reports/test/multiqc_data/fastq_screen_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/group_reports/test/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/group_reports/test/multiqc_data/llms-full.txt", + "multiqc/group_reports/test/multiqc_data/multiqc.log", + "multiqc/group_reports/test/multiqc_data/multiqc.parquet", + "multiqc/group_reports/test/multiqc_data/multiqc_citations.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_data.json", + "multiqc/group_reports/test/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_fastqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_general_stats.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_mqc_seq_metadata.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_AlignmentSummaryMetrics.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_baseContent.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_software_versions.txt", + "multiqc/group_reports/test/multiqc_data/multiqc_sources.txt", + "multiqc/group_reports/test/multiqc_data/picard_MarkIlluminaAdapters_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_MeanQualityByCycle_histogram_1.txt", + "multiqc/group_reports/test/multiqc_data/picard_QualityScoreDistribution_histogram.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_readlength_plot.txt", + "multiqc/group_reports/test/multiqc_data/picard_alignment_summary.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Adenine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Cytosine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Guanine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Thymine.txt", + "multiqc/group_reports/test/multiqc_data/picard_base_distribution_by_cycle__Undetermined.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_by_cycle.txt", + "multiqc/group_reports/test/multiqc_data/picard_quality_score_distribution.txt", + "multiqc/group_reports/test/multiqc_plots", + "multiqc/group_reports/test/multiqc_plots/pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/mqc_seq_metadata.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_readlength_plot.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-cnt.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_alignment_summary-pct.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Adenine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Cytosine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Guanine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Thymine.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_base_distribution_by_cycle__Undetermined.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_by_cycle.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/picard_quality_score_distribution.pdf", + "multiqc/group_reports/test/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/group_reports/test/multiqc_plots/png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/group_reports/test/multiqc_plots/png/mqc_seq_metadata.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_readlength_plot.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-cnt.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_alignment_summary-pct.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Adenine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Cytosine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Guanine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Thymine.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_base_distribution_by_cycle__Undetermined.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_by_cycle.png", + "multiqc/group_reports/test/multiqc_plots/png/picard_quality_score_distribution.png", + "multiqc/group_reports/test/multiqc_plots/png/seqfu_mqc.png", + "multiqc/group_reports/test/multiqc_plots/svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/group_reports/test/multiqc_plots/svg/mqc_seq_metadata.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_readlength_plot.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-cnt.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_alignment_summary-pct.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Adenine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Cytosine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Guanine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Thymine.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_base_distribution_by_cycle__Undetermined.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_by_cycle.svg", + "multiqc/group_reports/test/multiqc_plots/svg/picard_quality_score_distribution.svg", + "multiqc/group_reports/test/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/group_reports/test/multiqc_report.html", + "picard_collectmultiplemetrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample1_01.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Sample23_03.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/SampleA_02.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/Undetermined_05.CollectMultipleMetrics.read_length_histogram.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.alignment_summary_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_by_cycle_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution.pdf", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.quality_distribution_metrics", + "picard_collectmultiplemetrics/sampletest_04.CollectMultipleMetrics.read_length_histogram.pdf", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "rundirparser", + "rundirparser/200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/Sample1_01_seqfu.tsv", + "seqfu_stats/Sample1_01_seqfu_mqc.txt", + "seqfu_stats/Sample23_03_seqfu.tsv", + "seqfu_stats/Sample23_03_seqfu_mqc.txt", + "seqfu_stats/SampleA_02_seqfu.tsv", + "seqfu_stats/SampleA_02_seqfu_mqc.txt", + "seqfu_stats/Undetermined_05_seqfu.tsv", + "seqfu_stats/Undetermined_05_seqfu_mqc.txt", + "seqfu_stats/sampletest_04_seqfu.tsv", + "seqfu_stats/sampletest_04_seqfu_mqc.txt", + "seqtk", + "seqtk/Sample1_01_Sample1_S1_L001_R1_001.fastq.gz", + "seqtk/Sample23_03_Sample23_S3_L001_R1_001.fastq.gz", + "seqtk/SampleA_02_SampleA_S2_L001_R1_001.fastq.gz", + "seqtk/Undetermined_05_Undetermined_S0_L001_R1_001.fastq.gz", + "seqtk/sampletest_04_sampletest_S4_L001_R1_001.fastq.gz" + ], + [ + "genome.fa.0123:md5,8af61f4bc59cc2fe7b396db46a2173f3", + "genome.fa.amb:md5,657cfdf0628d140d645d8d01a24f0c5f", + "genome.fa.ann:md5,4439f90bdaaf2cdf9089c9f7f07b9d6b", + "genome.fa.bwt.2bit.64:md5,c9a1ea631cf4ad59f4c3549a030c6c5e", + "genome.fa.pac:md5,fd24ae5f67c642dfe9453e63350618cc", + "Sample1_01_screen.png:md5,57b1664bc6c8e82cc0ce14802ad0dc0f", + "Sample1_01_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "Sample23_03_screen.png:md5,41b4f556865a2f55a93f63e520812fad", + "Sample23_03_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "SampleA_02_screen.png:md5,2f808877be53aa1433c1856bbf50feaf", + "SampleA_02_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "Undetermined_05_screen.png:md5,12707698b2765c68566ccf5ac25479f5", + "Undetermined_05_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "sampletest_04_screen.png:md5,a88937eb54785ee921549d3c894df45d", + "sampletest_04_screen.txt:md5,3b184ef10eeb99043a85826534a4ee28", + "fastq_screen_plot.txt:md5,990122d48fa4c1a170107a1ba034e4cf", + "fastqc-status-check-heatmap.txt:md5,7a64380ec42aac56949a2d9a4176d4d9", + "fastqc_overrepresented_sequences_plot.txt:md5,c7908980f1dba22b45cf6de14a66a686", + "fastqc_per_base_n_content_plot.txt:md5,8aafe701b59b4e70ccec86748c7d6eb3", + "fastqc_per_base_sequence_quality_plot.txt:md5,c2bbc52a285a46ab8c548bca3b721e13", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a422f61a00f0839ef0d630d2e4524589", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,0e5a0cd0b0f8e66b3617f1ac19822d77", + "fastqc_per_sequence_quality_scores_plot.txt:md5,cbaa7c7033c526483584376275a8b33e", + "fastqc_sequence_counts_plot.txt:md5,d8ab86dbfce0c740f4a66a080803a0b9", + "fastqc_sequence_duplication_levels_plot.txt:md5,f86012b3074d697c9a2b3bd67a074288", + "fastqc_sequence_length_distribution_plot.txt:md5,9d4fd245e8e1d5baa473a8bdffcd3e38", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,62240561100f78af37e7e2438cb58f90", + "multiqc_fastqc.txt:md5,23b698f1e957a26f49a9ad9bbdece908", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,b113ea40790fa45fa739f224f2710556", + "multiqc_picard_baseContent.txt:md5,e06c0dea80cb5cef312436e005aa0095", + "multiqc_picard_quality_by_cycle.txt:md5,6e13ddbd97caa0eaa52c118966e5f9fa", + "multiqc_picard_quality_score_distribution.txt:md5,39d3430744e9139020d7af3eb15fc629", + "multiqc_seqfu_mqc.txt:md5,18dd2407d4a1791646785123028f69b5", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,6e13ddbd97caa0eaa52c118966e5f9fa", + "picard_QualityScoreDistribution_histogram.txt:md5,39d3430744e9139020d7af3eb15fc629", + "picard_alignment_readlength_plot.txt:md5,57ee2de637b69efc49290bb5d4b57905", + "picard_alignment_summary.txt:md5,3fee23a738a44ee84592cb1144b32775", + "picard_base_distribution_by_cycle__Adenine.txt:md5,dfb9e50700b61cdbc0344690db202559", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,5eec2a9bbb5db321c7cbbbee26d90357", + "picard_base_distribution_by_cycle__Guanine.txt:md5,5b100b42e93792fed754deb276645e61", + "picard_base_distribution_by_cycle__Thymine.txt:md5,d0317fe5ef2cf1b692526cb9a18aa50c", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,8aafe701b59b4e70ccec86748c7d6eb3", + "picard_quality_by_cycle.txt:md5,366ee22c93a11c1335f867020bb03da5", + "picard_quality_score_distribution.txt:md5,17d6f490cb59e16a7ed4b04ffaa1a100", + "fastq_screen_plot.txt:md5,db7c9231e756a6e5999399a7385e4687", + "fastqc-status-check-heatmap.txt:md5,fc37eaf184877ac80b92001a7bf2fa81", + "fastqc_overrepresented_sequences_plot.txt:md5,0693849fc324ddf580e2c5a4d910bb4f", + "fastqc_per_base_n_content_plot.txt:md5,0ed7f750b500e7c5387ea5309e1ef467", + "fastqc_per_base_sequence_quality_plot.txt:md5,18016152915653e812818194a142e162", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,93f664e18c021aae79ad222fb4cfb393", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,ba96762be2aa842e1d2a606095ffcb7e", + "fastqc_per_sequence_quality_scores_plot.txt:md5,b9044bfe90fd5685137739f52a97ee2c", + "fastqc_sequence_counts_plot.txt:md5,42b26ad3758717659763c81852c4f197", + "fastqc_sequence_duplication_levels_plot.txt:md5,818f13a5372bad79e54cd984758096c5", + "fastqc_sequence_length_distribution_plot.txt:md5,98316a2607a889ae1e7e79a4f64cc740", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,024e1e7f9db3b0906c7aa0904229e176", + "multiqc_fastqc.txt:md5,3407d8f06117a65efce4c70f19e91dd1", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,1debd96f9f64c60a8ec742411da51a28", + "multiqc_picard_baseContent.txt:md5,afb4046944e302b40faea2233bca535c", + "multiqc_picard_quality_by_cycle.txt:md5,6a7552b74dd22410c3cab2c750de792e", + "multiqc_picard_quality_score_distribution.txt:md5,d6343c5f39942bc3f10c194067e6e9bc", + "multiqc_seqfu_mqc.txt:md5,6cdb863a3686fbb772aae5a66925ff23", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,6a7552b74dd22410c3cab2c750de792e", + "picard_QualityScoreDistribution_histogram.txt:md5,d6343c5f39942bc3f10c194067e6e9bc", + "picard_alignment_readlength_plot.txt:md5,01140e65e813b4ae43aabe662ef2f49a", + "picard_alignment_summary.txt:md5,79312cf30761025cc6902811c4165290", + "picard_base_distribution_by_cycle__Adenine.txt:md5,3c3671ac2aa18d883691d59adbfe3b2b", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,6cc2ae1411899de5542321ff1592b192", + "picard_base_distribution_by_cycle__Guanine.txt:md5,326471bc846a9fb6b54ff38cbdfb8d90", + "picard_base_distribution_by_cycle__Thymine.txt:md5,3132dac406a9b9e1f18af658ab856a5c", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,0ed7f750b500e7c5387ea5309e1ef467", + "picard_quality_by_cycle.txt:md5,fe4e6ab1c849a4f833eae9a8554ea432", + "picard_quality_score_distribution.txt:md5,c0864f8a1269d8ffd7a51abb6bd3ca2e", + "fastq_screen_plot.txt:md5,4def6c6a888afe487ab6ebef3ba8a133", + "fastqc-status-check-heatmap.txt:md5,61857d2c45cf0c080348047aa34e7525", + "fastqc_overrepresented_sequences_plot.txt:md5,7949c64cc6cef77f29349a188fc09656", + "fastqc_per_base_n_content_plot.txt:md5,0f2fd628631d42ed5e6a1db22578daaa", + "fastqc_per_base_sequence_quality_plot.txt:md5,0a8bfa32ab04eaaa509dec3c37acb2d2", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,8c85be0c70129ba739feceddd58f6c75", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,94b975906d8a07e1604e00d4004f7463", + "fastqc_per_sequence_quality_scores_plot.txt:md5,ec22c8e4836aa726680f0ca767c778a0", + "fastqc_sequence_counts_plot.txt:md5,f4341795bdeba588248a74a095a97f8d", + "fastqc_sequence_duplication_levels_plot.txt:md5,8fc995cb2192a2926eee242681bc3af6", + "fastqc_sequence_length_distribution_plot.txt:md5,4513e22583677a4d6167b9094242eb0b", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,fd3074930c72b666f201ae71fa27744b", + "multiqc_fastqc.txt:md5,98111f17d1899cad6379e4e56ed11c53", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3b1929de09267fc1c1a15804cb5bf536", + "multiqc_picard_baseContent.txt:md5,ff36be9e2642089aa711c637d3cdba29", + "multiqc_picard_quality_by_cycle.txt:md5,9521c83313eaf5f681ac9a75de83a4b7", + "multiqc_picard_quality_score_distribution.txt:md5,90b9e29f22fa16cf2b0c4d92caf2dbb0", + "multiqc_seqfu_mqc.txt:md5,f821357507fda2d4cfd9299f52fa7dc1", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,9521c83313eaf5f681ac9a75de83a4b7", + "picard_QualityScoreDistribution_histogram.txt:md5,90b9e29f22fa16cf2b0c4d92caf2dbb0", + "picard_alignment_readlength_plot.txt:md5,9c80659c5c9b2fe9926b789fb67ba6ac", + "picard_alignment_summary.txt:md5,27bbb1fcdeecd26641938e5622087c23", + "picard_base_distribution_by_cycle__Adenine.txt:md5,99c5e961a4d26754e68047c8eb983798", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,44981dd399013d8c06481958be338040", + "picard_base_distribution_by_cycle__Guanine.txt:md5,b6369a23d3926edb90ae9bfdc6d90526", + "picard_base_distribution_by_cycle__Thymine.txt:md5,b253d3fca7c07b6a6dfea91725c58102", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,0f2fd628631d42ed5e6a1db22578daaa", + "picard_quality_by_cycle.txt:md5,3c34ae2bd2442a816577b1a794add2d6", + "picard_quality_score_distribution.txt:md5,0d58c59eac2952e6f71cefc35d4c4477", + "fastq_screen_plot.txt:md5,5abb5b9ed2c976f0ad83216ca3186201", + "fastqc-status-check-heatmap.txt:md5,323d6082b73ddb6ee33385f5ea4301c1", + "fastqc_overrepresented_sequences_plot.txt:md5,4e71d8913d40eb06db0f18d74ce6898f", + "fastqc_per_base_n_content_plot.txt:md5,b317ce09cb7a2be2366b544ea9b20ce6", + "fastqc_per_base_sequence_quality_plot.txt:md5,e6f44d08f4185f680d4748a3b37201e2", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,a1dc8a968f32bcf8a9b4c5f43d299dfa", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,e41b6dc1344f1aee379993daff310187", + "fastqc_per_sequence_quality_scores_plot.txt:md5,76f792b939233b070562cc46617f6371", + "fastqc_sequence_counts_plot.txt:md5,36c68522023b8d536c9362403bf03c48", + "fastqc_sequence_duplication_levels_plot.txt:md5,9ff0df466790d971b3c7ef838efc0f4f", + "fastqc_sequence_length_distribution_plot.txt:md5,9fda632b92e3453f11cd0226484fce8e", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,536c28d7fadc9a76944f93ac9d643272", + "multiqc_fastqc.txt:md5,396b4cc0466a6642ec8b954237c42263", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,153c6e6a407ec128b1a02798ca2f1115", + "multiqc_picard_baseContent.txt:md5,6349e514552a0b5a0530fa6f311878a5", + "multiqc_picard_quality_by_cycle.txt:md5,c0c8b4c0197428d4d50e2c532814e1e2", + "multiqc_picard_quality_score_distribution.txt:md5,40e0b6faa75e1b51af42407f7ededb0c", + "multiqc_seqfu_mqc.txt:md5,8cced36d66ca9d25d60c006e734aa7e9", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,c0c8b4c0197428d4d50e2c532814e1e2", + "picard_QualityScoreDistribution_histogram.txt:md5,40e0b6faa75e1b51af42407f7ededb0c", + "picard_alignment_readlength_plot.txt:md5,5a19b1f8e2ac49d97f36a7792429419c", + "picard_alignment_summary.txt:md5,f9f791b7c569cfae07aef70aa630d40e", + "picard_base_distribution_by_cycle__Adenine.txt:md5,0165f522c84da6b17a286d37dc30abec", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,6fa0d29d40fe7fa24c166b664b6d4f4b", + "picard_base_distribution_by_cycle__Guanine.txt:md5,bf2426e09ac1ca4773edfc284c220122", + "picard_base_distribution_by_cycle__Thymine.txt:md5,3cbace572471ccf6c58673181dd0c0ec", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,b317ce09cb7a2be2366b544ea9b20ce6", + "picard_quality_by_cycle.txt:md5,7cb705007bc97da8c0da7d93201e6975", + "picard_quality_score_distribution.txt:md5,47d684abae0a8f4f09df43e91d54fb9a", + "fastq_screen_plot.txt:md5,82ceb9f2109f865d6d1b943441c09550", + "fastqc-status-check-heatmap.txt:md5,56b426cd5c030288639533fce7c95ab1", + "fastqc_overrepresented_sequences_plot.txt:md5,8e83abdbe7362e64d63339ee31ab3361", + "fastqc_per_base_n_content_plot.txt:md5,33b70326d8f888ac5a3d99b85f365e43", + "fastqc_per_base_sequence_quality_plot.txt:md5,40bc954cc0d58a3197fdf124a40f1ca4", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,e240e30996c81a34b5d1a6b5a98ae254", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,b44d3376d503af12857d494c58b514bb", + "fastqc_per_sequence_quality_scores_plot.txt:md5,66b5b6d44f398fc9429460c0b9ba3ea9", + "fastqc_sequence_counts_plot.txt:md5,6e5804f553f656cffb02f927015d1026", + "fastqc_sequence_duplication_levels_plot.txt:md5,fbe41935ea2e2faf7104393b476e5ac5", + "fastqc_sequence_length_distribution_plot.txt:md5,e77dc4ab73252c2e09c7452c3b8e8ab3", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,4fc422d9cb06a1d0248cc578c1eebaa2", + "multiqc_fastqc.txt:md5,95c8ffb23baafec625aeb600047515ae", + "multiqc_mqc_seq_metadata.txt:md5,5c5f63f044bdcb1ab74a66b896f0b6e7", + "multiqc_picard_AlignmentSummaryMetrics.txt:md5,2d05e826f5152fd0143edf7270de1235", + "multiqc_picard_baseContent.txt:md5,f3f23899a30a96260d8b5b3020708703", + "multiqc_picard_quality_by_cycle.txt:md5,c7edfc271ab59ecedad0ab046afd3563", + "multiqc_picard_quality_score_distribution.txt:md5,7fa89b52b8bc96dd1074aa07cb5a5a54", + "multiqc_seqfu_mqc.txt:md5,ff4ce1c88f39ed24a88bae0a861f75c8", + "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "picard_MeanQualityByCycle_histogram_1.txt:md5,c7edfc271ab59ecedad0ab046afd3563", + "picard_QualityScoreDistribution_histogram.txt:md5,7fa89b52b8bc96dd1074aa07cb5a5a54", + "picard_alignment_readlength_plot.txt:md5,c1519319c4942162b05e6225fea10569", + "picard_alignment_summary.txt:md5,49f5c0d2cf21a13d5f363cb42cf3790e", + "picard_base_distribution_by_cycle__Adenine.txt:md5,466a14fc9c09f9f4de02a00e8763cd2a", + "picard_base_distribution_by_cycle__Cytosine.txt:md5,d5854c22df4ac60b8c47c4002d975fe9", + "picard_base_distribution_by_cycle__Guanine.txt:md5,c27b5aa2b90397b1302b880dff3ec958", + "picard_base_distribution_by_cycle__Thymine.txt:md5,6f2a3e9d03f17a93c69476607a1a580d", + "picard_base_distribution_by_cycle__Undetermined.txt:md5,33b70326d8f888ac5a3d99b85f365e43", + "picard_quality_by_cycle.txt:md5,0aa028d69d8bb02f0a2bcd0ed08f4235", + "picard_quality_score_distribution.txt:md5,a2882ff59902dc95830ed4bdb955561a", + "200624_A00834_0183_BHMTFYDRXX_illumina_mqc.yml:md5,29e05fed18bca0e9a857c992b6d59a40", + "genome.fa.fai:md5,6f4c0ce5258e6948135ad006e1f9ee1b", + "Sample1_01_seqfu.tsv:md5,ac174f48d928c6ddfd43c88af0caa8b6", + "Sample1_01_seqfu_mqc.txt:md5,24d99524ccd0e6c6255a69d68a871c7a", + "Sample23_03_seqfu.tsv:md5,6fac5d3dbce3f3bee72341fe99a399dc", + "Sample23_03_seqfu_mqc.txt:md5,4d4f280911a08bb6b753142980178027", + "SampleA_02_seqfu.tsv:md5,aec811f267bb2a0ef066a7abb59d2775", + "SampleA_02_seqfu_mqc.txt:md5,a819409a5cb64e20c3e54ec5ada4aa27", + "Undetermined_05_seqfu.tsv:md5,3a42c5c66a0a118f1a6f6f6e560b0e7e", + "Undetermined_05_seqfu_mqc.txt:md5,bd8be908362c5cb08a72f8ae7ab41b0d", + "sampletest_04_seqfu.tsv:md5,a5bea0b9c6015dd1a201ffd433e9b377", + "sampletest_04_seqfu_mqc.txt:md5,2180961655bbc8a12f0152d6a4b803a2", + "Sample1_01_Sample1_S1_L001_R1_001.fastq.gz:md5,9f2f4855422bd18576efbc8af0368517", + "Sample23_03_Sample23_S3_L001_R1_001.fastq.gz:md5,036238392d51face00be9710c0c14523", + "SampleA_02_SampleA_S2_L001_R1_001.fastq.gz:md5,bcc1ed324745e894356ff3b66d023156", + "Undetermined_05_Undetermined_S0_L001_R1_001.fastq.gz:md5,2d64ba05e69ae081f95581cc8f0ffd36", + "sampletest_04_sampletest_S4_L001_R1_001.fastq.gz:md5,e81c2337941970a3bafa2c0adf8bebb1" + ], + [ + "Sample1_01.bam:md5,d06ccfde49cc474faebcab2ebf71b324", + "Sample23_03.bam:md5,5ff9f554c6255fd07d3841c6616c5031", + "SampleA_02.bam:md5,250d0031520e59ee59a7112ab1ea32e1", + "Undetermined_05.bam:md5,8fcc158f1e0736b366152d5e187644ca", + "sampletest_04.bam:md5,f80371e37421d97499b3bfd55221ed00" + ], + [ + "WARN: Sample1_01: Requested sample_size (120) is larger than available reads (100). Pipeline will continue with 100 reads.", + "WARN: Sample23_03: Requested sample_size (120) is larger than available reads (100). Pipeline will continue with 100 reads.", + "WARN: SampleA_02: Requested sample_size (120) is larger than available reads (100). Pipeline will continue with 100 reads.", + "WARN: Tag name collision: [group1]", + "WARN: Tag name collision: [group2]", + "WARN: Tag name collision: [lane1]", + "WARN: Tag name collision: [test]", + "WARN: Undetermined_05: Requested sample_size (120) is larger than available reads (100). Pipeline will continue with 100 reads.", + "WARN: sampletest_04: Requested sample_size (120) is larger than available reads (100). Pipeline will continue with 100 reads." + ] + ], + "timestamp": "2026-02-19T16:11:52.597356515", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/tests/PromethION.nf.test b/tests/PromethION.nf.test new file mode 100644 index 00000000..c31f90e4 --- /dev/null +++ b/tests/PromethION.nf.test @@ -0,0 +1,23 @@ +def pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + + def test_scenario = [ + [ + name: "PromethION data test", + params: [ + genome : 'EB1', + input: pipelines_testdata_base_path + 'seqinspector/testdata/PromethION/samplesheet.csv', + skip_tools: 'bwamem2_index,bwamem2_mem,rundirparser', + ] + ] + ] + + // Generate tests for each scenario + test_scenario.each { scenario -> + test(scenario.name, UTILS.getTest(scenario)) + } +} diff --git a/tests/PromethION.nf.test.snap b/tests/PromethION.nf.test.snap new file mode 100644 index 00000000..f9a0fdcc --- /dev/null +++ b/tests/PromethION.nf.test.snap @@ -0,0 +1,147 @@ +{ + "PromethION data test": { + "content": [ + 5, + { + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQSCREEN_FASTQSCREEN": { + "fastqscreen": "0.16.0" + }, + "SAMTOOLS_FAIDX": { + "samtools": "1.22.1" + }, + "SEQFU_STATS": { + "seqfu": "1.22.3" + } + }, + [ + "fastqc", + "fastqc/hg001_01_fastqc.html", + "fastqc/hg001_01_fastqc.zip", + "fastqscreen", + "fastqscreen/hg001_01_screen.html", + "fastqscreen/hg001_01_screen.png", + "fastqscreen/hg001_01_screen.txt", + "multiqc", + "multiqc/global_report", + "multiqc/global_report/multiqc_data", + "multiqc/global_report/multiqc_data/fastq_screen_plot.txt", + "multiqc/global_report/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/global_report/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_overrepresented_sequences_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/global_report/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/global_report/multiqc_data/fastqc_top_overrepresented_sequences_table.txt", + "multiqc/global_report/multiqc_data/llms-full.txt", + "multiqc/global_report/multiqc_data/multiqc.log", + "multiqc/global_report/multiqc_data/multiqc.parquet", + "multiqc/global_report/multiqc_data/multiqc_citations.txt", + "multiqc/global_report/multiqc_data/multiqc_data.json", + "multiqc/global_report/multiqc_data/multiqc_fastq_screen.txt", + "multiqc/global_report/multiqc_data/multiqc_fastqc.txt", + "multiqc/global_report/multiqc_data/multiqc_general_stats.txt", + "multiqc/global_report/multiqc_data/multiqc_seqfu_mqc.txt", + "multiqc/global_report/multiqc_data/multiqc_software_versions.txt", + "multiqc/global_report/multiqc_data/multiqc_sources.txt", + "multiqc/global_report/multiqc_plots", + "multiqc/global_report/multiqc_plots/pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastq_screen_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc-status-check-heatmap.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_overrepresented_sequences_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/global_report/multiqc_plots/pdf/fastqc_top_overrepresented_sequences_table.pdf", + "multiqc/global_report/multiqc_plots/pdf/seqfu_mqc.pdf", + "multiqc/global_report/multiqc_plots/png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastq_screen_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc-status-check-heatmap.png", + "multiqc/global_report/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_overrepresented_sequences_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/global_report/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/global_report/multiqc_plots/png/fastqc_top_overrepresented_sequences_table.png", + "multiqc/global_report/multiqc_plots/png/seqfu_mqc.png", + "multiqc/global_report/multiqc_plots/svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastq_screen_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc-status-check-heatmap.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_overrepresented_sequences_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/global_report/multiqc_plots/svg/fastqc_top_overrepresented_sequences_table.svg", + "multiqc/global_report/multiqc_plots/svg/seqfu_mqc.svg", + "multiqc/global_report/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", + "samtools_faidx", + "samtools_faidx/genome.fa.fai", + "seqfu_stats", + "seqfu_stats/hg001_01_seqfu.tsv", + "seqfu_stats/hg001_01_seqfu_mqc.txt" + ], + [ + "hg001_01_screen.png:md5,b9c58e388f18ad11f4c2e29e9b573a5e", + "hg001_01_screen.txt:md5,8e53ea043d658a130f4b8ca455e2ba9b", + "fastq_screen_plot.txt:md5,f6883339d43a090e86e02fdf3feacbbd", + "fastqc-status-check-heatmap.txt:md5,0ac9450d210de9ab4548378101877c8e", + "fastqc_adapter_content_plot.txt:md5,6e2a760185573c44180ca43081cc7c99", + "fastqc_overrepresented_sequences_plot.txt:md5,251ad51e27e966476911ff4c77c2a893", + "fastqc_per_base_n_content_plot.txt:md5,230b2a0319f3b7490498e8edb47b17bf", + "fastqc_per_base_sequence_quality_plot.txt:md5,4934bce34aec037e1ea590bd69f74781", + "fastqc_per_sequence_gc_content_plot_Counts.txt:md5,028ada8fc060ce4af7476f339c57c50d", + "fastqc_per_sequence_gc_content_plot_Percentages.txt:md5,6bab830c22525c15a6048d8054f685cf", + "fastqc_per_sequence_quality_scores_plot.txt:md5,fd29224ed588e37e1fc85bf7f717e31e", + "fastqc_sequence_counts_plot.txt:md5,cc83b291e21249f3c4e25d34cc898f0f", + "fastqc_sequence_duplication_levels_plot.txt:md5,7b7665c78ca66d3e13b1850701b198dc", + "fastqc_sequence_length_distribution_plot.txt:md5,d7bac93b11316846778b9d550f323371", + "multiqc_citations.txt:md5,5f52d7a0141e4234c6069df9ef575c9a", + "multiqc_fastq_screen.txt:md5,0ab0d1c4c3e3393afdb50ad0e116e394", + "multiqc_fastqc.txt:md5,b71aaffef9767dfe9d83fde0d31a3a1b", + "multiqc_seqfu_mqc.txt:md5,9595d608ff5709f2bdec8cb1016416c0", + "genome.fa.fai:md5,59557cd3a71ca5e0840285b6088ec1d6", + "hg001_01_seqfu.tsv:md5,b133752c897afbb4d8721b911fa117d4", + "hg001_01_seqfu_mqc.txt:md5,42e3506b02ceb72a6f05cb174505e722" + ], + "No BAM files", + "No warnings" + ], + "timestamp": "2026-02-19T11:20:55.026861066", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + } +} \ No newline at end of file diff --git a/tests/lib/UTILS.groovy b/tests/lib/UTILS.groovy new file mode 100644 index 00000000..e8549dad --- /dev/null +++ b/tests/lib/UTILS.groovy @@ -0,0 +1,156 @@ +// Helper functions for pipeline tests + +class UTILS { + + public static def getAssertions = { Map args -> + // Mandatory, as we always need an outdir + def outdir = args.outdir + + // Get scenario and extract all properties dynamically + def scenario = args.scenario ?: [:] + + // Pass down workflow for std capture + def workflow = args.workflow + + // These strings are not stable and should be ignored + def snapshot_ignore_list = [ + "Creating env using", + "Downloading plugin", + "Pulling Singularity image", + "Staging foreign file", + "unable to stage foreign file" + ] + + // stable_name: All files + folders in ${outdir}/ with a stable name + def stable_name = getAllFilesFromDir(outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_content: All files in ${outdir}/ with stable content + def stable_content = getAllFilesFromDir(outdir, ignoreFile: 'tests/.nftignore', ignore: [scenario.ignoreFiles ]) + // bam_files: All bam files + def bam_files = getAllFilesFromDir(outdir, include: ['**/*.bam'], ignore: [scenario.ignoreFiles ]) + + def assertion = [] + + if (!scenario.failure) { + assertion.add(workflow.trace.succeeded().size()) + assertion.add(removeFromYamlMap("${outdir}/pipeline_info/nf_core_seqinspector_software_mqc_versions.yml", "Workflow")) + } + + // At least always pipeline_info/ is created and stable + assertion.add(stable_name) + + if (!scenario.stub) { + assertion.add(stable_content.isEmpty() ? 'No stable content' : stable_content) + assertion.add(bam_files.isEmpty() ? 'No BAM files' : bam_files.collect { file -> file.getName() + ":md5," + bam(file.toString()).readsMD5 }) + } + + // If we have a snapshot options in scenario then we allow to capture either stderr, stdout or both + // With options to include specific stings + def workflow_std = [] + // Otherwise, we always capture stdout and stderr for any WARN message + // Both have additional possibilities to ignore some strings + def filter_args = [ignore: snapshot_ignore_list + (scenario.snapshot_ignore ?: [])] + + if (scenario.snapshot) { + workflow_std = scenario.snapshot.split(',') + .findAll { it in ['stderr', 'stdout'] } + .collect { workflow."$it" } + .flatten() + + if (scenario.snapshot_include) { filter_args.include = [scenario.snapshot_include] } + } else { + workflow_std = workflow.stderr + workflow.stdout + filter_args.include = ["WARN"] + } + + assertion.add(filterNextflowOutput(workflow_std, filter_args) ?: "No warnings") + + return assertion + } + + public static def getTest = { scenario -> + // This function returns a closure that will be used to run the test and the assertion + // It will create tags or options based on the scenario + + return { + // If the test is for a gpu, we add the gpu tag + // Otherwise, we add the cpu tag + // If the tests has no conda incompatibilities + // then we append "_conda" to the cpu/gpu tag + // If the test is for a stub, we add options -stub + // And we append "_stub" to the cpu/gpu tag + + // All options should be: + // gpu (this is the default for gpu) + // cpu (this is the default for tests without conda) + // gpu_conda (this should never happen) + // cpu_conda (this is the default for tests with conda compatibility) + // gpu_stub + // cpu_stub + // gpu_conda_stub (this should never happen) + // cpu_conda_stub + + tag "pipeline" + tag "pipeline_seqinspector" + + if (scenario.stub) { + options "-stub" + } + + options "-output-dir $outputDir" + + if (scenario.gpu) { + tag "gpu${!scenario.no_conda ? '_conda' : ''}${scenario.stub ? '_stub' : ''}" + } + + if (!scenario.gpu) { + tag "cpu${!scenario.no_conda ? '_conda' : ''}${scenario.stub ? '_stub' : ''}" + } + + // If a tag is provided, add it to the test + if (scenario.tag) { + tag scenario.tag + } + + when { + params { + // Mandatory, as we always need an outdir + outdir = "${outputDir}" + // Apply scenario-specific params + scenario.params.each { key, value -> + delegate."$key" = value + } + } + } + + then { + // Assert failure/success, and fails early so we don't pollute console with massive diffs + if (scenario.failure) { + assert workflow.failed + } else { + assert workflow.success + } + assertAll( + { assert snapshot( + // All assertions based on the scenario + *UTILS.getAssertions( + outdir: params.outdir, + scenario: scenario, + workflow: workflow + ) + ).match() } + ) + } + cleanup { + if (System.getenv('NFT_CLEANUP')) { + println "" + println "CLEANUP" + println "Set NFT_CLEANUP to false to disable." + println "The following folders will be deleted:" + println "- ${workDir}" + + new File("${workDir}").deleteDir() + } + } + } + } +} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 00000000..8d6d7704 --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,8 @@ +/* +======================================================================================== + Nextflow config file for running nf-test tests +======================================================================================== +*/ + +// fixes S3 access issues on self-hosted runners +aws.client.anonymous = true diff --git a/workflows/seqinspector.nf b/workflows/seqinspector.nf index 9ae3384b..79d7f536 100644 --- a/workflows/seqinspector.nf +++ b/workflows/seqinspector.nf @@ -4,12 +4,27 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_seqinspector_pipeline' +// modules +include { BWAMEM2_MEM } from '../modules/nf-core/bwamem2/mem' +include { FASTQC } from '../modules/nf-core/fastqc' +include { FASTQSCREEN_FASTQSCREEN } from '../modules/nf-core/fastqscreen/fastqscreen' +include { MULTIQC as MULTIQC_GLOBAL } from '../modules/nf-core/multiqc' +include { MULTIQC as MULTIQC_PER_TAG } from '../modules/nf-core/multiqc' +include { RUNDIRPARSER } from '../modules/local/rundirparser' +include { SAMTOOLS_INDEX } from '../modules/nf-core/samtools/index' +include { SEQFU_STATS } from '../modules/nf-core/seqfu/stats' +include { SEQTK_SAMPLE } from '../modules/nf-core/seqtk/sample' + +// subworkflow +include { QC_BAM } from '../subworkflows/local/qc_bam' + +// functions +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_seqinspector_pipeline' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { reportIndexMultiqc } from '../subworkflows/local/utils_nfcore_seqinspector_pipeline' +include { samplesheetToList } from 'plugin/nf-schema' +include { softwareVersionsToYAML } from 'plugin/nf-core-utils' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -18,59 +33,273 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_seqi */ workflow SEQINSPECTOR { - take: ch_samplesheet // channel: samplesheet read in from --input + bait_intervals + bwamem2_index + fasta_reference + fastq_screen_references + multiqc_config + multiqc_logo + multiqc_methods_description + outdir + ref_dict + ref_fai + run_picard_collecthsmetrics + sample_size + skip_tools + sort_bam + target_intervals main: + ch_multiqc_files = channel.empty() + ch_multiqc_extra_files = channel.empty() + ch_bwamem2_mem = channel.empty() + ch_samtools_index = channel.empty() + + // + // MODULE: Parse rundir info + // + if (!("rundirparser" in skip_tools)) { + + // Branch the samplesheet channel based on rundir presence + ch_rundir_branch = ch_samplesheet.branch { meta, _reads -> + with_rundir: meta.rundir.size() > 0 + without_rundir: true + } + + // Log warnings for samples without rundir + ch_rundir_branch.without_rundir.subscribe { meta, _reads -> + log.warn("Sample '${meta.id}' does not have a rundir specified") + } + + // From samplesheet channel serving (sampleMetaObj, sampleReadsPath) tuples: + // --> Create new rundir channel serving (rundirMetaObj, rundirPath) tuples + ch_rundir = ch_rundir_branch.with_rundir + .map { meta, _reads -> [meta.rundir, meta] } + .groupTuple() + .map { rundir, metas -> + // Collect all unique tags into a list + def all_tags = metas.collect { meta -> meta.tags }.flatten().unique() + // Create a new meta object whose attributes are... + // 1. tags: The list of merged tags, used for grouping MultiQC reports + // 2. dirname: The simple name of the rundir, used for setting unique output names in publishDir + def dir_meta = [tags: all_tags, dirname: rundir.simpleName] + // Return the new structure, to... + // 1. Feed into rundir specific processes + // 2. Mix with the ch_multiqc_files channel downstream + [dir_meta, rundir] + } + + ch_rundir.ifEmpty { log.warn("No samples with rundir found, skipping RUNDIRPARSER") } + + RUNDIRPARSER(ch_rundir) + + ch_multiqc_files = ch_multiqc_files.mix(RUNDIRPARSER.out.multiqc) + } + + + // + // MODULE: Run Seqtk sample to perform subsampling + // + if (!("seqtk_sample" in skip_tools) && sample_size > 0) { + SEQTK_SAMPLE(ch_samplesheet.map { meta, reads -> [meta, reads, sample_size] }) - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + ch_sample = SEQTK_SAMPLE.out.reads + } + else { + // No subsampling + ch_sample = ch_samplesheet + } // // MODULE: Run FastQC // - FASTQC ( - ch_samplesheet - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + if (!("fastqc" in skip_tools)) { + FASTQC(ch_sample) + + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip) + } + + // + // Module: Run SeqFu stats + // + if (!("seqfu_stats" in skip_tools)) { + SEQFU_STATS(ch_samplesheet.map { meta, reads -> [[id: "seqfu", sample_id: meta.id, tags: meta.tags], reads] }) + + // Parse the stats TSV file + SEQFU_STATS.out.stats + .map { meta, stats -> [meta.sample_id, stats] } + .splitCsv(header: true, sep: '\t') + .map { sample_id, row -> + // Check if requested sample size exceeds available reads + def sample_reads = row['#Seq'].toInteger() + if (sample_size > sample_reads) { + log.warn("${sample_id}: Requested sample_size (${sample_size}) is larger than available reads (${sample_reads}). Pipeline will continue with ${sample_reads} reads.") + } + } + + ch_multiqc_files = ch_multiqc_files.mix(SEQFU_STATS.out.multiqc) + } // + // MODULE: Run FastQ Screen + // + + // Parse the reference info needed to create a FastQ Screen config file + // and transpose it into a tuple containing lists for each property + + if (!("fastqscreen" in skip_tools)) { + ch_fastqscreen_refs = channel.fromList( + samplesheetToList( + fastq_screen_references, + "${projectDir}/assets/schema_fastq_screen_references.json", + ) + ) + .toList() + .transpose() + .toList() + + FASTQSCREEN_FASTQSCREEN(ch_sample, ch_fastqscreen_refs) + + ch_multiqc_files = ch_multiqc_files.mix(FASTQSCREEN_FASTQSCREEN.out.txt) + } + + // MODULE: Align reads with BWA-MEM2 + if (!("bwamem2_mem" in skip_tools)) { + BWAMEM2_MEM( + ch_sample, + bwamem2_index, + fasta_reference, + sort_bam ?: true, + ) + ch_bwamem2_mem = BWAMEM2_MEM.out.bam + + SAMTOOLS_INDEX(ch_bwamem2_mem) + + ch_samtools_index = SAMTOOLS_INDEX.out.bai + } + + + if (!("picard_collectmultiplemetrics" in skip_tools)) { + + ch_bait_intervals = bait_intervals ? channel.fromPath(bait_intervals).collect() : channel.empty() + ch_target_intervals = target_intervals ? channel.fromPath(target_intervals).collect() : channel.empty() + + QC_BAM( + ch_bwamem2_mem, + ch_samtools_index, + fasta_reference, + ref_fai, + run_picard_collecthsmetrics, + ch_bait_intervals, + ch_target_intervals, + ref_dict, + ) + + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics, QC_BAM.out.hs_metrics) + } + // Collate and save software versions // - softwareVersionsToYAML(ch_versions) - .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_pipeline_software_mqc_versions.yml', sort: true, newLine: true) - .set { ch_collated_versions } + def collated_versions = softwareVersionsToYAML( + softwareVersions: channel.topic("versions"), + nextflowVersion: workflow.nextflow.version, + ).collectFile( + storeDir: "${outdir}/pipeline_info", + name: 'nf_core_' + 'seqinspector_software_' + 'mqc_' + 'versions.yml', + sort: true, + newLine: true, + ) // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description)) - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: false)) - - MULTIQC ( - ch_multiqc_files.collect(), + + ch_tags = ch_multiqc_files.map { meta, _sample -> meta.tags }.flatten().unique() + + ch_multiqc_config = multiqc_config + ? channel.fromPath(multiqc_config, checkIfExists: true) + : channel.fromPath("${projectDir}/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_logo = multiqc_logo + ? channel.fromPath(multiqc_logo, checkIfExists: true) + : channel.empty() + + summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params)) + + ch_multiqc_custom_methods_description = multiqc_methods_description + ? file(multiqc_methods_description, checkIfExists: true) + : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true) + ch_methods_description = channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description)) + + ch_multiqc_extra_files = ch_multiqc_extra_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_extra_files = ch_multiqc_extra_files.mix(collated_versions) + ch_multiqc_extra_files = ch_multiqc_extra_files.mix( + ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true) + ) + // Add index to other MultiQC reports + //ch_multiqc_extra_files_global = channel.empty() + ch_multiqc_extra_files_global = ch_multiqc_extra_files.mix( + ch_tags.toList().map { tag_list -> reportIndexMultiqc(tag_list) }.collectFile(name: 'multiqc_index_mqc.yaml') + ) + + MULTIQC_GLOBAL( + ch_multiqc_files.map { _meta, file -> file }.mix(ch_multiqc_extra_files_global).collect(), + ch_multiqc_config.toList(), + [], + ch_multiqc_logo.toList(), + [], + [], + ) + + ch_multiqc_extra_files_tag = ch_multiqc_extra_files.mix( + ch_tags.toList().map { tag_list -> + reportIndexMultiqc(tag_list, false) + }.collectFile( + name: 'multiqc_index_mqc.yaml' + ) + ) + + multiqc_extra_files_per_tag = ch_tags.combine(ch_multiqc_extra_files_tag) + + // Group samples by tag + tagged_mqc_files = ch_tags + .combine(ch_multiqc_files) + .filter { sample_tag, meta, _sample -> sample_tag in meta.tags } + .map { sample_tag, _meta, sample -> [sample_tag, sample] } + .mix(multiqc_extra_files_per_tag) + .groupTuple() + .tap { mqc_by_tag } + .collectFile { sample_tag, _samples -> + def prefix_tag = "[TAG:${sample_tag}]" + [ + "${prefix_tag}_multiqc_extra_config.yml", + """ + |output_fn_name: \"${prefix_tag}_multiqc_report.html\" + |data_dir_name: \"${prefix_tag}_multiqc_data\" + |plots_dir_name: \"${prefix_tag}_multiqc_plots\" + """.stripMargin(), + ] + } + .map { file -> [(file =~ /\[TAG:(.+)\]/)[0][1], file] } + .join(mqc_by_tag) + .multiMap { _sample_tag, config, samples -> + samples_per_tag: samples.flatten() + config: config + } + + + MULTIQC_PER_TAG( + tagged_mqc_files.samples_per_tag, ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + tagged_mqc_files.config, + ch_multiqc_logo.toList(), + [], + [], ) emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] + global_report = MULTIQC_GLOBAL.out.report.toList() // channel: [ /path/to/multiqc_report.html ] + grouped_reports = MULTIQC_PER_TAG.out.report.toList() // channel: [ /path/to/multiqc_report.html ] } - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - THE END -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/